使用Caddy反向代理转发API请求至后端时遭遇405错误
问题原因及解决方案
核心问题:请求路径前缀不匹配
你遇到的405 (Method Not Allowed)本质是后端接收到的请求路径和实际接口路径不匹配,导致找不到对应方法的接口,最终返回405错误。
具体逻辑:
- 前端请求的是
https://website.com/api/something - 当前Caddy配置会把完整路径
/api/something直接转发到后端localhost:8080/api/something - 但你的Spring后端接口实际是
/something(不带/api前缀),后端找不到对应接口,部分Spring框架会在路径不存在时返回405而非404,从而触发报错。
修复方案:修改Caddy配置,剥离/api前缀再转发
更新Caddy配置,在代理前移除/api前缀,让后端收到正确的接口路径:
www.website.com { redir https://website.com{uri} # 重定向www子域名到主域名 } website.com { root * /var/www/html # React构建文件存放路径 # 提供静态文件服务 file_server # 客户端路由 fallback 到index.html try_files {path} /index.html # 专门处理/api开头的请求 handle /api/* { uri strip_prefix /api # 移除请求路径中的/api前缀 reverse_proxy localhost:8080 # 转发到Spring后端 } }
额外排查点
如果修改后仍有问题,可以检查:
- 确认Spring后端的控制器注解路径确实不带
/api前缀(比如@RequestMapping("/something")而非@RequestMapping("/api/something")) - 核对前端请求的HTTP方法(GET/POST等)和后端接口支持的方法是否一致
- 查看Caddy日志(
journalctl -u caddy)和Spring后端日志,确认转发后的请求路径、方法是否符合预期
内容的提问来源于stack exchange,提问作者user23635032
相关产品推荐
相关产品推荐

