当前位置: 首页 > news >正文

Nginx反向代理WebSocket配置笔记

1. WebSocket协议简介

WebSocket是一种在单个TCP连接上进行全双工通信的协议,允许服务端主动向客户端推送数据。

2. Nginx配置WebSocket反向代理

基本配置

http {upstream websocket_backend {server 127.0.0.1:8080;server 127.0.0.1:8081;}server {listen 80;server_name example.com;location /websocket/ {# 核心代理配置proxy_pass http://websocket_backend;# WebSocket必需的头信息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 3600s;proxy_send_timeout 3600s;proxy_connect_timeout 30s;}}
}

详细配置说明

必需的头信息配置
# 升级HTTP协议到WebSocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
超时配置优化
# WebSocket连接需要较长的超时时间
proxy_read_timeout 3600s;    # 读取超时
proxy_send_timeout 3600s;    # 发送超时
proxy_connect_timeout 30s;   # 连接超时
负载均衡配置
upstream websocket_cluster {# 负载均衡算法ip_hash;  # 保持会话粘性server 192.168.1.10:8080 weight=3;server 192.168.1.11:8080 weight=2;server 192.168.1.12:8080 weight=1;# 健康检查check interval=3000 rise=2 fall=5 timeout=1000;
}

3. 完整配置示例

单服务器配置

server {listen 443 ssl;server_name websocket.example.com;ssl_certificate /path/to/cert.pem;ssl_certificate_key /path/to/private.key;location /ws {proxy_pass http://localhost:3000;# WebSocket升级头proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection $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_buffering off;# 超时设置proxy_read_timeout 86400s;proxy_send_timeout 86400s;proxy_connect_timeout 30s;}
}

多服务器负载均衡

upstream websocket_servers {ip_hash;server 10.0.1.10:8080;server 10.0.1.11:8080;server 10.0.1.12:8080;
}server {listen 80;server_name ws.example.com;location / {proxy_pass http://websocket_servers;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_set_header Host $host;# 重要:禁用缓冲区proxy_buffering off;# 长连接超时proxy_read_timeout 3600s;}
}

4. 高级配置选项

连接数限制

location /websocket/ {# 限制并发连接数limit_conn websocket_zone 10;proxy_pass http://backend;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";
}# 定义连接限制区域
limit_conn_zone $binary_remote_addr zone=websocket_zone:10m;

SSL/TLS配置

server {listen 443 ssl http2;server_name websocket.example.com;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;ssl_prefer_server_ciphers off;# WebSocket over WSSlocation /wss {proxy_pass http://backend;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";}
}

5. 常见问题排查

连接断开问题

# 增加超时时间
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;# 保持连接活跃
proxy_set_header Connection "keep-alive, upgrade";

代理缓冲区问题

location /websocket/ {# 禁用缓冲区确保实时通信proxy_buffering off;proxy_buffer_size 16k;proxy_pass http://backend;# ... 其他配置
}

6. 性能优化建议

  1. 使用HTTP/2:提高连接效率

  2. 启用Gzip压缩:压缩文本数据

  3. 调整缓冲区大小:根据消息大小调整

  4. 使用keepalive连接:减少连接建立开销

  5. 监控连接状态:及时发现问题

7. 测试验证

使用简单的HTML页面测试WebSocket连接:

<!DOCTYPE html>
<html>
<body>
<script>
const ws = new WebSocket('wss://websocket.example.com/ws');
ws.onopen = () => console.log('Connected');
ws.onmessage = (event) => console.log('Received:', event.data);
ws.onclose = () => console.log('Disconnected');
</script>
</body>
</html>

总结

Nginx作为WebSocket反向代理时,关键在于正确配置HTTP协议升级头和适当的超时设置。通过合理的负载均衡和性能调优,可以构建稳定高效的WebSocket服务架构。

http://www.dtcms.com/a/524866.html

相关文章:

  • 【数论】费马小定理
  • goland23.1自带dlv版本太低,使用新版dlv
  • 做外贸出口的网站企业免费做网站
  • Kotlin × Gson:为什么遍历 JsonObject 要用 entrySet()
  • 中国建设安全监理协会网站年轻的儿媳
  • 网站网站到底怎么做个人代运营一般怎么收费
  • segformer算法——Mix-FFN详细讲解
  • 高精度算法全解析:从原理到实现
  • 参考线模块(上)
  • 鸿蒙Next图片开发指南:从解码、处理到接收的完整实践
  • 2025年第六届MathorCup大数据竞赛B题超详细解题思路
  • How to Write Hotkeys(如何编写热键)
  • 基于python语音信号的抑郁症识别模型设计与应用
  • 基于python语音信号的呼吸道疾病诊断模型设计
  • 西城网站建设余姚电商交易网站建设
  • 【交换机工作原理深度解析:从基础架构到前沿技术】
  • 学校培训网站建设网页设计师培训无锡
  • 「用Python来学微积分」12. 无穷小量和无穷大量
  • Elasticsearch从入门到进阶——搜索优化原理
  • 农田、果园与灌区气象监测的技术应用与实践价值
  • php做网站好吗wordpress博客非插件
  • 继承(2),咕咕咕!
  • C++编程技巧和规范_9_引用计数解析
  • android11禁止安装apk
  • 深入了解linux网络—— 自定义协议(下)
  • 金麦建站官网成都视频剪辑培训
  • 【C++闯关笔记】详解多态
  • 数据库技术指南(二):MySQL CURD 与高级查询实战
  • 用mvc做网站报告做做做网站
  • 设置一个自定义名称的密钥,用于 git 仓库上下传使用