使用Nginx代理时出现页面未找到(404)问题求助
Nginx反向代理404问题的原因及解决办法
你的问题出在proxy_pass的路径匹配逻辑上:当location /api搭配不带末尾斜杠的proxy_pass http://OTHER_SERVER_IP_ADDRESS时,Nginx会将请求的完整路径(包含/api前缀)转发给后端服务器。比如访问http://myservername.com/api,后端实际收到的请求是http://OTHER_SERVER_IP_ADDRESS/api,但你的后端只有根路径/能返回正常响应,因此返回404 NOT FOUND。
下面是两种可行的修正方案:
方案一:给proxy_pass添加末尾斜杠
修改location /api块的配置:
location /api { proxy_pass http://OTHER_SERVER_IP_ADDRESS/; }
添加末尾斜杠后,Nginx会将/api作为前缀剥离,把剩余路径拼接在后端的根路径后。比如:
- 访问
/api→ 转发到http://OTHER_SERVER_IP_ADDRESS/ - 访问
/api/index.html→ 转发到http://OTHER_SERVER_IP_ADDRESS/index.html
完全匹配你直接访问后端的逻辑。
方案二:用rewrite重写请求路径
如果需要更灵活的路径处理,可以通过rewrite规则移除/api前缀:
location /api { rewrite ^/api(.*)$ $1 break; proxy_pass http://OTHER_SERVER_IP_ADDRESS; }
这条rewrite规则会将所有以/api开头的路径,替换为去掉/api后的部分,再转发给后端,效果和方案一一致。
内容的提问来源于stack exchange,提问作者oderfla
相关产品推荐
相关产品推荐

