nginx 代理 WebSocket 配置

Nginx 代理 WebSocket 配置

1. 配置文件位置

  • Nginx 配置文件通常位于 /etc/nginx/nginx.conf,也可以在 /etc/nginx/conf.d/ 下创建新的配置文件,例如 websocket.conf

2. 基本配置结构

http {
    upstream websocket {
        server localhost:9301;  # 定义上游 WebSocket 服务器
    }

    server {
        listen 9300;  # 监听 9300 端口

        location / {
            proxy_pass http://websocket;  # 将请求代理到上游服务器
            proxy_http_version 1.1;  # 使用 HTTP/1.1
            proxy_set_header Upgrade $http_upgrade;  # 设置 Upgrade 头
            proxy_set_header Connection "upgrade";  # 设置 Connection 头
            proxy_set_header Host $host;  # 设置 Host 头
            proxy_set_header X-Real-IP $remote_addr;  # 设置真实 IP
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 设置转发的 IP
            proxy_set_header X-Forwarded-Proto $scheme;  # 设置转发的协议
        }
    }
}

3. 配置说明

  • upstream websocket: 定义名为 websocket 的上游服务器,指定 WebSocket 服务器的地址(localhost:9301)。
  • server: 创建一个 Nginx 服务器块,监听来自客户端的 WebSocket 连接请求。
  • location /: 匹配所有请求,将其代理到上游服务器。
  • proxy_pass: 将请求转发到定义的上游服务器。
  • proxy_http_version: 指定使用 HTTP/1.1,以支持 WebSocket。
  • proxy_set_header: 设置请求头,以支持 WebSocket 协议。

4. 配置步骤

  1. 编辑 Nginx 配置文件,添加上述配置。
  2. 测试配置是否正确:
    sudo nginx -t
    
  3. 重新加载 Nginx 使配置生效:
    sudo systemctl reload nginx
    

5. 注意事项

  • 确保 upstreamserver 块都在同一个 http 块内。
  • 确保 WebSocket 服务器(9301端口)正常运行。

总结

通过上述配置,Nginx 可以成功代理 WebSocket 请求,将来自 ws://localhost:9300 的连接转发到 ws://localhost:9301

posted @ 2024-10-29 14:17  槑孒  阅读(2058)  评论(0)    收藏  举报