空色天絵 / NEO TOKYO NOIR 01
1005 字
5 分钟
Nginx 反向代理配置多节点教程 (VMess + WebSocket)
⚠️ 免责声明 VMess 是一种加密通信协议,常用于企业内网传输数据以提高安全性。本教程仅用于学习网络加密原理与 Nginx 反向代理技术,请勿用于连接任何非法网络或违反当地法律法规。
想要在同一台服务器上通过 Nginx 复用 443 端口来创建多个 VMess + WebSocket (WS) 节点,我们需要利用 Nginx 的 路径分流 功能。
核心原理
- 外部访问:所有流量通过 HTTPS (443端口) 访问同一个域名。
- 分流规则:Nginx 根据访问路径(例如
/us1或/uk1)将流量转发到服务器内部不同的 x-ui 端口。 - 内部处理:x-ui 在后台监听不同的端口(例如 21000, 21001),接收来自 Nginx 的解密流量。
第一步:x-ui 面板配置
在 x-ui 面板中,我们需要为每个“节点”创建一个独立的入站规则。
假设我们要创建两个节点,分别命名为 🇺🇸 US-1 和 🇬🇧 UK-1:
节点 A (US-1) 设置:
- 协议:VMess
- 监听 IP:
127.0.0.1(仅允许本地 Nginx 访问,更安全) - 端口:
21000(这是内部端口,不要与 443 冲突) - 传输协议:ws (WebSocket)
- 路径 (Path):
/us1(必须与 Nginx 配置一致) - UUID:系统自动生成
节点 B (UK-1) 设置:
- 协议:VMess
- 监听 IP:
127.0.0.1 - 端口:
21001 - 传输协议:ws (WebSocket)
- 路径 (Path):
/uk1 - UUID:系统自动生成(与节点 A 不同)
第二步:Nginx 配置 (核心步骤)
我们需要修改 Nginx 的站点配置文件。在 server 块中,为每个节点添加对应的 location 块来处理 WebSocket 流量。
以下是优化后的 Nginx 完整配置示例:
server { listen 80; listen [::]:80; listen 443 ssl http2; listen [::]:443 ssl http2;
# 将你的域名填在这里 server_name yourdomain.com; root /www/wwwroot/yourdomain.com; index index.php index.html index.htm;
# ---------------------------------------------------- # SSL 证书配置 (请替换为你的证书路径) # ---------------------------------------------------- ssl_certificate /www/server/panel/vhost/cert/[yourdomain.com/fullchain.pem](https://yourdomain.com/fullchain.pem); ssl_certificate_key /www/server/panel/vhost/cert/[yourdomain.com/privkey.pem](https://yourdomain.com/privkey.pem);
# 优化 SSL 安全性 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers EECDH+AES128:EECDH+AES256:EECDH+CHACHA20:RSA+AES128:RSA+AES256:!MD5; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; add_header Strict-Transport-Security "max-age=31536000";
# 强制 HTTP 跳转 HTTPS if ($server_port !~ 443){ rewrite ^(/.*)$ https://$host$1 permanent; }
# 处理 HTTPS 错误重定向 error_page 497 https://$host$request_uri;
# ---------------------------------------------------- # 节点反代配置区域 # ----------------------------------------------------
# 节点 1:US-1 (对应 x-ui 端口 21000) location /us1 { if ($http_upgrade != "websocket") { return 404; # 非 WS 流量直接返回 404,防止探测 } proxy_pass [http://127.0.0.1:21000](http://127.0.0.1:21000); proxy_redirect off;
# WebSocket 必须的头部设置 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host;
# 增加 Real-IP 传递(可选) proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 超时设置,防止 WS 连接意外断开 proxy_connect_timeout 10s; proxy_read_timeout 300s; proxy_send_timeout 300s; }
# 节点 2:UK-1 (对应 x-ui 端口 21001) location /uk1 { if ($http_upgrade != "websocket") { return 404; } proxy_pass [http://127.0.0.1:21001](http://127.0.0.1:21001);
proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host;
proxy_connect_timeout 10s; proxy_read_timeout 300s; proxy_send_timeout 300s; }
# ---------------------------------------------------- # 网站默认配置 (PHP/静态资源/伪静态) # ----------------------------------------------------
# PHP 引用 (根据实际情况调整版本) include enable-php-83.conf;
# 伪静态规则 include /www/server/panel/vhost/rewrite/yourdomain.com.conf;
# 禁止访问敏感文件 location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md) { return 404; }
# 静态资源缓存配置 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; error_log /dev/null; access_log /dev/null; }
location ~ .*\.(js|css)?$ { expires 12h; error_log /dev/null; access_log /dev/null; }
# 日志路径 access_log /www/wwwlogs/yourdomain.com.log; error_log /www/wwwlogs/yourdomain.com.error.log;}第三步:客户端连接设置
在 Clash 或其他客户端添加节点时,请遵循以下规则:
- 地址 (Address/Host):填写绑定的域名(例如
yourdomain.com)。 - 端口 (Port):填写 Nginx 的 SSL 端口,通常是 443。
- 用户 ID (UUID):填写 x-ui 面板中对应节点的 UUID。
- 传输协议 (Network):选择
ws(WebSocket)。 - 伪装/路径 (Path):
- 连接节点 A 时填:
/us1 - 连接节点 B 时填:
/uk1
- TLS/SSL:开启 (True)。
总结与检查清单
配置完成后,请检查以下三点以确保连通性:
- ✅ 端口一致性:Nginx
proxy_pass的端口(如 21000)必须与 x-ui 面板中设置的端口一致。 - ✅ 路径一致性:Nginx
location的路径(如/us1)必须与 x-ui 面板中的路径设置一致。 - ✅ 防火墙放行:服务器防火墙只需要放行 80 和 443 端口。x-ui 的内部端口(21000, 21001)不需要对外开放,因为是通过本地回环地址(127.0.0.1)转发的。
Nginx 反向代理配置多节点教程 (VMess + WebSocket)
https://blog.obve.cn/posts/76542/
鲁公网安备37048102006944号