Я использую 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 будет циклически обращаться к ним.
- Этот подход может не подойти вам, если у вас более сложные требования к восходящему потоку данных (резервные конечные точки и т. д.).