Member-only story

DropboxをNginxからEnvoyにマイグレーションする方法(第三章)

gavin.zhou
12 min readJan 18, 2021

--

今回はDropboxをNginxからEnvoyにマイグレーションするやり方をご説明します。今回の記事は長いので6回に分けてお送ります。今回は3回目です。

Configuration

Nginxには、人間が読みやすいシンプルなコンフィグレーションができるという、素晴らしい利点があります。しかし、コンフィグが複雑になり、コード生成されるようになると、この利点は失われてしまいます。

前述したように、Nginx のコンフィグは Python2, Jinja2, YAML を組み合わせて生成されています。erb, pug, Text::Template, あるいは m4 で見たことがある人もいるかもしれませんし、そのバリエーションを書いたことがある人もいるかもしれません。

{% for server in servers %}server {{% for error_page in server.error_pages %}error_page {{ error_page.statuses|join(' ') }} {{ error_page.file }};{% endfor %}...{% for route in service.routes %}{% if route.regex or route.prefix or route.exact_path %}location {% if route.regex %}~ {{route.regex}}{%elif route.exact_path %}= {{ route.exact_path }}{%else %}{{ route.prefix }}{% endif %} {{% if route.brotli_level %}brotli on;brotli_comp_level {{ route.brotli_level }};{% endif %}...

Nginx の設定生成のアプローチには大きな問題がありました。コンフィグ生成に関与するすべての言語は、置換やロジックを許可していました。YAML にはアンカーがあり、Jinja2 にはループ/if/マクロがあり、もちろん Python は Turing-complete です。クリーンなデータモデルがなければ、複雑さはすぐにこの3つすべてに広がってしまいます。

--

--

No responses yet