WebSocket是一种在单个TCP连接上进行全双工通信的协议,与传统的HTTP请求-响应模式不同,它允许服务器主动向客户端推送数据。这使得WebSocket非常适合实时应用如聊天、在线游戏、股票行情等场景。
Nginx Proxy Manager(NPM)是一个基于Nginx的图形化管理工具,要使其支持WebSocket通信,需要进行以下配置:
在NPM管理界面中,为您的WebSocket服务添加代理主机时,需要确保以下设置:
在"Advanced"选项卡中添加以下自定义Nginx配置:
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
确保SSL设置正确(WebSocket通常需要wss://安全连接)
为提高WebSocket性能,建议添加以下参数:
# 增加代理超时时间
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
# 禁用缓冲
proxy_buffering off;
# 保持长连接
proxy_set_header Connection "Keep-Alive";
proxy_set_header Proxy-Connection "Keep-Alive";
症状:WebSocket连接建立后不久自动断开
解决方案:
# 增加心跳检测间隔
proxy_connect_timeout 7d;
proxy_send_timeout 7d;
proxy_read_timeout 7d;
可能原因:后端WebSocket服务未正确响应或超时
解决方案:
1. 检查后端服务是否正常运行
2. 增加代理缓冲区大小:
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
解决方案:
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
upstream websocket {
server backend:8000;
keepalive 1024;
}
配置访问日志记录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;
监控活跃连接数:
# 在Nginx状态模块中监控
active_connections
$http_origin
限制允许连接的域名limit_conn_zone $binary_remote_addr zone=wslimit:10m;
limit_conn wslimit 100;
通过以上配置和优化,您可以在Nginx Proxy Manager中实现高效、稳定的WebSocket通信,满足各种实时应用的需求。