You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WebSocket代理是否与被代理服务器建立直接连接?Nginx代理机制问询

Nginx代理WebSocket服务器的工作机制及HTTPS处理方案

数据包转发逻辑

Nginx不会提供临时端口让客户端直接连接后端WebSocket服务器,所有客户端与后端之间的数据包都是通过Nginx全程转发的。

WebSocket的连接建立依赖HTTP握手升级:客户端先发起HTTP请求,携带Upgrade: websocket和Connection: Upgrade头部,Nginx收到请求后会校验这些头部,然后将请求转发给后端的WebSocket服务器;当后端返回同意升级的响应后,Nginx会把响应回传给客户端,此时Nginx就会在客户端和后端之间建立起一条双向的转发通道,后续所有WebSocket消息(二进制或文本帧)都会经过Nginx中转,不会让客户端直接绕过Nginx连后端。

HTTPS场景的处理方式

在HTTPS接入的场景下,Nginx通常作为SSL终止点来处理,具体逻辑如下:

  • 客户端与Nginx之间走HTTPS(wss://协议),Nginx配置对应的SSL证书完成加密解密;
  • Nginx与后端WebSocket服务器之间走普通的WebSocket(ws://协议),无需再加密(如果后端也支持wss,也可以配置为wss://,但这种场景较少)。

关键配置示例

server {
    listen 443 ssl;
    server_name your-domain.com;

    # SSL证书配置
    ssl_certificate /path/to/your/cert.pem;
    ssl_certificate_key /path/to/your/key.pem;

    location /ws {
        # 转发到后端WebSocket服务器的内部端口
        proxy_pass http://localhost:8080;
        
        # 必须设置的WebSocket升级相关参数
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        # 传递客户端真实IP等头部(可选)
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

如果需要同时支持HTTP跳转HTTPS,可以再加一个80端口的server块做重定向:

server {
    listen 80;
    server_name your-domain.com;
    return 301 https://$server_name$request_uri;
}

内容的提问来源于stack exchange,提问作者peterk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 14:52:05