WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,Nginx 可以通过以下配置来支持 WebSocket 连接。
server {
listen 80;
server_name example.com;
location /ws/ {
proxy_pass http://backend_server;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
# 可选:设置超时时间
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
}
Upgrade: websocket
Connection: upgrade
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location /ws/ {
proxy_pass http://backend_server;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
# 可选:设置超时时间
proxy_read_timeout 3600s;
}
}
upstream websocket_servers {
server 10.0.0.1:8080;
server 10.0.0.2:8080;
}
location /ws/ {
proxy_pass http://websocket_servers;
# 其他WebSocket配置...
}
location /ws/ {
# 限制每个IP的连接数
limit_conn perip_zone 10;
# 其他WebSocket配置...
}
log_format websocket '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" $connection';
access_log /var/log/nginx/websocket.log websocket;
连接断开问题:
proxy_read_timeout
和 proxy_send_timeout
502 Bad Gateway:
WebSocket 握手失败:
nginx -t
nginx -s reload
通过以上配置,Nginx 可以有效地代理 WebSocket 连接,实现 WebSocket 应用的负载均衡和高可用性。