资讯动态

Nginx反向代理踩坑记录:一个“/”引发的接口404问题排查全过程

发布时间:2026/8/14 13:46:01 来源:尧图企业网站定制
文章目录一、问题背景二、问题现象三、错误配置分析核心location匹配proxy_pass 是否带 / 影响路径。情况1情况2四、最终解决方案五、为什么之前一直没发现六、以后配置Nginx需要注意什么1. location匹配规则不要靠猜2. proxy_pass最后的 / 非常重要3. 修改配置先验证七、总结一、问题背景访问流程用户浏览器||Nginx :80||----------------||Vue静态资源 Spring Boot API :8080Nginx负责静态资源代理后端接口转发二、问题现象前端页面访问正常但是调用后台接口GET /api/xxxx; 返回404 Not Found;检查浏览器 NetworkRequest URL:http://123.xx.xx.xx/api/aaaa状态404后端直接访问curl localhost:端口/api/aaaa正常。说明问题不是 Spring Boot而是 Nginx 转发。三、错误配置分析核心例如错误配置server{listen80;location /{root /usr/share/nginx/html;index index.html;}location /api{proxy_pass http://backend:8080;}}很多人认为/api/articles 会自动转发 backend:8080/api/articleslocation匹配Nginx location /api 匹配 /api /api/user /api/articleproxy_pass 是否带 / 影响路径。但是proxy_pass 是否带 /影响路径。情况1location /api/{proxy_pass http://backend:8080/;}请求/api/articles转发backend:8080/articles情况2location /api/{proxy_pass http://backend:8080;}请求/api/articles转发backend:8080/api/articles这里就是很多人的误区以为 Nginx 只是简单转发实际上 proxy_pass 会根据 URI 是否存在进行路径重写。四、最终解决方案修改前location /{proxy_pass http://backend:8080/;}修改后location /api/{proxy_pass http://backend:8080;}之后重启服务五、为什么之前一直没发现例如本地开发环境中Vue通过Vite代理解决跨域问题接口路径由开发服务器处理因此没有暴露Nginx路径问题。部署到服务器Vue ↓ Nginx ↓ Spring Boot之后Nginx成为新的请求入口。 所以生产环境暴露问题。六、以后配置Nginx需要注意什么1. location匹配规则不要靠猜2. proxy_pass最后的 / 非常重要proxy_pass http://server;和 proxy_pass http://server/;不是一回事。3. 修改配置先验证不要直接nginx -s reload先nginx -t七、总结这次问题表面上只是Nginx配置中的一个路径问题但实际上暴露了自己对于location匹配规则和proxy_pass路径处理机制理解不足。通过这次排查也认识到生产环境中的问题不能只关注应用本身而需要从请求链路整体分析。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价