Nginx反向代理实战:解决路径重定向导致的404错误
创作时间:
作者:
@小白创作中心
Nginx反向代理实战:解决路径重定向导致的404错误
引用
CSDN
等
14
来源
1.
https://devpress.csdn.net/cloud/63041a35c67703293080a721.html
2.
https://m.blog.csdn.net/u010537398/article/details/81217408
3.
https://blog.csdn.net/shuxiaohua/article/details/124560311
4.
https://m.blog.csdn.net/weixin_47872288/article/details/142441391
5.
https://blog.csdn.net/u011066470/article/details/118905884
6.
https://blog.csdn.net/weixin_45616246/article/details/111573519
7.
https://www.cnblogs.com/kevingrace/p/5882006.html
8.
https://grafana.com/tutorials/run-grafana-behind-a-proxy/#introduction
9.
https://www.cnblogs.com/luxianghao/p/6807081.html
10.
https://www.cnblogs.com/papering/p/9973066.html
11.
https://www.linuxprobe.com/nginx-proxy-pass.html
12.
https://www.cnblogs.com/bigberg/p/7651197.html
13.
https://grafana.com/tutorials/run-grafana-behind-a-proxy/#configure-nginx
14.
https://www.cnblogs.com/woshimrf/p/nginx-proxy-rewrite-url.html
在使用Nginx作为反向代理时,经常会遇到路径处理和重定向的问题。本文将通过一个具体的案例,详细讲解如何解决Nginx反向代理中因路径重定向导致的404错误。
问题描述
当在Nginx中配置反向代理时,如果后端服务(如Grafana)进行了重定向,可能会导致路径丢失或不正确,从而引发404错误。例如,当访问http://your_domain.com/abc时,Nginx将请求转发到http://localhost:3000,但后端服务可能:
- 自动追加斜杠:比如重定向到
/abc/(导致路径重复)。 - 返回绝对路径:比如返回
Location: /login(绕过代理前缀)。
这会引发404错误,因为浏览器会直接访问未代理的路径(如/login而不是/abc/login)。
解决方案
方案一:通过Nginx配置解决
可以通过修改Nginx配置来处理路径重写和重定向问题。关键配置包括:
- rewrite规则:用于去除子路径前缀
- proxy_pass:正确传递路径
- proxy_redirect:修正后端返回的重定向路径
具体配置如下:
location /abc/ {
# 关键:移除/abc前缀,保留子路径
rewrite ^/abc/(.*) /$1 break;
proxy_pass http://localhost:3000/; # 注意末尾的斜杠
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
# 修正后端返回的重定向路径(关键)
proxy_redirect / /abc/;
}
方案二:修改后端服务配置
如果后端服务支持自定义根路径(如Grafana的serve_from_sub_path),可以直接指定其运行在/abc下:
Grafana配置示例(
grafana.ini):[server] domain = your_domain.com root_url = %(protocol)s://%(domain)s/abc/ serve_from_sub_path = trueNginx配置(无需重写路径):
location /abc/ { proxy_pass http://localhost:3000/; # 末尾斜杠不可省略 proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
验证步骤
检查后端响应头:
curl -I http://localhost:3000/login # 直接访问后端,观察Location头如果返回
Location: /login,则需通过proxy_redirect或后端配置修复。查看Nginx日志:
tail -f /var/log/nginx/access.log # 观察实际代理的路径浏览器测试:
访问
http://your_domain.com/abc,检查网络请求的Location头是否包含/abc前缀。
常见问题排查
- 404持续存在:检查
proxy_pass末尾是否遗漏斜杠,或rewrite规则是否生效。 - 重定向循环:确保后端服务的
root_url配置正确(如Grafana的root_url必须包含/abc)。 - 混合HTTP/HTTPS:如果使用HTTPS,确认
proxy_set_header X-Forwarded-Proto $scheme;已配置。
通过以上调整,路径冲突问题应能解决。如果仍有异常,请提供后端服务的具体类型(如Grafana、Node.js应用等)和关键日志片段。
热门推荐
金属氟碳漆施工注意事项介绍
氟碳漆施工方法及注意事项
仓库毒麻药品如何管理
如何应对儿童牙外伤、眼外伤等意外伤害?医学专家答疑
现代简约风装修全攻略:从色彩到布局的细节避坑指南,装出高级感
现代简约风装修全攻略:从色彩到布局的细节避坑指南,装出高级感
工商个体户可以转公司吗?个体工商户转公司的条件及流程详解
国内首部AI贺岁微短剧《美猴王》上线!创新再现中国神话奇幻世界
睡眠眼罩买什么样的好?眼罩选购小窍门
如何成为一名优秀的房地产经纪人?这种职业发展路径有哪些关键因素?
破产费用主要包括哪些
高铁“挂票”走红!带娃坐火车需要注意些什么?
健康肌秘丨唇色看健康,变色要当心!
CRISPR-Cas9:精准基因编辑的前景与挑战
跑步之后怎么做拉伸小腿比较好
如何处理股指期货的交割日?期货交割的流程和注意事项是什么?
采购合同管理SOP:构建高效合规的法律体系
五言律诗平仄规律及押韵口诀详解
农村宅基地面积规定及无房处理方式详解
SIP协议详解:定义、工作原理与应用
鸿蒙OS中的触摸事件处理
总是控制不住想抖腿 抖腿的常见原因有这几种
可回收垃圾有哪些?你都知道多少?
电缆及管道穿隔防火封堵:国际标准与国内规范大揭秘
电工培训:开启安全高效电力作业的金钥匙
为什么时不时后脑勺疼
世界首例「男男生子」,到底是咋回事?
书单| “ 16本书加1套方法论 ” 助你修炼逻辑思维,提高80%工作效率
电信诈骗海报如何制作:法律视角下的设计与合规标准
纳指ETF的投资策略是什么?这些策略如何帮助投资者规避风险?