zoukankan      html  css  js  c++  java
  • Nginx支持WebSocket配置

    记录一下Nginx代理WebSocket的配置

    1 添加协议升级

    在http模块添加协议升级配置

    	http {
    	      ... // 省略其它
    		
    	      map $http_upgrade $connection_upgrade {
                        default upgrade;
                        '' close;
    	      }
    	}
    

    该配置用于将http协议升级为websocket协议

    map说明:根据客户端请求中$http_upgrade的值,设定$connection_upgrade的值。{}内容是设定规则。即$connection_upgrade的值默认是upgrade;如果$http_upgrade为空字符串,则$connection_upgrade的值是close。

    2 添加虚拟主机配置

    	server {
                  listen       8000;
                  server_name  127.0.0.1;
    		
    	      ... // 省略其它
    		
    	      location /ws/ {
    	          proxy_pass   http://wsserver/;
    	          proxy_http_version 1.1;
                      proxy_set_header Upgrade $http_upgrade;
                      proxy_set_header Connection $connection_upgrade;
                      proxy_set_header Host $host;
    	      }
    	}
    	
    	upstream wsserver {
    		server 127.0.0.1:10101;
    		server 127.0.0.1:10102;
    	}
    

    前端或其他应用可以通过ws://127.0.0.1:8000/ws/wsServer访问该服务

    3 超时中断问题

    Nginx默认超时时间为60s。

    当Nginx代理websocket,客户端与服务端建立连接后,若60s内无交互,则nginx会断开此连接。

    为了解决这个问题,我们可以配置超时时间。

    	location /ws/ {
    		... // 省略其他
    		proxy_connect_timeout 4s;            
    		proxy_read_timeout 600s;                  # 10分钟无消息交互关闭连接
    		proxy_send_timeout 12s;                  
    	}
    

    这样10分钟无交互才会断开。

    但依旧不妥,如果应用程序就是11分钟才来消息呢。我们可以让客户端定时发送一个心跳。以前端为例:

    	// 每5分钟发送一次心跳
    	function keepSocket() {
    		window.setInterval(function(){
    			socket.send('ping');
    		}, 300000);
    	}
    

    ps: 后台接收到ping后可以回复一个pong

  • 相关阅读:
    Linux在高铁项目的部署环境
    【牛刀小试2】password保
    fcitx的安装_配置
    Mingw:在Linux系统下编译Windows的程序
    linux安装qwt插件linux
    qt超强绘图控件qwt
    WIN7 下 Qt Creator 安装 QWT
    QWT6.0.1+win7下安装说明
    qwt 介绍
    Linux中的svn客户端RabbitVCS-2
  • 原文地址:https://www.cnblogs.com/tenny-peng/p/12886605.html
Copyright © 2011-2022 走看看