問題:
nginx啟動或者reload的時候,會對proxy_pass后面的域名進行DNS解析,如果解析失敗,啟動就會失敗或者reload失敗。
我們是to B的產品,客戶的環境可能是不通公網的,因此不能使用公網DNS服務,進而導致在ng啟動的時候,對proxy_pass后緊跟域名的dns解析失敗,最終導致nginx啟動失敗。
解決方案:
不直接在proxy_pass后寫域名,而通過變量的方式配置,如下:
set $target https://www.xxx.com;
proxy_pass $target ;
除了上面的配置之外,還要在server屬性的平行域下使用resolver指令,如下
resolver 114.114.114.114;
Why?
假如proxy_pass后緊跟域名,那么在nginx啟動的時候,會使用/etc/resolv.conf下配置的DNS服務器進行域名解析。
采用變量的方式后,nginx啟動時不會再去解析變量所對應的域名,但是會在進行代理訪問的時候,進行域名解析,此時不會使用/etc/resolv.conf配置的DNS服務器,必須使用reslover指令指定DNS服務地址。