Nginx可以通过proxy_http_version1.1模块实现WebSocket的反向代理。WebSocket是一种在单个TCP连接上进行全双工通讯的网络技术,可以实现服务端主动推送信息给客户端。
反向代理WebSocket主要涉及以下几个模块:
- proxy_http_version 1.1:启用HTTP/1.1版本,开启proxy_http_version1.1模块
- proxy_set_header:设置请求头部,添加Connection: Upgrade和Upgrade: websocket
- proxy_redirect:重定向支持WebSocket
- proxy_read_timeout:代理接收超时时间
- proxy_send_timeout:代理发送超时时间
配置示例:
location /ws/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
proxy_read_timeout 6000s;
proxy_send_timeout 6000s;
proxy_pass http://backend; # 代理到后端服务器
}
上例location匹配/ws/路径,并开启以下proxy模块:
- proxy_http_version 1.1:开启proxy_http_version1.1模块,支持WebSocket
- proxy_set_header:添加Upgrade和Connection请求头,识别WebSocket连接
- proxy_redirect off:关闭重定向,避免断开WebSocket
- proxy_read_timeout:设置接收超时时间为6000s,WebSocket长连接需要较长超时时间
- proxy_pass:代理请求到后端服务器
Nginx作为反向代理,其主要作用是:
- 监听客户端WebSocket连接请求
- 配置识别WebSocket请求头部,启用proxy_http_version1.1等模块
- 代理请求到后端应用服务器
- 转发后端服务器的数据给客户端,实现双向通信