アップストリーム解決により構成が壊れる

アップストリーム解決により構成が壊れる

私はUbuntu 16.04に最新のNGINXをインストールしています。公式リポジトリ:

$ sudo nginx -v
nginx version: nginx/1.11.8

では次のように定義されています/etc/nginx/sites-available/greendot.conf:

# local dnsmasq
resolver 127.0.0.1;

map $http_upgrade $connection_upgrade {
  default upgrade;
  '' close;
}

upstream websocket {
  zone elixr 64k;
  server greendot-elixr-1:4000 resolve;
  server greendot-elixr-2:4000 resolve;
}

server {
  listen 4000;
  location / {
    proxy_pass http://websocket;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
  }
}

私はフォローしましたDNS解決された上流サーバーの設定に関するドキュメントしかし、この構成は失敗します。

$ sudo nginx -T
nginx: [emerg] invalid parameter "resolve" in /etc/nginx/sites-enabled/greendot-nginx.conf:11
nginx: configuration file /etc/nginx/nginx.conf test failed

私の目標は、DNS を使用してメンバーを定期的に解決するサーバーを作成することです。何が間違っているのでしょうか?

答え1

このresolveパラメータは、nginx の商用提供の一部です。

最終的に私が使用したアプローチは次のとおりです。

server {
    ...

    # Use docker's internal nameserver
    resolver 127.0.0.11 valid=10s ipv6=off;

    location / {
        set $target myproject-web;
        proxy_pass  http://$target:8000;
    }
}

ご了承ください:

  • 変数 ($target など) を定義する必要があります。そうしないと、nginx は一度クエリを実行し、結果の IP を永久に使用します (リゾルバの 'valid' パラメータは無視されます)。
  • DNS クエリが複数の IP を返す場合、nginx はそれらをラウンドロビンします。
  • より複雑なアップストリーム要件 (バックアップ エンドポイントなど) がある場合、このアプローチは機能しない可能性があります。

関連情報