当时配置文件已精简如下:
server {
listen 80;
server_name landing.dev.xxxnohackxxx.com landing.xxxnohackxxx.tech;
location / {
proxy_pass http://xxxnohackxxx-landing-dev.mosaic-dev.svc.cluster.local:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
}
}
server {
listen 80;
server_name dev.xxxnohackxxx.com xxxnohackxxx.tech;
location / {
proxy_pass http://xxxnohackxxx-frontend-site-dev.mosaic-dev.svc.cluster.local:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
}
}更新配置 nginx -s reload 会报错:
nginx: [emerg] host not found in upstream "xxxnohackxxx-landing-dev.mosaic-dev.svc.cluster.local:8080" in /etc/nginx/conf.d/xxxnohackxxx.conf:19
使用 nslookup xxxnohackxxx-landing-dev.mosaic-dev.svc.cluster.local
得到结果,一切正常:
Server: 192.168.0.10
Address: 192.168.0.10#53
Name: xxxnohackxxx-landing-dev.mosaic-dev.svc.cluster.local
Address: 192.168.33.71更改nginx config,发现如果使用同一个proxy_pass(landing或frontend-site),nginx是可以更新配置的。
查看DNS解析配置: cat /etc/resolv.conf
options timeout:2 attempts:3 rotate single-request-reopen
; generated by /usr/sbin/dhclient-script
nameserver 192.168.0.10
nameserver 100.100.2.136
#nameserver 100.100.2.138关键点在第一行,发现一个熟悉的rotate,注视掉,果然nginx可以更新配置了。 接下来介绍几个参数: timeout: 请求下一个nameserver的等待时间,单位是秒,只有超时才会轮训nameserver,解析失败不会。所以多个nameserver如果解析范围不一致,后边的就大概用不上。
attempts: 重试总次数,默认是2
rotate:按顺序循环请求 nameserver,有点负载均衡的意思。但是在 RHEL7.5 之前有个bug,会从第二个开始使用,官方给的解释是 nameserver rotation 发生在 nameserver 之前,详细参考 redhat solutions
single-request-reopen: 只收到一个IPV4应答或者只收到一个IPV6应答,重新开一个socket查询。这个说起来有点复杂,可以参考 cnblogs