插件窝 干货文章 Nginx支持websocket怎么配置

Nginx支持websocket怎么配置

proxy Upgrade WebSocket header 421    来源:    2025-04-23

Nginx WebSocket 配置指南

要在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 86400s;  # WebSocket连接保持时间
        proxy_send_timeout 86400s;
    }
}

详细配置说明

1. 核心指令

  • proxy_http_version 1.1: 强制使用HTTP/1.1协议,WebSocket需要
  • proxy_set_header Upgrade $http_upgrade: 传递Upgrade头
  • proxy_set_header Connection "upgrade": 设置Connection头为upgrade

2. 完整示例(带SSL)

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_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # 超时设置
        proxy_read_timeout 86400s;
        proxy_send_timeout 86400s;
    }
}

3. 负载均衡配置

upstream websocket_servers {
    server 10.0.0.1:8080;
    server 10.0.0.2:8080;
    server 10.0.0.3:8080;
}

server {
    location /ws/ {
        proxy_pass http://websocket_servers;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        # 其他配置...
    }
}

常见问题解决

  1. 连接立即断开

    • 检查UpgradeConnection头是否正确设置
    • 确保后端服务支持WebSocket
  2. Nginx版本问题

    • WebSocket支持需要Nginx 1.3.13及以上版本
  3. SSL证书问题

    • 确保SSL证书有效且配置正确
    • 可以使用wss://协议测试
  4. 防火墙/安全组设置

    • 检查端口是否开放
    • 确保安全组规则允许WebSocket连接

测试方法

  1. 使用浏览器开发者工具检查WebSocket连接状态
  2. 使用wscat等WebSocket客户端工具测试
  3. 检查Nginx错误日志(/var/log/nginx/error.log)

配置完成后,记得重新加载Nginx配置:

sudo nginx -t && sudo nginx -s reload
下一篇:没有了