我在 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(忽略解析器的“有效”参数)。
- 如果 DNS 查询返回多个 IP;nginx 将对它们进行循环分配。
- 如果您有更复杂的上游要求(备份端点等),这种方法可能不适合您。