Nginx 配置 SSL + WebSocket 反向代理 V2Ray

2025.11.10 杂七杂八 1684
33BLOG智能摘要
当你的V2Ray在Nginx反向代理下频繁断连,是否也曾被SSL配置和WebSocket握手问题困扰到深夜?这篇实战指南将彻底解决这个技术难题。作者通过亲身踩坑总结出一套稳定可靠的配置方案,详细解析了从环境准备到性能优化的完整流程,包括关键配置代码、常见错误排查和性能调优技巧。你将掌握WebSocket路径匹配的精确定义、必须的Header设置、超时参数调优等核心要点,让加密代理服务从此告别莫名断连。
— 此摘要由33BLOG基于AI分析文章内容生成,仅供参考。

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

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 服务已经稳定运行了数月。希望这个教程能帮你少走弯路,如果有任何问题,欢迎在评论区交流讨论!

评论