上一篇文章提到,我搭建了一个基于 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
所有的客户端设置大同小异,至于 Clash 的配置文件,可以参考 Mihomo 文档,以下是我的示例配置文件:
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