# Proxy Stack — VLESS(WS+TLS) with your custom Caddy (Cloudflare/Alidns + caddy-l4) 这包兼容两种部署模式: - **A. 标准模式(无 L4)**:`server/docker-compose.yml` 直接让 Caddy 占用 80/443;v2ray 走 `/ray` 路由,适合多数“网站 + 代理共存”的情况。 - **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。 --- ## 目录 ``` proxy-stack-vless-wss-caddy-v2/ ├─ README.md ├─ server/ │ ├─ Dockerfile.caddy-l4 # 你的 caddy 构建(含 cloudflare/alidns/caddy-l4) │ ├─ docker-compose.yml # 模式 A(无 L4,Caddy 直接 80/443) │ ├─ docker-compose-l4.yml # 模式 B(有 L4,Caddy-HTTP 监听 8443) │ ├─ caddy/ │ │ ├─ Caddyfile # 站点与 /ray 反代(模式A/B都用) │ │ ├─ l4.json # 仅模式B使用:L4 路由(SNI → upstream) │ │ ├─ env/ │ │ │ └─ caddy.env.example # DNS 证书与 ACME 环境变量示例 │ │ └─ site/index.html # 占位站点 │ └─ v2ray/config.json # VLESS WS 入站(/ray) └─ client/ ├─ docker-compose.yml └─ v2ray-client.json ``` --- ## 1) 准备域名与证书环境变量 - DNS A 记录:将 `` 指向 VPS 公网 IP(如需子域 `proxy.`,请自行替换)。 - 将 `server/caddy/env/caddy.env.example` 复制为 `caddy.env` 并填入: - `ACME_EMAIL`:Let's Encrypt/ZeroSSL 证书邮箱 - `CF_API_TOKEN`(可选):Cloudflare DNS API Token - `ALIYUN_ACCESS_KEY_ID` / `ALIYUN_ACCESS_KEY_SECRET`(可选):阿里云 DNS AK/SK - `DOMAIN`:你的域名(与上面解析一致) - `DERPER_HOST`(可选,L4 模式匹配用) > 你可同时放 Cloudflare 与阿里云变量,Caddyfile 里按需选择 DNS Provider。 --- ## 2) 模式 A(推荐,简单):Caddy 直接占用 80/443 ```bash cd server docker compose up -d --build ``` - 将自动构建你自定义的 caddy 镜像,并用 `caddy/Caddyfile` 配置站点与 `/ray` 反代。 - 健康检查:访问 `https:///_health` 返回 200。 --- ## 3) 模式 B(进阶):caddy-l4 前置 + caddy-http 监听 8443 ```bash 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` 同样装的是你自定义的 caddy(可自动签发证书),承担网站与 `/ray`。 --- ## 4) 客户端 ```bash cd client # 修改 v2ray-client.json 的 后: docker compose up -d # 得到本机代理:SOCKS5 127.0.0.1:1080;HTTP 127.0.0.1:8080 ``` **Docker 构建走代理:** ```bash 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) 常见问题 - 证书失败:检查 80/443 是否放行;DNS 是否生效;`caddy.env` 中 DNS Token 是否正确。 - 端口复用:在 `Caddyfile` 新增 `handle`/`route` 或在 `l4.json` 新增 SNI 分流;无需额外占端口。 - 性能:选好 LA 节点/带宽;必要时在 v2ray 启用 `mux`。 > 法律合规自行确认;仅用于合法用途。