나는 최신 NGINX가 설치된 Ubuntu 16.04를 사용하고 있습니다.공식 저장소:
$ 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는 그들에게 라운드 로빈을 할 것입니다.
- 업스트림 요구 사항(백업 엔드포인트 등)이 더 복잡하다면 이 접근 방식이 적합하지 않을 수 있습니다.