背景
這天氣夠熱的,要處理的事情也夠多的。。。。
- 1
- 2
想看解決的,直接 ctrl+f搜索關鍵字‘配置點’
開始前交代(想看原因的看這個,個人觀點,不代表正確)
解說:今天用nginx反代通訊項目,發現平均1分鍾左右,就會出現webSocket連接中斷,然后查看了一下,是nginx出現的問題。
原因是: nginx等待你 第一次通訊和第二次通訊的時間差,超過了它設定的最大等待時間,簡單來說就是,超時,所以就啪的一聲斷了,開始上解決步驟。
解決方案一
其實只要配置nginx.conf的對應localhost里面的這幾個參數就好
- 1
- 2
1. proxy_connect_timeout;
2. proxy_read_timeout;
3. proxy_send_timeout;
解決方案二
發心跳包,原理就是在有效地再讀時間內進行通訊,重新刷新再讀時間
- 1
- 2
備注:配置的位置為localhost,給出簡略地址
http {
server { location / { root html; index index.html index.htm; proxy_pass http://webscoket; proxy_http_version 1.1; proxy_connect_timeout 4s; #配置點1 proxy_read_timeout 60s; #配置點2,如果沒效,可以考慮這個時間配置長一點 proxy_send_timeout 12s; #配置點3 proxy_set_header Upgrade $http_upgrade; #這是webSocket的配置,與此篇博客無關 proxy_set_header Connection "Upgrade"; #這是webSocket的配置,與此篇博客無關 } } }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
關於配置2的解釋
備注:這個是服務器對你等待最大的時間,也就是說,當你webSocket使用nginx轉發的時候,用上面的配置2來說,如果60秒內沒有通訊,依然是會斷開的,所以,你可以按照你的需求來設定
舉例:
比如說,我設置了10分鍾,那么如果我10分鍾內有通訊,或者10分鍾內有做心跳的話,是可以保持連接不中斷的,詳細看個人需求
http://nginx.org/en/docs/http/websocket.html