Ich verwende Ubuntu 16.04 mit der neuesten NGINX-Version vonihr offizielles Repository:
$ sudo nginx -v
nginx version: nginx/1.11.8
Ich habe Folgendes definiert in /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;
}
}
Ich bin gefolgtdie Dokumentation zum Einrichten von DNS-aufgelösten Upstream-Servern, und dennoch schlägt diese Konfiguration fehl:
$ 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
Mein Ziel ist es einfach, einen Server zu erstellen, der DNS verwendet, um seine Mitglieder regelmäßig aufzulösen. Was mache ich falsch?
Antwort1
Der resolve
Parameter ist Teil des kommerziellen Angebots von nginx.
Hier ist der Ansatz, den ich letztendlich verwendet habe:
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;
}
}
Beachten Sie, dass:
- Sie müssen eine Variable definieren (wie $target), oder nginx führt die Abfrage einmal durch und verwendet die resultierende(n) IP(s) dauerhaft (unter Ignorierung des „valid“-Parameters des Resolvers).
- Wenn die DNS-Abfrage mehrere IPs zurückgibt, führt nginx einen Round-Robin-Ansatz zu ihnen durch.
- Dieser Ansatz ist für Sie möglicherweise nicht geeignet, wenn Sie komplexere Upstream-Anforderungen haben (Backup-Endpunkte usw.).