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 = true
Nginx配置(无需重写路径):
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应用等)和关键日志片段。
热门推荐
杭州市民卡和社保卡是一张卡吗(市民卡和社保卡的区别)
空调冷媒温度多少,如何影响家居舒适度?
揭秘小学数学关键:等量关系到底是什么?
既辣又美味!- 东京10家精选辣味美食餐厅
立夏:从节气到文化的传承
桂林十大徒步路线全攻略:从漓江边到华南之巅
5個讓小坪數空間大變身的整理收納心法
FDA重新定义“健康食物”标准,助力长寿饮食理念
描写春夏秋冬的古诗词
穿越新旧贝尔格莱德:塞尔维亚华商与东欧风物
ICML 2024 顶级论文:机器学习有什么新进展?
许嵩经典歌曲盘点:十首代表作带你领略音乐才子的创作魅力
物价指数计算:物价指数的计算方法与经济分析
新疆旅游全攻略:自然人文景观与地道美食指南
羊肉汤里放什么中药好?六款药膳滋补羊肉汤的做法与注意事项
如何选到一套好的二手房?这10个要点请收好
亲情纽带,详尽解析中国家庭长辈称呼文化!
揭秘中美利率工具本质差异及其深远影响
杨利伟:将来的中国登月航天员基本上会从当前航天员中去选拔
晕车药和晕车贴哪个更管用
路由器安装教程和方法?如何一步步完成设置?
福尔摩斯探案集多少字?揭秘字数背后的精彩故事!
物业到期了没签合同要交物业费吗
官渡之战:奠定三国鼎立格局的关键战役
官渡之战中,曹操与袁绍分别是如何部署的?
婴儿期成长发育监测与评估
恐龙的崛起之谜
土鸡养殖创业计划书
超下饭的土豆烧茄子
深入了解增量投资收益率:定义、计算方法与实际应用