df95b6690b6b482d4f485e5a0c4d63c3573e7f65
Proxy Stack — VLESS (WS+TLS / gRPC+TLS) with Caddy (Cloudflare/Alidns + caddy-l4)
该项目提供两种部署模式,并同时支持两种传输(WebSocket 与 gRPC):
- A. 标准模式(无 L4):
server/docker-compose.yml直接让 Caddy 占用 80/443;VLESS-WS 走/ray,VLESS-gRPC 走/grpc。适合“网站 + 代理共存”。 - B. L4 前置模式:
server/docker-compose-l4.yml用 caddy-l4 独占 80/443,根据 SNI 把DERPER/其他 TLS 流量四层转发,caddy-http监听 8443;适用于在 443 上承载多种非 HTTP TLS upstream(如 Tailscale derper)。
两种模式均保持 复用 443 端口;未来增加站点/服务仅需改 Caddyfile 或 l4.json。
目录
v2ray_proxy/
├─ README.md
├─ server/
│ ├─ Dockerfile.caddy-l4 # 自定义 Caddy(含 cloudflare/alidns/caddy-l4)
│ ├─ docker-compose.yml # 模式 A(Caddy 直接 80/443)
│ ├─ docker-compose-l4.yml # 模式 B(caddy-l4 占 80/443,caddy-http 8443)
│ ├─ caddy/
│ │ ├─ Caddyfile # 站点 + 反代:/ray → WS,/grpc → gRPC(h2c)
│ │ ├─ l4.json # 仅模式 B:L4 路由(SNI → upstream)
│ │ ├─ env/
│ │ │ ├─ caddy.env.example # ACME 与 DNS Provider 示例
│ │ │ └─ caddy.env # 你的实际变量(ACME_EMAIL、CF_API_TOKEN 等)
│ │ └─ site/index.html # 占位站点
│ └─ v2ray/config.json # 入站:10000(WS /ray)、10001(gRPC serviceName=grpc)
└─ client/
├─ docker-compose.yml
├─ v2ray-client.json # 默认:VLESS-WS /ray
├─ v2ray-client-grpc.json # 备选:VLESS-gRPC /grpc
└─ test-speed.ps1 # 代理测速脚本(HTTP/SOCKS5)
1) 准备域名与证书环境变量
- DNS A 记录:将
<YOUR_DOMAIN>指向 VPS 公网 IP(如需子域proxy.<YOUR_DOMAIN>,请自行替换)。 - 将
server/caddy/env/caddy.env.example复制为caddy.env并填入:ACME_EMAIL:Let's Encrypt/ZeroSSL 证书邮箱CF_API_TOKEN(可选):Cloudflare DNS API TokenALIYUN_ACCESS_KEY_ID/ALIYUN_ACCESS_KEY_SECRET(可选):阿里云 DNS AK/SKDOMAIN:你的域名(与上面解析一致)DERPER_HOST(可选,L4 模式匹配用)
可同时放 Cloudflare 与阿里云变量,
Caddyfile内按需选择 DNS Provider。Cloudflare Token 至少授予 Zone:Read 与 Zone:DNS:Edit。
2) 模式 A(推荐,简单):Caddy 直接占用 80/443
cd server
docker compose up -d --build
- 构建自定义 Caddy,并按
caddy/Caddyfile配置站点与反代:- VLESS-WS:
/ray→v2ray:10000 - VLESS-gRPC:
/grpc→v2ray:10001(h2c)
- VLESS-WS:
- 健康检查:访问
https://<YOUR_DOMAIN>/_health返回 200。
3) 模式 B(进阶):caddy-l4 前置 + caddy-http 监听 8443
cd server
docker compose -f docker-compose-l4.yml up -d --build
caddy-l4独占 80/443,按caddy/l4.json的 SNI 规则把DERPER_HOST直达,其他 TLS 走caddy-http:8443。caddy-http自动签证书,承担网站与/ray、/grpc。
4) 客户端(选择 WS 或 gRPC 配置)
默认配置为 VLESS-WS:
cd client
docker compose up -d
# 本机代理:SOCKS5 127.0.0.1:1080;HTTP 127.0.0.1:8080
切换为 VLESS-gRPC 测试(将 gRPC 配置覆盖运行文件,或自行调整 compose):
cd client
copy /Y v2ray-client-grpc.json v2ray-client.json # Windows PowerShell 示例
docker compose restart
两端需保持一致:
- 服务器:
/ray对应 WS,/grpc对应 gRPC(serviceName=grpc) - 客户端:
v2ray-client.json使用 WS;v2ray-client-grpc.json使用 gRPC
Docker 构建走代理(可选):
DOCKER_BUILDKIT=1 docker build --build-arg HTTP_PROXY=http://127.0.0.1:8080 --build-arg HTTPS_PROXY=http://127.0.0.1:8080 -t img:latest .
5) 测速与验证
- PowerShell 脚本:
cd client
./test-speed.ps1 -Mode http -SizeMB 100 # 走 HTTP 代理测速
./test-speed.ps1 -Mode socks -SizeMB 100 # 走 SOCKS5 代理测速
- 容器内 speedtest-cli(通过代理):
docker exec -it v2ray-client sh -c 'apk add --no-cache speedtest-cli >/dev/null 2>&1 || true; \
export HTTPS_PROXY=http://127.0.0.1:8080; speedtest-cli --secure'
6) 常见问题
- 证书失败:检查 80/443 是否放行;DNS 是否生效;
caddy.env中 DNS Token 是否正确。 - ACME 限速:避免频繁重启触发过多签发;调试请用 Staging,正式证书就绪后保持稳定。
- 端口复用:在
Caddyfile新增handle/route或在l4.json新增 SNI 分流;无需额外占端口。 /ray404:确保Caddyfile中/ray使用独立handle @vless_ws,在静态站点handle之前匹配。- Windows 本机连不上 1080/8080:重启 Docker/WSL;显式绑定
127.0.0.1:端口:容器端口或改用高位端口。 - 性能:不同时间/节点有差异;gRPC 常较 WS 更稳(HTTP/2 多路复用、指纹更像常规流量),不保证一定更快。
法律合规自行确认;仅用于合法用途。
7) 运维与建议
- 去掉 compose
version字段以消除告警;为镜像固定版本标签(避免latest)。 - 增加
healthcheck、资源限制;开启访问日志后可按路径过滤或降级日志级别。 - 将 UUID/域名/路径抽为环境变量,便于轮换;必要时前置 CDN 或使用 Reality/XTLS-Vision(更强抗探测,改动更大)。
8) 同步到服务器(示例)
rsync -avz --delete --progress -e "ssh -p 22" "C:/Users/pylyz/Documents/v2ray_proxy/" youruser@<YOUR_DOMAIN>:~/v2ray_proxy/
Description