nginx 通過 proxy_pass 和 upstream server 通信的時候需要手動指定 resolver。某些時候 DNS 解析失敗就會出現這個錯誤:
代碼如下:
domain.com could not be resolved.
可以指定多個 DNS 并重置域名 TTL 延長 nginx 解析緩存來保障解析成功率:
代碼如下:
resolver 223.5.5.5 223.6.6.6 1.2.4.8 114.114.114.114 valid=3600s;
如果還有解析錯誤,可以用 dnsmasq 在本地自建 DNS,順帶還有加速解析的好處:
代碼如下:
#/etc/dnsmasq.conf
domain-needed
bogus-priv
cache-size=51200
listen-address=127.0.0.1
#server=223.5.5.5
resolv-file=/etc/resolv.conf
另外需要注意的是 proxy_pass 并不是每次請求都會進行解析,如果 upstream IP 頻繁變動,需要強制解析:
代碼如下:
# via http://forum.nginx.org/read.php?2,215830,215832#msg-215832
resolver 127.0.0.1;
set $backend "foo.example.com";
proxy_pass http://$backend;
新聞熱點
疑難解答