Featured image of post 科学上网:用 Caddy 反向代理 VLESS

科学上网:用 Caddy 反向代理 VLESS

Caddy 的自动 TLS 用起来简直不要太爽。

上一篇文章 提到,我搭建了一个基于 Aria2 的 BT 离线下载服务器。为了用 Caddy 反向代理部署好的容器,我把原来偷懒用一键脚本部署的 Trojan 给卸载了,问就是因为这脚本把 80 和 443 端口都占用了,不卸载掉根本没法继续。

于是离线下载服务器是搭建好了,可时不时需要的代理却不得不下线。仔细一想,之前看到过有人 Cloudflare + V2Ray + WS 复活被墙的 VPS,既然是 WebSocket,还能用 Cloudflare 反代,那用 Caddy 反代又有何不可呢?况且 Caddy 还有自动 TLS,比起 Nginx + Certbot 的组合配置起来肯定更简单。只要配置成功,我就可以在为 Caddy 留住 443 端口的同时跑代理了。

安装 VLESS 和 Caddy

安装VLESS 可以直接使用 v2fly/fhs-install-v2ray 一键脚本:

1
2
# 安裝執行檔和 .dat 資料檔
bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)

Caddy 的安装请参考官方教程 ,例如,我使用 Debian 12,则使用以下命令:

1
2
3
4
5
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

配置 VLESS

编辑/usr/local/etc/v2ray/config.json

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
{
  "log": {
    "access": "/var/log/v2ray/access.log",
    "error": "/var/log/v2ray/error.log",
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "port": 1234, //任意端口
      "listen": "127.0.0.1",
      "protocol": "vless",
      "settings": {
        "clients": [
          {
            "id": "super-random-uuid", //随机生成一个 UUID 替换即可
            "level": 0,
            "email": "example@example.com"
          }
        ],
        "decryption": "none"
      },
      "streamSettings": {
        "network": "ws",
        "security": "none",
        "wsSettings": {
          "path": "/" // 需要与之后的 Caddy 配置保持相同
        }
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom"
    }
  ]
}

编辑完成后保存退出即可。

配置 Caddy

在你喜欢的位置创建一个 Caddyfile,或者编辑已有的 Caddyfile,加入如下内容,反向代理刚才在 VLESS 配置文件中设置的端口:

1
2
3
4
5
6
7
8
9
yourdomain.com {
        # 用一个 Matcher 匹配所有指定路径的 Websocket 请求
        @websockets {
                path /      # 与前面 VLESS 的 path 保持一致
                header Connection Upgrade
                header Upgrade websocket
        }
        reverse_proxy @websockets :1234
}

至此,服务端所有配置文件都编辑完毕。

启动服务

启动 VLESS,并设置开机自启动:

1
systemtcl enable v2ray && systemctl start v2ray

启动 Caddy/更新 Caddy 配置:

1
2
caddy start
caddy reload  # 更新配置用

以上操作全部完成后,Caddy 反向代理 VLESS 就完成了。

客户端设置

客户端方面需要手动设置:

  • 地址是绑定给 VLESS 的域名。
  • 端口是 443
  • TLS 打开
  • 传输方式选择 websocket
  • UUID 是之前填入 VLESS 配置文件的 UUID

Shadowrocket 设置

所有的客户端设置大同小异,至于 Clash 的配置文件,可以参考 Mihomo 文档 1,以下是我的示例配置文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
proxies:
  - name: "A Random Name"
    type: vless
    server: yourdomain.com
    port: 443
    udp: true
    uuid: super-random-uuid
    flow: xtls-rprx-vision
    packet-encoding: xudp

    tls: true
    servername: yourdomain.com
    alpn:
      - h2
      - http/1.1
    skip-cert-verify: false

    network: ws

    smux:
      enabled: false

需要生成 Clash 配置文件可以使用 V2RaySE 提供的工具

完成

好了,现在我们已经拥有了一个 VLESS 服务器,Caddy 会自动为我们申请和维护 TLS 证书,非常好用。

只需要这么小小折腾一下,我仿佛又找到了当年用一键脚本搭建 SSR 时的愉悦,好好享受这种能顺利打开 google.com 时的兴奋吧。

TODO List

  • 基本搭建
  • 伪装

  1. 毕竟继承 Clash Meta 衣钵的 Mihomo 也算是 Clash 正统了。 ↩︎

Licensed under CC BY-NC-SA 4.0
最后更新于 2026 年 3 月 4 日 21:25 +0800