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
相关产品推荐
相关产品推荐

