php:nginx如何配置WebSocket代理?
在nginx配置中加入以下配置即可:
server {
listen 80;
server_name test.com;
# 配置 WebSocket 代理
location /ws {
proxy_pass http://127.0.0.1:8083;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 可选:设置超时时间
proxy_read_timeout 86400s;
}
}
参数解释
proxy_pass:指定后端 WebSocket 服务器的地址。
proxy_http_version 1.1:设置 HTTP 版本为 1.1,WebSocket 协议需要 HTTP/1.1。
proxy_set_header Upgrade $http_upgrade:传递客户端的 Upgrade 头部。
proxy_set_header Connection "upgrade":传递客户端的 Connection 头部,指示这是一个 WebSocket 升级请求。
proxy_set_header Host $host:传递客户端的 Host 头部。
proxy_set_header X-Real-IP $remote_addr:传递客户端的真实 IP 地址。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for:传递客户端的 X-Forwarded-For 头部。
proxy_set_header X-Forwarded-Proto $scheme:传递客户端的协议(HTTP 或 HTTPS)。
proxy_read_timeout 86400s:设置读取超时时间,WebSocket 连接通常是长连接,因此需要设置较长的超时时间
其中http://127.0.0.1:8083为我们websocket服务监听的地址和端口,此时,如果客户端要连接websocket服务可以直接配置。
例如js:
var webSocket = new WebSocket("ws://test.com/ws");
如果你希望配置https,则需要在nginx配置中加入ssl证书
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;