今天,正在考慮要一個程式,然後看到微信圖示閃動,打開看是一個朋友發了一條消息,是他營運的網站位址,下意識打開,顯示無法通路。
此時收到第二條消息,大概就是說網站無法打開了,不知道什麼原因,好像是突然就不能用了。
因為這個站上個月添加了SSL證書,當時是沒有強制開啟https通路,是以在浏覽器修改了位址,使用http://方式通路,發現竟然可以打開,也就是采用https通路時無法打開,去掉s後就可以,感覺不可思議。
下面開始排查,網站能通路,就說明伺服器基礎環境是沒問題的,重點檢視SSL證書部署,ping了域名解析的IP沒問題,檢查了證書資訊未過期部署也正常,檢查nginx配置代碼正常,檢查伺服器端口443配置正常,打開寶塔運維平台的安全頁面,防火牆部配置設定置如下:

寶塔面闆中443端口已放行
當時沒太留意這個“未使用”,隻是看到有配置放行,就以為沒問題。
各種配置或者能想到有問題的地方都檢查了,依舊無法确定是何原因導緻的不能通路。
在網站通路入庫index.php檔案,在第一行加入調試語句,通路http網址,輸出了調試資訊,但是輸入https網址仍然是顯示打不開。不過通過此方法可以确定,應該是在nginx這裡出現了問題,導緻了錯誤,是以并未去解析PHP檔案。
但是接下來怎麼定位是什麼問題,沒有任何想法。那就先搜尋一下,進行百度谷歌以後,找到個提示資訊,可以使用wget分别通路http和https網址,檢視是否有差別。
在本地通路結果如下:

本地wget結果
然後又在伺服器執行後結果如下:

伺服器執行wget結果
可以看到通路http傳回200資料正常,通路https後有報錯,是以會導緻無法打開。
可是僅檢視這個傳回的錯誤資訊還是無法确定是什麼問題,繼續百度、谷歌,不過這次沒找到多少有用的資訊,但是基本上都把矛頭指向了nginx服務,因為伺服器是采用寶塔搭建的web伺服器環境,一度懷疑是寶塔有問題,到其官網搜尋了一番,不過也沒收貨。
然後就打算把nginx重新開機一下,實在不行就解除安裝重裝,到寶塔面闆重新開機nginx,發現了新的報錯資訊:bind() to 0.0.0.0:80 failed (98: Address already in use),這個錯誤就比較明顯了,簡單搜尋也基本能确定是80端口被占用導緻的報錯。
發現這個問題後,突然就想到這個伺服器原來是安裝了獨立nginx服務,後來因為站點管理太麻煩,就又安裝了寶塔面闆及寶塔裡的nginx,将原來的nginx服務關停了,當時通路沒問題就沒理會安裝了兩個nginx的問題。
這時又想起上面的安全頁面截圖,443端口雖然放行了但是顯示未使用,可見伺服器目前運作的nginx不是寶塔内安裝的nginx,而是原來的nginx,檢視伺服器日志,果然伺服器昨天重新開機過,也就是啟動後nginx運作了舊版的,而舊的nginx并沒有配置SSL相關内容,基本可以确定應該就是nginx舊版的問題了。
打開伺服器指令行,執行 ps -e | grep nginx,确實有兩個。執行 kill -9 | 線程号,然後再到寶塔内重新開機nginx,這次沒有報錯,并且到安全頁面檢視443端口顯示“正常”并不是“未使用”了,再次到浏覽器通路https網站位址,熟悉的網頁顯示出來了。
至此問題解決。可以看到這個問題不難解決,難的是如何發現問題的根本原因,從看到問題,到發現問題所在,中間走了不少彎路,是以記錄以上過程備忘。