You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Caddy v2反向代理与file_server路径匹配优先级配置问题求助

问题根因

Caddy v2 默认执行逻辑为顺序执行所有匹配当前请求的指令,不会匹配到第一个路径规则就终止后续流程。你当前的配置中,哪怕请求匹配/upload/*触发了file_server,只要file_server没有终止请求(比如文件查找失败、无明确排他逻辑),后续的reverse_proxy *依然会执行,最终将请求转发到3000端口。

解决方案

使用handle指令做排他性路由分组即可解决问题:handle会按配置顺序匹配规则,匹配到第一个符合条件的handle后,就不会执行后续其他handle,完全符合你需要的优先级逻辑。

修正后配置

如果你的upload文件夹存放在./svelte/dist目录下(即文件路径为./svelte/dist/upload/xxx),直接使用以下配置:

{
        debug
        auto_https off
        log {
                output stdout
                level DEBUG
        }
        local_certs
}

127.0.0.1:80, localhost:80 {
        root * ./svelte/dist

        # 优先级1:处理/upload/*请求
        handle /upload/* {
                file_server browse
        }

        # 优先级2:处理/api/*请求
        handle /api/* {
                reverse_proxy 127.0.0.1:9090
        }

        # 优先级3:处理其余所有请求
        handle {
                reverse_proxy 127.0.0.1:3000
        }
}

如果upload文件夹独立在./svelte/dist之外,比如存放在当前工作目录的upload文件夹下,只需修改/upload/*对应的handle块,单独指定根目录即可:

handle /upload/* {
        root * ./upload
        file_server browse
}

补充说明

之前出现127.0.0.1访问返回404、localhost访问正常的问题,通常是9090/3000端口的后端服务仅绑定了localhost网卡,没有监听127.0.0.1,修改后端服务启动配置,将监听地址改为0.0.0.0或者同时监听127.0.0.1和localhost即可解决。

内容的提问来源于stack exchange,提问作者Kokizzu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 18:06:04