简述 Link to heading

这里假设我有一个域名 example.com,那么当我部署好了 qBittorrent 与 Plex 时,我需要通过 [domain]:[port] 来进行访问,需要记住各个程序对应的端口,因此很不方便。

起初,我尝试通过 example.com/plex 来实现访问 example.com:32400,但是实际操作起来碰到了困难,按照 ChatGPT 给出的代码改写 Caddyfile,但是实际上却无法访问 example.com/plex

后面,我转变思路,准备通过子域名来实现这一点,即 plex.example.com 来实现访问 example.com:32400

caddy 反向代理 Link to heading

通过 plex.example.com 来实现访问 example.com:32400 实现起来就比较方便了,只需要在 Caddyfile 中添加如下内容:

plex.example.com {
    reverse_proxy example.com:32400
}

对于 qBittorrent 的 webui,也是一样的,添加 reverse_proxy 使得访问 qbit.example.com 即可访问 qBittorrent 的 webui。

注意,reverse_proxy 的默认反向代理是 http 的,如果要设置为 https,那么需要设置为 reverse_proxy example.com:<port>

完整的配置文件 Link to heading

将域名替换成自己的域名即可,但是不知道是不是 forwardproxy 还是 caddy-trojan 插件的问题,caddy 第一次运行时,内存占用会异常地高,重启之后会降下来,推测可能与一开始轮询申请证书有关?

{
    order trojan before file_server
    servers :4443 {
        listener_wrappers {
            trojan
        }
    }
    log {
        output file /var/log/caddy/default.log {
            roll_size 10MiB
        }
    }
    trojan {
        caddy
        no_proxy
        users user tro_password
    }
}
tro.arm-br.example.com {
    reverse_proxy https://tro-arm-br.example.com:4443
}
naive.arm-br.example.com {
    reverse_proxy https://arm-br.example.com:443 
}
plex.arm-br.example.com {
    reverse_proxy arm-br.example.com:32400
}
qbit.arm-br.example.com {
    reverse_proxy arm-br.example.com:28080
}
cd2.arm-br.example.com {
    reverse_proxy arm-br.example.com:19798
}
status.arm-br.example.com {
    reverse_proxy arm-br.example.com:10182
}

:443, arm-br.example.com {
    tls [email protected]
    route {
        forward_proxy {
            basic_auth user naive_password
            hide_ip
            hide_via
            probe_resistance
        }
        file_server {
            root /usr/share/caddy
        }
    }
}
:4443, tro-arm-br.example.com {
tls [email protected] 
    route {
        trojan {
            connect_method
            websocket
        }
        file_server {
            root /usr/share/caddy
        }
    }
}

:6443, arm-brv6.example.com {
    tls [email protected]
    route {
        forward_proxy {
            basic_auth user naive_password
            hide_ip
            hide_via
            probe_resistance
        }
        file_server {
            root /usr/share/caddy
        }
    }
}

Caddy 的小知识 Link to heading

Caddy 官方提供的安装脚本如下:

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
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

执行这一段脚本之后,Caddy 会通过 systemd 进行管理,caddy.service 位于 /etc/systemd/system/multi-user.target.wants 目录下,当执行 sudo systemctl restart caddy 时,实际上这个 caddy 进程是属于一个名为 caddy 的用户的,因此配置 caddy 时要考虑到文件访问权限的问题。例如 file_server 的 root 对应的目录如果是 /home/zwyyy/webpage,就可能出现问题。

这样安装的 caddy,其使用的默认配置文件为 /etc/caddy/Caddyfile,申请的证书位于 /var/lib/caddy/.local/share/caddy/certificates 目录。

对 1G RAM 甚至更小的机器,推荐添加 1G 左右的 swap space。