插件窝 干货文章 Nginx如何实现WebSocket配置

Nginx如何实现WebSocket配置

WebSocket proxy 配置 Upgrade 424    来源:    2025-04-10

Nginx WebSocket 配置指南

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;
    }
}

关键配置说明

  1. proxy_http_version 1.1: WebSocket 需要 HTTP/1.1 支持
  2. Upgrade 和 Connection 头: 这两个头是 WebSocket 握手的关键
    • Upgrade: websocket
    • Connection: upgrade

SSL/TLS 配置 (wss://)

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;
    }
}

高级配置选项

  1. 负载均衡:
upstream websocket_servers {
    server 10.0.0.1:8080;
    server 10.0.0.2:8080;
}

location /ws/ {
    proxy_pass http://websocket_servers;
    # 其他WebSocket配置...
}
  1. 连接限制:
location /ws/ {
    # 限制每个IP的连接数
    limit_conn perip_zone 10;
    # 其他WebSocket配置...
}
  1. 日志记录:
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;

常见问题解决

  1. 连接断开问题:

    • 增加超时时间: proxy_read_timeoutproxy_send_timeout
    • 检查后端服务是否配置了心跳机制
  2. 502 Bad Gateway:

    • 确保后端服务正在运行
    • 检查防火墙设置
  3. WebSocket 握手失败:

    • 确保正确设置了 Upgrade 和 Connection 头
    • 检查 Nginx 版本是否支持 WebSocket

验证配置

  1. 测试配置语法: nginx -t
  2. 重新加载配置: nginx -s reload
  3. 使用浏览器或 WebSocket 客户端工具测试连接

通过以上配置,Nginx 可以有效地代理 WebSocket 连接,实现 WebSocket 应用的负载均衡和高可用性。