1. 程式人生 > >Nginx 提示host not found in upstream 錯誤解決方法

Nginx 提示host not found in upstream 錯誤解決方法

dns設置 1.7 bsp 步驟 訪問 size 實例 n-n 每次

Nginx DNS resolver配置實例,本文講解在proxy_pass 和 upstream server 通信的時候需要手動指定 resolver,本文就給出了配置實例.


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;

[root@localhost ~]# ping www.baidu.com
ping: unknown host www.baidu.com

解決:

首先確定已經連接上路由器,並且路由器能夠訪問外網,可以通過訪問網關進行確定

[root@localhost ~]# ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.

64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=2.96 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=1.75 ms

如果確定網絡沒問題的情況下, 可以通過如下步驟尋找解決辦法:

1) 確定設置了域名服務器, 沒有的話, 建議設置Google的公共DNS服務, 可通過cat /etc/resolv.conf查看當前的DNS設置

技術分享圖片

技術分享圖片

2) 確保網關已設置 ,通過route命令查看

[root@localhost ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 * 255.255.255.0 U 1 0 0 eth0
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0

網關和dns都配置好了基本就可以上網了。

Nginx 提示host not found in upstream 錯誤解決方法