1.websocket
WebSocket 是一种网络通信协议,它提供了在单个 TCP 连接上进行全双工(双向)通信的能力
假设需求:
把 ws://192.168.0.1:8088/ws-api/websocket/pushData代理到ws://192.168.0.156:8888/websocket/pushData;同时,在转发时去除ws-api前缀.
2.使用Nginx代理WebSocket
# WebSocket 代理配置
location ^~ /ws-api/ {
proxy_pass http://192.168.1.156:8888/; # 写真实的服务器地址
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_read_timeout 86400;
proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
- WebSocket 关键配置
proxy_http_version 1.1
:强制使用HTTP 1.1
协议与后端通信。WebSocket
协议依赖HTTP 1.1
的Upgrade
机制完成握手。Nginx
默认使用HTTP 1.0
与后端通信,无法支持协议升级。proxy_set_header Upgrade $http_upgrade
:将客户端的Upgrade
请求头透传给后端服务器。$http_upgrade
变量捕获客户端请求中的Upgrade
头(通常为websocket
)。后端服务器需通过Upgrade
:websocket
头识别WebSocket
握手请求。proxy_set_header Connection "upgrade"
:修改Connection
请求头为upgrade
,指示后端启用协议升级。与Upgrade
头配合,告知后端需要将连接从HTTP
升级为WebSocket
。
- 其他配置:
proxy_read_timeout 86400
设置长时间连接不超时;X-Real-IP
和X-Forwarded-For
头用于传递客户端真实IP
,方便后端服务获取客户端信息。
!!!注意:ws://192.168.0.1:8088/ws-api/websocket/pushData 前面的 ws://192.168.0.1:8088 不用去掉,并且这个ip地址必须是当前nginx 服务器所在的ip地址才行。