Nginx反向代理后端接口404了怎么办?

西门兰兰 阅读 53

我本地开发时用 Nginx 做反向代理,前端请求 /api/login 想转发到后端的 http://localhost:3000/login,但一直返回 404。

我的 Nginx 配置如下:

location /api/ {
    proxy_pass http://localhost:3000/;
}

后端服务确实在 3000 端口跑着,直接 curl http://localhost:3000/login 能拿到数据。但通过 Nginx 代理就 404,是不是路径拼错了?

我来解答 赞 6 收藏
二维码
手机扫码查看
2 条解答
慕容天琪
试试这个,把 proxy_pass 后面的地址去掉最后的斜杠,改成这样:
location /api/ {
proxy_pass http://localhost:3000;
}

后端路径会自动拼接上 /api/ 后的部分,应该就能正常转发了。这问题折腾人,但改完就好了。
点赞
2026-03-31 20:04
Prog.栾诺
问题出在路径匹配上。你现在的配置会把 /api/login 转发成 http://localhost:3000/api/login,而不是 http://localhost:3000/login。

要修正这个问题,可以在 location 块里加上 rewrite 规则来去掉 /api 前缀,这样效率更高:

location /api/ {
rewrite ^/api/(.*)$ /$1 break;
proxy_pass http://localhost:3000;
}


这个配置会把 /api/login 重写成 /login 然后再转发给后端。注意我把 proxy_pass 后面的 / 去掉了,这样可以避免不必要的路径追加。

另外建议你在开发时打开 Nginx 的错误日志,调试这类问题方便很多。我以前遇到类似问题都是靠日志才快速定位到的,能省不少时间。
点赞
2026-03-25 20:01