DEBUG.WIKI
V.PS:让项目靠近用户,亚太、欧洲、北美 KVM VPS
IPPeak:从目标地区访问网页,住宅代理、SEO 监测、广告验证
ZgoCloud:多地区部署,按需选节点;日本、美国、香港、德国

Caddy 子路径代理跳回根路径:应用还需要配置 base URL

Caddy 子路径代理后登录和资源跑到站点根路径,核对请求前缀、应用 base URL 与生成链接;不支持子路径时改独立域名。

应用直接通过 reverse_proxy 访问正常,放到 /files/ 后却跳到 /login.aspx,或者首页能打开、脚本和样式返回 404。对于 Caddy 2 的 handle_path,应同时检查传给上游的路径和应用生成的链接:去掉请求前缀,不会自动给响应中的 URL 加回前缀。

这条处理路径适用于将原本运行在站点根目录的 Web 应用放进子路径。若故障是连不上上游、TLS 握手失败或应用自己返回错误,应先处理对应问题。

看浏览器第二次请求去了哪里

打开浏览器开发者工具的网络面板,从 /files/ 进入应用,观察重定向的 Location、登录请求和失败资源地址。以下是用于解释的示例:

初始请求:/files/
上游收到:/
响应跳转:/login.aspx
浏览器随后请求:/login.aspx

最后一条已经不在 /files/ 下,可能落到 Caddy 的其他路由。页面里的 /css/site.css、/api/session 也有同样的问题。这样可以区分“第一条请求没有正确代理”和“响应让后续请求走错了位置”,不要只凭首页的 404 改端口。

如果上游日志反而显示 /files/,先检查实际生效的是 handle 还是 handle_path。前者不会隐式去掉前缀,后者会;它们不是可互换的写法。

子路径配置需要和应用的路由方式配合

下面是配置结构示例。它假设应用对外支持 /files/ 这个 base URL,但内部请求仍按根路径处理:

example.com {
    redir /files /files/ 308

    handle_path /files/* {
        reverse_proxy 127.0.0.1:8080
    }

    handle {
        respond "Not found" 404
    }
}

域名、上游和默认路由按实际部署替换;已有网站的默认处理不能直接换成这里的 404。单独处理 /files,再用 /files/* 匹配子路径,避免 /files* 把 /files-old 等名称也纳入应用。

应用还要配置自己的公共地址、URL base、base path 或同类设置,使它生成 /files/login.aspx、/files/css/site.css 等地址。设置名称与是否接受末尾斜杠由产品决定,不存在一个对所有应用通用的环境变量。

有些应用设置 base path 后也要求上游收到完整前缀。那就应使用保留路径的 handle /files/*,并核对应用入口;不能一面要求完整路径,一面用 handle_path 去掉它。浏览器地址、代理转发路径和应用配置要能对上。

应用不支持子路径时,用独立子域名

如果应用始终生成根路径链接,或登录回调、Cookie 路径不能配合子路径,改用独立子域名通常更合适:

files.example.com {
    reverse_proxy 127.0.0.1:8080
}

该域名需要正确解析到代理入口,HTTPS 也须能正常签发或加载证书。同步检查应用允许的主机名、公共 URL 和身份认证回调地址。更换访问地址可能让现有会话失效,不能只改 Caddy 后就认定迁移完成。

只改一个 Location 响应头无法覆盖 HTML、脚本生成地址和认证回调。不要为这一个应用把全站根路径都重写到 /files/,那会影响其他服务。

修改前保存 Caddyfile 和应用的 URL 配置,按服务的正常方式校验、加载;必要时恢复这两处及原访问入口。验收应覆盖登录、退出、静态资源和一个实际业务页面:它们的请求仍走同一个应用,路径没有丢失或重复前缀,其他站点路由也正常。