最近有一个需求,就是需要使用 nginx 反向代理 websocket,经过查找一番资料,目前已经测试通过,本文只做一个记录。

看官方文档说 Nginx 在 1.3.13 以后的版本才支持 websocket 反向代理,所以要想使用支持 websocket 的功能,必须升级到 1.3.13 以后的版本。

配置起来也特别简单。配置参考:

server {
        listen       80;
        server_name  test.test.cn;
		
		
		location  / {
		  proxy_pass   http://test2.test.cn:8080;
		  
		  proxy_read_timeout 3600s;
		  proxy_http_version 1.1;
		  proxy_set_header Upgrade $http_upgrade;
		  proxy_set_header Connection "upgrade";
		  
		}
    }

简单解释一下:

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

这三句是必须的。用来告诉代理服务器客户端将协议切换到WebSocket的意图。

proxy_read_timeout 3600s;

默认情况下,如果代理服务器在60秒内未传输任何数据,则将关闭连接。通过调整proxy_read_timeout 使其大于心跳间隔。防止nginx主动关闭连接导致连接失败。