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


背景:
          一客戶將線下電商網站遷移到阿里雲上,公網出口使用阿里雲SLB,SLB后端實例為ECS(webserver)web服務使用nginx。后端APP服務器使用了tomcat;tomcat根目錄為xxx,應用程序放在其根目錄下的一個二級目錄AAA,要求公網用戶通過域名訪問時能直接重定向到二級目錄AAA,而不需要手動輸入AAA路徑來訪問網站。
網絡示意圖如下:
f51c981085cbf3ed29a554b4b06caa1513fd6acd
問題出現:
首先按照正常的配置流程完成后,在瀏覽器中通過域名加路徑的方式能夠正常訪問,當在nginx上做過url重定向配置以后,再次訪問時,詭異的現象出現了
如下:
瀏覽器中URL路徑倒是被重定向成功了,但訪問失敗了,且報502錯誤。
9e6b3e31c8498b468a9d40216611a3bff4588f7d
問題處理過程:
好吧,當看到上面出現的502報錯時,我們都會立馬想到可能是nginx服務有問題,或者是后端的tomcat服務有問題,那我就一步一步排查了。
1 確認tomcat服務是否正常
  常用方法:
  查看tomcat服務是否開啟,端口是否開啟,是否有防火牆策略阻止,tomcat配置是否正常
2 確認tomcat正常后在到nginx服務器上,看nginx相關服務是否正常( 在這里折騰得最久了)
  首先檢測了nginx的服務正常后,開始懷疑,是重定向配置有問題
重定向配置如下:
 
06ed89d8f0179a5e25c6cdaa09429df627f33428
3 抓包
在這里處理的過程中我們換過很多種重定向的方式,但問題依然存在,無賴之下,我們對訪問時,在瀏覽器下抓包,和通過curl 獲取訪問信息
 
瀏覽器抓包,看到第一個狀態碼是301。
如下圖:
82002c183b311d1ccaa3ea3d34e709b1cdbae98b
curl 抓取,看到的也是301狀態碼。
如下圖:
9e5304a885a39b21696051efa86876385c5bb5ce
通過上面的兩種方法抓包來看,301是重定向的狀態碼,,訪問並沒有錯誤,可為什么網頁就是不能正常訪問呢,此時我們開始懷疑阿里雲的SLB的配置了。
 
4 阿里雲SLB 端口健康檢測配置修改
      我們一步步檢測阿里雲SLB的配置,在端口的健康檢測配置項中看到了“正常狀態碼”配置
如下:
758e6564767b71c6624f412414362b7c92c22887
     默認我們都是使用狀態碼 200 表示健康檢測成功,可是我們現在返回的狀態碼是301,但是我們沒有選擇,不知道跟這個有沒有關系,於是我們將http_3xx 選中
6a7168c19a3bcc9f99d0a802f40d5ed4c63bf2f1
再次訪問網站,終於看到希望了
 
總結:
        阿里雲SLB健康檢測,默認情況通過頁面返回的狀態碼200表示后台服務正常,如果網站有做過url重定向,它返回的重定向狀態碼是3xx 而不是默認的2xx ,此時在配置SLB時,如果在健康檢測配置項中不勾選 3xx 那么它會判斷為后端服務異常,導致網站訪問失敗。


免責聲明!

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



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