免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
springboot + websocket + linux服務(wù)器(nginx)404問(wèn)題解決

問(wèn)題描述:

最近基于springboot做一個(gè)微信公眾號(hào),內(nèi)嵌一個(gè)小的購(gòu)物商城系統(tǒng),用戶下單后,使用websocket往商家管理系統(tǒng)發(fā)送消息。在本地測(cè)試沒(méi)有任何問(wèn)題,但是部署到centos服務(wù)器上之后一直報(bào)錯(cuò)404??偨Y(jié)了網(wǎng)上很多解決方法都不行,網(wǎng)上討論的都是說(shuō)tomcat版本太低,因?yàn)?font color="#ff000">websocket需要tomcat7.0以上才支持。但是我是用springboot+maven搭建的項(xiàng)目,使用的是springboot內(nèi)嵌的tomcat服務(wù)器,我查看了maven,發(fā)現(xiàn)tomcat版本是8.0+。那么就不是tomcat版本問(wèn)題了。

解決思路:

排除了tomcat問(wèn)題,jdk版本也是1.8+,websocket部署到服務(wù)器上還是404,網(wǎng)上還有人說(shuō)是tomcat的jar包和項(xiàng)目jar沖突,可是我springboot項(xiàng)目使用的內(nèi)嵌tomcat,于是我利用Maven Helper(非常好用的idea插件)查看了下依賴發(fā)現(xiàn)并沒(méi)有沖突??ㄔ谶@里很久,我特地看了下websocket請(qǐng)求格式:
Websocket握手格式:

GET /chat HTTP/1.1Host: server.example.comUpgrade: websocketConnection: UpgradeSec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==Sec-WebSocket-Protocol: chat, superchatSec-WebSocket-Version: 13Origin: http://example.com

這請(qǐng)求類似http協(xié)議,里面多了陌生的內(nèi)容是:

Upgrade: websocketConnection: Upgrade

當(dāng)時(shí)一臉懵逼,這是什么玩意啊?然后我就百度了下,原來(lái)這個(gè)就是Websocket的核心,他會(huì)告訴Apache、Nginx等服務(wù)器我發(fā)起的是websocket請(qǐng)求,不是http!下面的三個(gè)參數(shù)Sec-WebSocket-Key、Sec-WebSocket-Protocol、Sec-WebSocket-Version作用大概就是驗(yàn)證請(qǐng)求確實(shí)是websocket,同時(shí)指定協(xié)議版本吧。
這時(shí)候我恍然大悟!我的項(xiàng)目使用了nginx做了轉(zhuǎn)發(fā),那么會(huì)不會(huì)是因?yàn)槲覜](méi)有配置nginx響應(yīng)websocket請(qǐng)求呢?答案是肯定的!

配置nginx反向代理響應(yīng)webSocket請(qǐng)求

需要在代理的請(qǐng)求配置中加入下面的配置:

proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";

nginx配置如下:

server { listen       80; server_name  localhost; #charset koi8-r; location / {     root   /usr/java/myproject/sell;     index  index.html index.htm; } location /sell/ {     proxy_pass http://127.0.0.1:8081/sell/; }location /sell/webSocket {    proxy_pass http://127.0.0.1:8081/sell/webSocket;     proxy_set_header Upgrade $http_upgrade;    proxy_set_header Connection "upgrade";}

這段配置就是把所有的/sell下的請(qǐng)求轉(zhuǎn)到8081端口處理,把/sell/webSocket請(qǐng)求轉(zhuǎn)發(fā)到指定的請(qǐng)求接口,發(fā)現(xiàn)404錯(cuò)誤消失,webSocket服務(wù)也可以訪問(wèn)到。但是出現(xiàn)了一個(gè)新的問(wèn)題就是,webSocket連接后沒(méi)有保持連接,大約一分鐘之后就會(huì)斷開,原因是因?yàn)樵诘谝淮握?qǐng)求后到第二次請(qǐng)求到來(lái)的時(shí)間超過(guò)了默認(rèn)的最大時(shí)間,超時(shí)了。這里提供一個(gè)解決思路:
需要配置的三個(gè)核心參數(shù):

proxy_connect_timeout 4s; proxy_read_timeout 7200s; proxy_send_timeout 12s; 

proxy_read_timeout是服務(wù)器對(duì)連接等待的最大時(shí)間,也就是說(shuō),當(dāng)你webSocket使用nginx轉(zhuǎn)發(fā)的時(shí)候,用上面的配置來(lái)說(shuō),如果72000秒內(nèi)沒(méi)有通訊,依然是會(huì)斷開的,你可以按照需求來(lái)設(shè)定。

比如說(shuō),我這里設(shè)置了7200s(2小時(shí)),那么如果我2小時(shí)內(nèi)有通訊,或者2小時(shí)內(nèi)有心跳的話,是可以保持連接不中斷的。

我這里之所以這么設(shè)置,是考慮到了具體的業(yè)務(wù)情況,2小時(shí)比較合適。最終的配置如下:

server { listen       80; server_name  localhost; #charset koi8-r; location / {     root   /usr/java/myproject/sell;     index  index.html index.htm; } location /sell/ {     proxy_pass http://127.0.0.1:8081/sell/; }location /sell/webSocket {    proxy_pass http://127.0.0.1:8081/sell/webSocket;     proxy_connect_timeout 4s;     proxy_read_timeout 7200s;     proxy_send_timeout 12s;     proxy_set_header Upgrade $http_upgrade;    proxy_set_header Connection "upgrade";}

問(wèn)題解決,坑爹??!

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Nginx支持WebSocket反向代理
WebSocket 結(jié)合 Nginx 實(shí)現(xiàn)域名及 WSS 協(xié)議訪問(wèn)
websocket+前后端分離+https的nginx配置
Nginx代理websocket為什么要這樣做?
軟件開發(fā)nginx怎樣配置歡迎頁(yè)即首頁(yè)到index.html靜態(tài)文件,其它帶后綴的請(qǐng)求都到to
Nginx+Tomcat+Redis負(fù)載均衡實(shí)現(xiàn)session共享
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服