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应用等)和关键日志片段。
热门推荐
中国品牌乘用车销量占比首次突破七成,国产车真的崛起了?
河北保定白石山旅游攻略,穿越万千奇峰,寻觅太行仙境!
曝光假药制作黑幕,保障公众用药安全
如何理解黄金基本面因素的作用?这些因素如何影响黄金价格趋势?
打造DJ娑娜的“痛苦”过程
首富钟睒睒:我就是一个农民
22份大模型深度报告:涵盖场景评估、趋势预测、最佳实践等企业最关心的问题
汽车刮痕糟心,先别急着去4S店挨宰!教你4招5块钱成本搞定
如何从融资融券余额指标中寻找大盘的底部信号?
哈利波特魔杖大全图鉴-所有魔杖材质特性解析
产权到期后如何顺利续费?这些续费流程有哪些关键步骤?
儿童接种疫苗那些事
过敏性结膜炎可以吃什么食物
适合2-3岁宝宝的感统训练游戏有哪些呢?
情绪不稳、容易冲动?了解「杏仁核」掌控自己的情绪!
搭建“场景式虚拟直播间”指南来了
如何确保软件可靠性?深度解析软件可靠性测试标准规范
儿童牙科护理:何时带孩子进行第一次牙科检查
基于Vue.js和SSM的同人创作平台系统设计与实现
团标参编企业和个人都需要
如何选择合适的数据加密算法?数据加密算法的选择指南
闰年二月多少天?了解闰年的二月天数
香港企业税号详解:申请指南与重要信息
木瓜属:种类特征、栽培技术与用途全解析
TikTok难民涌入小红书:一场全球社交平台的意外狂欢
跑步机心率区间设定:个性化训练指南
铅笔的硬度如何分等级?从6H到6B的科学解读
养胃吃什么补品最好 十种对胃好的滋补品推荐
被列入失信人名单后如何解决?详解失信人名单的解除流程
25年高刷显示器发展历程,盘点那些改变游戏体验的创新技术