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应用等)和关键日志片段。
热门推荐
天安门广场攻略:城楼、故宫等四大景点预约游览指南
新中国首座纪念碑:铭记1840年以来民族英雄的不朽丰碑
日本发现苏轼珍贵手稿,字字超凡脱俗,算是把书法写到头了!
苏轼诗词下的女性形象,有才有义,更加生动形象、聪颖智慧
2024年乙亥月时间确定:11月8日至12月6日
孤鸾煞日柱全解:从甲寅到壬子,八个婚姻凶日特征
壬子年命运:早平中成晚美,五行属木
金渐层猫售价3000元起,纯种优质可达万元
PHP兑换码编写指南:从生成到验证的完整流程
刮刮乐成年轻人新宠,购彩行为折射多重心理诉求
LSTM预测彩票准确率仅0.01125,随机性难题仍未突破
如何用“风险管理述职报告范文”提升述职效果?
安全管理人员述职述廉报告
算筹早于印度,π值精度超西方:中国古代数学的两大突破
用数学打造完美食谱:线性规划让营养搭配更科学
手机天线都去哪里了?
曾国藩与江忠源:谁是太平军的克星?
双十一必看:55英寸MiniLED电视三大品牌全方位对比
中国步入“超老龄化”社会,智能家居提供居家养老新方案
黎明:用坚韧精神克服外貌质疑,成为最具艺术气质的天王
士力架热量评估:健康零食的正确选择
风水涣卦:风行水上悟人生,五维智慧解现代困局
年轻人的“保命神器”:保健品真的有用吗?
华东医院营养科专家提醒:冬季养生,科学选购保健品是关键
SATA 3.0普及遇兼容性挑战,专家详解解决方案
罗瑟汉姆VS博尔顿:谁能笑到最后?
寒假如何培养自律孩子?这份“三不管七管”攻略请收好
苹果腐烂病防治秘籍大公开!
暗区突围S11赛季:新手必看的倒卖物品攻略
《暗区突围》PS弹倒卖攻略:低成本高回报的赚钱之道