使用Caddy配置路径反向代理与重定向

刚刚注册了新域名fleetsnowfluff.page作为飞行雪绒同人网站,正巧服务器跑的鸣潮QQbot好几个服务有WebUI,默认情况下需要暴露服务器公网ip和port才能访问,发送给bot用户的登录url也是ip:port的形式,不够安全和美观,于是打算给新域名找点事做,创建一个子域名,专门托管这些WebUI。

创建子域名 ​

先前使用Cloudflare托管域名。进入面板的DNS选项卡,添加DNS记录,类型选择A,名称即为子域名名称,IPv4地址填写服务器公网IP。

检查服务器IP和端口设置 ​

使用反向代理后,无需暴露服务对应端口于公网。
检查各项服务监听地址为localhost或127.0.0.1,删除原先的端口设置(比如GsCore端口8765、NapCat端口6099等),只需确保http和https服务开放,用于Caddy服务。

注:如果服务器防火墙开启,需要同时正确配置安全组中入站规则和防火墙

bash
# 以firewalld为例
# 永久关闭端口
sudo firewall-cmd --permanent --remove-port=8765/tcp

# 永久开启服务
sudo firewall-cmd --permanent --add-service=http

# 重启防火墙
sudo firewall-cmd --reload

# 查看当前永久规则
sudo firewall-cmd --permanent --list-all

配置Caddy ​

Caddy是一个现代化的Web服务软件,可以提供网站服务、配置反向代理、自动配置HTTPS等。现在要做的就是通过Caddy的反向代理,把外部访问流量转发到内部运行的服务。

安装 ​

参考官方安装文档
以我的CentOs服务器为例,运行:

bash
dnf install dnf-plugins-core
dnf copr enable @caddy/caddy
dnf install caddy

安装完成后,运行caddy version,返回版本号即为安装成功。

开始反向代理 ​

后台运行Caddy:

bash
sudo systemctl start caddy

修改配置后重启Caddy:

bash
sudo systemctl reload caddy

Caddy的配置文件默认位于/etc/caddy/Caddyfile

基础反向代理 ​

nginx
example-domain {
    reverse_proxy 127.0.0.1:8765
}

路径匹配 ​

不同服务都有各自的固定路径,如果只设置代理地址,外部访问域名只能得到一片白屏,因此要进行路径转发。 例如:

nginx
example-domain {
    # NapCat的WebUI地址,127.0.0.1:6099/webui/
    # 不删除路径前缀的转发方式
    handle /webui/* {
        reverse_proxy 127.0.0.1:6099
    }
}

保存更改后重启Caddy服务,如果NapCat(或者其他服务)正常在127.0.0.1:6099挂载WebConsole,此时应该可以从外部访问example-domain/webui/。
然而,可能会发现某些资源或者服务没有正常加载,这是因为这些内容使用了不同的路径,同样需要通过Caddy进行转发。

找到静态资源的路径 ​

打开浏览器的开发者工具,使用元素选择工具选中没有正常加载的静态资源,查看其位置。

例如上图中的img,路径为/webstatic/ICON.png,设置对应路径转发使其能够正常显示:

nginx
example-domain {
    # GsCore的WebUI地址,127.0.0.1:8765
    handle /webstatic/* {
        reverse_proxy 127.0.0.1:8765
    }
}

找到额外服务的路径 ​

如果部分功能无法正常使用(比如WebUI登录、查看实时日志等),可能是因为有额外的请求地址。打开浏览器的开发者工具,切换到Network一项,重新尝试该功能,找到header里Status Code为红色、或者Content-Length为0的请求。 如上图这个请求,虽然Status Code是绿色OK,但是返回的Content-Length为0,说明路由没有匹配,根据Request URL设置对应路径转发使功能可正常使用:

nginx
example-domain {
    # NapCat的WebUI地址,127.0.0.1:6099
    handle /plugin/* {
        reverse_proxy 127.0.0.1:8765
    }
}

设置重定向 ​

为所有服务设置代理后,尝试访问不存在的页面会显示一片白屏,设置重定向,让所有尝试访问该类的用户都重定向到主域名。

nginx
example-domain {
    # 前面所写的handle...

    # 处理所有未匹配的路径
    handle {
        redir https://fleetsnowfluff.page 302
    }

    # 兜底处理异常情况
    handle_errors {
        redir https://fleetsnowfluff.page 302
    }
}
2026年冬季看番总结 | 2026年3月号
小搓一个飞行雪绒的个人网站
由 Valaxy v1.1.0 驱动|主题-Yunv1.1.0
Static Badge|Static Badge