問題: nginx啟動或者reload的時候,會對proxy_pass後面的功能變數名稱進行DNS解析,如果解析失敗,啟動就會失敗或者reload失敗。 我們是to B的產品,客戶的環境可能是不通公網的,因此不能使用公網DNS服務,進而導致在ng啟動的時候,對proxy_pass後緊跟功能變數名稱的dns解析失敗, ...
問題:
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服務地址。