WebSocket 协议提供了全双工通信的能力,允许服务器和客户端之间持续双向传输数据流,广泛应用于实时应用如聊天室、在线游戏、股票交易系统等。要在 Nginx 中支持 WebSocket 连接,需正确配置才能确保协议的兼容性和稳定运行。
步骤 1:启用 WebSocket 相关模块
确保你的 Nginx 编译时已经启用了 --with-http_v2_module 和 --with-stream 模块,这两个模块对 WebSocket 的支持至关重要。
如果未编译包含这些模块的 Nginx,重新编译:
./configure --prefix=/opt/nginx \
--with-http_v2_module \
--with-stream \
--with-stream_ssl_module
make && make install
步骤 2:配置 Nginx 服务器块
编辑 Nginx 的配置文件,添加 WebSocket 支持的 location 块:
server {
listen 80;
server_name yourdomain.com;
# 启用 SSL 的 WebSocket 需要 HTTPS 方案
listen 443 ssl;
# SSL 设置
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
# WebSocket 配置
location /ws {
proxy_pass http://your-backend-server;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
注意点解释:
proxy_pass: 定义 WebSocket 请求转发的目标服务器。proxy_http_version 1.1: 确保使用 HTTP/1.1 版本,因为 WebSocket 协议在此基础上运行。proxy_set_header Upgrade $http_upgrade;和proxy_set_header Connection "upgrade";: 这两行告诉代理服务器升级到 WebSocket 协议。proxy_set_header Host $host;: 传递正确的主机标头到后端服务器。proxy_cache_bypass $http_upgrade;: 避免缓存 WebSocket 数据,因为它通常是实时的。
步骤 3:重启 Nginx
更改完配置后,重启 Nginx 以应用新设置:
sudo service nginx restart
或者,如果你的手动安装了 Nginx:
/opt/nginx/sbin/nginx -s reload
测试 WebSocket 连接
使用 WebSocket 测试工具或浏览器的开发者工具检查新的 WebSocket 连接是否成功建立。检查网络标签中的握手响应,确保 Connection 标头包含 Upgrade 至 websocket。
总结
通过以上步骤,你应该能够在 Nginx 中正确配置 WebSocket 连接,为用户提供流畅的实时交互体验。确保遵循最佳实践,如定期检查配置和安全设置,以便于适应不断变化的需求和威胁。