天天看點

阿裡雲SLB漏選“健康檢查正常的http狀态碼”導緻url重定向失敗問題處理

<b>背景:</b>

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

<b>網絡示意圖如下:</b>

<b></b>

阿裡雲SLB漏選“健康檢查正常的http狀态碼”導緻url重定向失敗問題處理

<b>問題出現:</b>

      首先按照正常的配置流程完成後,在浏覽器中通過域名加路徑的方式能夠正常通路,當在nginx上做過url重定向配置以後,再次通路時,詭異的現象出現了

<b>如下:</b>

浏覽器中url路徑倒是被重定向成功了,但通路失敗了,且報502錯誤。

阿裡雲SLB漏選“健康檢查正常的http狀态碼”導緻url重定向失敗問題處理

<b>問題處理過程:</b>

        好吧,當看到上面出現的502報錯時,我們都會立馬想到可能是nginx服務有問題,或者是後端的tomcat服務有問題,那我就一步一步排查了。

<b>1 确認tomcat服務是否正常</b>

  常用方法:

  檢視tomcat服務是否開啟,端口是否開啟,是否有防火牆政策阻止,tomcat配置是否正常

<b>2 确認tomcat正常後在到nginx伺服器上,看nginx相關服務是否正常( 在這裡折騰得最久了)</b>

  首先檢測了nginx的服務正常後,開始懷疑,是重定向配置有問題

重定向配置如下:

阿裡雲SLB漏選“健康檢查正常的http狀态碼”導緻url重定向失敗問題處理

<b>3 抓包</b>

       在這裡處理的過程中我們換過很多種重定向的方式,但問題依然存在,無賴之下,我們對通路時,在浏覽器下抓包,和通過curl 擷取通路資訊

浏覽器抓包,看到第一個狀态碼是301。

如下圖:

阿裡雲SLB漏選“健康檢查正常的http狀态碼”導緻url重定向失敗問題處理

curl 抓取,看到的也是301狀态碼。

阿裡雲SLB漏選“健康檢查正常的http狀态碼”導緻url重定向失敗問題處理

       通過上面的兩種方法抓包來看,301是重定向的狀态碼,,通路并沒有錯誤,可為什麼網頁就是不能正常通路呢,此時我們開始懷疑阿裡雲的slb的配置了。

<b>4 阿裡雲slb 端口健康檢測配置修改</b>

      我們一步步檢測阿裡雲slb的配置,在端口的健康檢測配置項中看到了“正常狀态碼”配置

如下:

阿裡雲SLB漏選“健康檢查正常的http狀态碼”導緻url重定向失敗問題處理

     預設我們都是使用狀态碼 200 表示健康檢測成功,可是我們現在傳回的狀态碼是301,但是我們沒有選擇,不知道跟這個有沒有關系,于是我們将http_3xx 選中

阿裡雲SLB漏選“健康檢查正常的http狀态碼”導緻url重定向失敗問題處理

<b>再次通路網站,終于看到希望了</b>

<b>總結:</b>

        阿裡雲slb健康檢測,預設情況通過頁面傳回的狀态碼200表示背景服務正常,如果網站有做過url重定向,它傳回的重定向狀态碼是3xx 而不是預設的2xx ,此時在配置slb時,如果在健康檢測配置項中不勾選 3xx 那麼它會判斷為後端服務異常,導緻網站通路失敗。

繼續閱讀