Nginx 配置 SSL + WebSocket 反向代理 V2Ray:实战踩坑指南

最近在部署 V2Ray 时遇到了一个棘手的问题:如何在保证安全性的同时,让 WebSocket 传输协议顺利通过 Nginx 反向代理。经过多次尝试和踩坑,我终于总结出了一套稳定可靠的配置方案。今天就把这个实战经验分享给大家,希望能帮助遇到同样问题的朋友。
环境准备与基础配置
首先确保你已经安装了 Nginx 和 V2Ray。我的环境是 Ubuntu 20.04,Nginx 1.18,V2Ray 4.45。这里假设你的域名已经解析到服务器 IP,并且准备好了 SSL 证书(可以使用 Let’s Encrypt 免费证书)。
V2Ray 的基础配置需要开启 WebSocket 传输。在 /etc/v2ray/config.json 中,确保 inbounds 配置包含以下内容:
{
"inbounds": [{
"port": 10000,
"listen": "127.0.0.1",
"protocol": "vmess",
"settings": {
"clients": [{"id": "你的UUID"}]
},
"streamSettings": {
"network": "ws",
"wsSettings": {
"path": "/ray"
}
}
}]
}
Nginx SSL 配置要点
接下来是关键的 Nginx 配置。在 /etc/nginx/sites-available/yourdomain.conf 中,我们需要配置 SSL 并设置 WebSocket 代理:
server {
listen 443 ssl http2;
server_name yourdomain.com;
ssl_certificate /path/to/your/fullchain.pem;
ssl_certificate_key /path/to/your/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
# WebSocket 代理配置
location /ray {
proxy_pass http://127.0.0.1:10000;
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_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 60s;
}
}
关键配置解析与踩坑记录
这里有几个容易出错的点需要特别注意:
路径匹配问题:location 后的路径必须与 V2Ray 配置中的 path 完全一致,我最初因为少写了一个斜杠导致连接失败。
Header 设置:Upgrade 和 Connection 头是 WebSocket 握手的关键,缺少任何一个都会导致代理失败。
超时设置:proxy_read_timeout 需要适当延长,否则长连接可能会被意外断开。
测试与验证
配置完成后,依次重启服务:
sudo systemctl restart v2ray
sudo nginx -t # 测试配置语法
sudo systemctl reload nginx
使用客户端连接测试时,建议先检查 Nginx 错误日志:
tail -f /var/log/nginx/error.log
如果看到 WebSocket 握手成功的日志,说明配置已经生效。你也可以通过浏览器开发者工具查看 WebSocket 连接状态。
性能优化建议
在实际使用中,我发现还可以做一些优化:
# 在 http 块中添加
proxy_buffering off;
proxy_cache off;
关闭缓冲和缓存可以减少延迟,对于实时通信的 WebSocket 来说效果很明显。
经过这样的配置,我的 V2Ray 服务已经稳定运行了数月。希望这个教程能帮你少走弯路,如果有任何问题,欢迎在评论区交流讨论!


太实用了!正好遇到这个问题,马上试试看👍