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

Nginx多Location块配置WebSocket代理失败问题求助

Nginx反向代理WebSocket服务的路径配置问题

环境说明

  • 本地运行3个服务:
    • service-1:监听端口6000
    • service-2:监听端口6002
    • service-3:WebSocket服务,监听端口6003
  • 使用Nginx对服务做反向代理管理域名domain.com,同时通过Cloudflare CDN管理域名及子域名

当前Nginx配置

server {
    listen [::]:80;  # 监听IPv6
    listen 80;
    server_name domain.com; 

    location /service-1/ {
        proxy_pass http://localhost:6001;
    }

    location /service-2/ {
        proxy_pass http://localhost:6002;
    }

    location /service-3/ {
        proxy_pass http://localhost:65000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
    }
}

遇到的问题

将WebSocket代理配置到根路径/时,连接可正常建立;但配置到独立location块/service-3/时,无法建立连接。

可行配置

###### 可用配置 ######

server {
    listen [::]:80;  # 监听IPv6
    listen 80;
    server_name domain.com; 

    location / {
        proxy_pass http://localhost:65000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
    }
}

不可用配置

###### 不可用配置 ######

server {
    listen [::]:80;  # 监听IPv6
    listen 80;
    server_name domain.com; 

    location /service-3/ {
        proxy_pass http://localhost:65000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
    }
}

问题分析与解决方案

  1. 路径转发修正:
    当用location /service-3/时,Nginx会把/service-3/前缀带到后端请求里,但你的WebSocket服务可能只监听根路径请求。需要在proxy_pass末尾加斜杠,让Nginx转发时去掉前缀:

    location /service-3/ {
        proxy_pass http://localhost:6003/;  # 修正端口为实际的6003,末尾加斜杠
        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;
    }
    

    这样/service-3/xxx会被转发为http://localhost:6003/xxx,而非带前缀的请求。

  2. Cloudflare配置检查:

    • 确保Cloudflare控制台的「网络」选项中,「WebSocket」功能已开启;
    • 给/service-3/路径设置缓存规则为「不缓存」,避免CDN缓存WebSocket连接请求;
    • 确认Cloudflare的SSL模式为「完全」或「严格」,避免协议不兼容导致连接失败。
  3. 端口修正:原配置中proxy_pass指向的localhost:65000是错误端口,需改为WebSocket服务实际监听的6003。


内容的提问来源于stack exchange,提问作者Manas S. Roy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:13:12