<b>背景:</b>
一客戶将線下電商網站遷移到阿裡雲上,公網出口使用阿裡雲slb,slb後端執行個體為ecs(webserver)web服務使用nginx。後端app伺服器使用了tomcat;tomcat根目錄為xxx,應用程式放在其根目錄下的一個二級目錄aaa,要求公網使用者通過域名通路時能直接重定向到二級目錄aaa,而不需要手動輸入aaa路徑來通路網站。
<b>網絡示意圖如下:</b>
<b></b>

<b>問題出現:</b>
首先按照正常的配置流程完成後,在浏覽器中通過域名加路徑的方式能夠正常通路,當在nginx上做過url重定向配置以後,再次通路時,詭異的現象出現了
<b>如下:</b>
浏覽器中url路徑倒是被重定向成功了,但通路失敗了,且報502錯誤。
<b>問題處理過程:</b>
好吧,當看到上面出現的502報錯時,我們都會立馬想到可能是nginx服務有問題,或者是後端的tomcat服務有問題,那我就一步一步排查了。
<b>1 确認tomcat服務是否正常</b>
常用方法:
檢視tomcat服務是否開啟,端口是否開啟,是否有防火牆政策阻止,tomcat配置是否正常
<b>2 确認tomcat正常後在到nginx伺服器上,看nginx相關服務是否正常( 在這裡折騰得最久了)</b>
首先檢測了nginx的服務正常後,開始懷疑,是重定向配置有問題
重定向配置如下:
<b>3 抓包</b>
在這裡處理的過程中我們換過很多種重定向的方式,但問題依然存在,無賴之下,我們對通路時,在浏覽器下抓包,和通過curl 擷取通路資訊
浏覽器抓包,看到第一個狀态碼是301。
如下圖:
curl 抓取,看到的也是301狀态碼。
通過上面的兩種方法抓包來看,301是重定向的狀态碼,,通路并沒有錯誤,可為什麼網頁就是不能正常通路呢,此時我們開始懷疑阿裡雲的slb的配置了。
<b>4 阿裡雲slb 端口健康檢測配置修改</b>
我們一步步檢測阿裡雲slb的配置,在端口的健康檢測配置項中看到了“正常狀态碼”配置
如下:
預設我們都是使用狀态碼 200 表示健康檢測成功,可是我們現在傳回的狀态碼是301,但是我們沒有選擇,不知道跟這個有沒有關系,于是我們将http_3xx 選中
<b>再次通路網站,終于看到希望了</b>
<b>總結:</b>
阿裡雲slb健康檢測,預設情況通過頁面傳回的狀态碼200表示背景服務正常,如果網站有做過url重定向,它傳回的重定向狀态碼是3xx 而不是預設的2xx ,此時在配置slb時,如果在健康檢測配置項中不勾選 3xx 那麼它會判斷為後端服務異常,導緻網站通路失敗。