Nginx代理webSocket經常中斷的解決方案, 如何保持長連接 原 薦

背景

這天氣夠熱的,要處理的事情也夠多的。。。。

想看解決的,直接 ctrl+f搜索關鍵字‘配置點’##

開始前交代(想看原因的看這個,個人觀點,不代表正確)##

解說:今天用nginx反代通訊項目,發現平均1分鐘左右,就會出現webSocket連接中斷,然後查看了一下,是nginx出現的問題。

原因是:nginx等待你 第一次通訊和第二次通訊的時間差超過了它設定的最大等待時間,簡單來說就是,超時,所以就啪的一聲斷了,開始上解決步驟。

解決方案一

其實只要配置nginx.conf的對應localhost裏面的這幾個參數就好
  1. proxy_connect_timeout;
  2. proxy_read_timeout;
  3. proxy_send_timeout;

解決方案二

發心跳包,原理就是在有效地再讀時間內進行通訊,重新刷新再讀時間

備註:配置的位置爲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的配置,與此篇博客無關
		}
	}
}

關於配置2的解釋

備註:這個是服務器對你等待最大的時間,也就是說,當你webSocket使用nginx轉發的時候,用上面的配置2來說,如果60秒內沒有通訊,依然是會斷開的,所以,你可以按照你的需求來設定

舉例: 比如說,我設置了10分鐘,那麼如果我10分鐘內有通訊,或者10分鐘內有做心跳的話,是可以保持連接不中斷的,詳細看個人需求 感謝評論區 @zigzagroad 的指正,希望可以幫到你們,如果有更好的方式,麻煩分享一下,謝謝

關於nginx相關配置的解釋,可以看一下這個

地址:http://blog.csdn.net/liujiyong7/article/details/18228915

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章