1.背景:在原來已經寫好的項目,須要從新部署一套新的環境,這裏主要是nginx , 和項目代碼。 2.問題:在代碼沒有改動的前提下,頁面上創建websocket 老是創建不成功,不成功的主要緣由是報了603(603是咱們後臺自定義的錯誤編碼,是請求後綴不正確的錯誤,這個其實不重要) 3.排查緣由:在後臺搜索603的錯誤code,發現是在一個Handler 中處理而設置的code,這個Handler主要是處理請求是否合法以及登陸token的驗證邏輯。可是如今在創建websocket的時候,卻進入了這裏呢? 4.問題分析:在本地跟蹤調試代碼,發現若是是websocket創建的時候,發起的請求,正常 的是不會走到這個preHandler 裏面的,可是部署的新環境卻進到了這個方法中,因此我作了一個猜測:就是瀏覽器發起websocket的時候,進入到後臺倒是一個普通的Http請求,這裏忽然就想到websocket所用的協議和Http的協議是不一樣的,當我再看websocket創建連接的請求的時候,發現請求頭中有nginx , 而後我就開始懷疑nginx 默認是否支持websocket 。 5.解決辦法:查找了一圈以後,就發現若是nginx支持websocket協議的話,是須要在nginx 的配置中的server內配置
// 啓用支持websocket鏈接 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";
配置上這一段的,而後就找運維配置上了以後,發現,真的成功了,也是一個歷來沒有遇到過的問題,特此記錄之!!!nginx