同事發現nginx配置后https 無法訪問,我幫忙解決的時候從以下出發點
1.防火牆未開放443端口
2.配置出錯
- 1
- 2
- 3
於是就 netstat -anp
查看防火牆開的端口
發現已經在監聽了,那肯定是配置問題。
檢查配置沒問題,重新生成證書等方法也還是無法訪問,甚至在別的機器上https的配置copy過來依然無法訪問
冷靜下來想想,nginx都沒有返回狀態嗎,直接無法連接。這到底請求到了嗎?
只能進入防火牆配置文件看看了
vim /etc/sysconfig/iptables
問題就在這里了,開放端口一定要在
-A INPUT -j REJECT –reject-with icmp-host-prohibited
這句的前面,的前面,的前面!!!
因為順序執行的原因,放在后面的規則就無效了,網上通常會看到這么一句話
特別提示:很多網友把這兩條規則添加到防火牆配置的最后一行,導致防火牆啟動失敗,正確的應該是添加到默認的22端口這條規則的下面
原因是這條規則的作用是拒絕所有-j REJECT 在iptables幫助文檔里面有一下說明This is used to send back an error packet in response to the matched packet
就是表明拒絕你,並返回一個錯誤連接信息。請求沒到nginx那,肯定沒有狀態碼返回,同時你的瀏覽器返回的只能是無法連接。
總結
被netstat -anp 出來的內容欺騙了,規則是添加了,但是沒起效果。
如果返回404,403等等,那說明是nginx的配置等因素;
如果無法連接,通常是防火牆,或者nginx為啟動等可能的因素;
冷靜分析問題,查看錯誤信息,才是解決問題的辦法,萬萬不能try stuff until it works,那樣只能是無用功。