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

Nginx+Express请求路径配置问题:代理/api/返回Cannot GET /api/

问题分析与解决

错误原因与修复

你的Nginx代理配置存在路径传递问题:
当配置location /api/和proxy_pass http://127.0.0.1:3000时,Nginx会把请求路径完整传递给后端服务,也就是后端收到的请求是GET /api/,但你的Express仅配置了/路径的路由,因此返回Cannot GET /api/。

修复方案

修改proxy_pass配置,在地址末尾添加/:

location /api/ {
    proxy_pass http://127.0.0.1:3000/; # 末尾新增/
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
}

添加/后,Nginx会将/api/前缀从请求路径中移除,后端收到的请求变为GET /,就能匹配到你的Express路由,返回预期的"yes"。

理解location与root的关系

在你的Nginx配置中,location /搭配root /usr/local/var/www/front-end的核心逻辑是:

  • 当请求匹配location /规则时,Nginx会把请求URI拼接在root指定的目录后,查找对应文件。比如请求http://127.0.0.1:1155/index.html,Nginx会读取/usr/local/var/www/front-end/index.html文件返回。
  • location是请求URI的匹配规则,不同规则优先级不同:
    • 你配置的location /api/是更具体的前缀匹配,优先级高于宽泛的location /,因此所有/api/开头的请求会走代理逻辑,而非去前端目录查找文件;其余请求则由location /处理,返回前端静态资源。

示例场景:

  • 请求http://127.0.0.1:1155/:匹配location /,返回/usr/local/var/www/front-end/index.html
  • 请求http://127.0.0.1:1155/api/:匹配location /api/,修复后代理到后端返回"yes"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:40:42