nginx訪問不到


nginx訪問不到

今天,一朋友的一台linux服務器上部署了nginx,但是外部(公網)就是不能訪問,於是協助其排查。整體思路如下:

1、確認nginx配置是否ok。

2、確認網絡是否可達。

3、是否受防火牆安全控制等。

4、排除以上原因之后,遠程實際再測試。

 

 

那么開始排查:

1、確認nginx配置是否ok。

1.1、檢查nginx的配置。

發現有報錯

2013/11/13 15:35:09 [emerg] 7739#0: bind() to 0.0.0.0:80 failed (98: Address already in use)

netstat -lanp|grep 80

原來有httpd進程(apache),關閉之

1.2本機是否可以訪問(公網ip)

本機curl http://12x.xx.x.xx/ 發現是ok的,日志正常打印(access.log有滾動)

 

2、確認網絡是否可達

telnet 12x.xx.x.xx 80

Trying 12x.xx.x.xx...

Connected to 12x.xx.x.xx.

Escape character is '^]'.

這樣就說明網絡上可達,並且TCP三次握手可以完成,因為能telnet通,排除了網絡不通的情況

3、是否受防火牆安全控制等。

將iptables和selinux關閉

以下4條命令清除iptables的配置

iptables -F

iptables -F -t nat

iptables -X

iptables -X -t nat

setenforce 0 #關閉selinux

 

4、遠程訪問再次確認和推論

4.1遠程使用瀏覽器訪問,不能訪問。。。

4.2服務器日志沒有滾動

4.3基於4.1和4.2,結論是請求沒有到nginx,但是根據,2、網絡是可達的。

似乎矛盾出來了:網絡可達,但是80端口的請求就確實沒有到nginx。。實際上,網絡的可達,或者說telnet能痛,只說明TCP三次握手是ok的,但是流量器不能訪問,說明http數據傳輸受影響。所以,初步判斷,是給服務器之前的“某個網絡設備”過濾了。

4.4telnet 之后,直接輸入GET /,發現頁面能傳輸回來,但是輸入了GET / HTTP/1.1就會被卡死,無任何數據反饋。於是就比較懷疑是服務器之前的“某個網絡設備”過濾了(專門過濾http數據)。

 

5、我們修改了nginx的監聽的端口為8080,發現訪問正常了:無論是瀏覽器還是telnet之后輸入GET / HTTP/1.1都ok

 

和網絡工程師聊了。一般運營商不會過濾80端口的(就算沒有icp,一般也不會封)

【結論】:應該還是在應用層上出問題了,服務器之前的“某個網絡設備”過濾了

 

經驗教訓:

1、排查網站不能訪問故障基本思路:內到外一層一層測試,並且要測試網絡是否可達,為了便於解決問題,最好將服務器的selinux防火牆關閉。

2、在我大中華地區,icp備案還是得加上。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM