关于nginx中proxy_set_header的设置
2021/12/21 7:25:33
本文主要是介绍关于nginx中proxy_set_header的设置,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
昨天一个开发找我帮忙配置一个nginx的转发,本来很容易的配置,但是坑了我好久才解决。。。需求大致是:
nginx上配有aaa.example.com的虚拟主机,现在需要将访问http://aaa.example.com/api/x.x/client/的请求转到http://bbb.example.com/api/x.x/client/,bbb.example.com的虚拟主机在另外一台nginx上,其中x.x表示位数不定的版本号,如:1.0或1.20.345都可能。请求转过去要求url保持不变
用rewrite转发的话,url会发生变化的,那就用proxy_pass吧,于是添加了如下的配置:
-
location ~ ^/api/([0-9]+)(\.[0-9]+)*/client/ {
-
proxy_pass http://bbb.example.com;
-
}
在现有环境的nginx里添加这段配置之后,访问却始终转不过去,查看nginx日志也只能看到是404信息,并没有更多定位问题的信息。检查了许久也没找到原因,于是重新装了一台新nginx,里面只加上面这段配置,结果nginx是能够转发成功的,这说明单独来看这条location的配置是没有问题的,很有可能是现有环境nginx里的某些配置影响到了这个转发。
为了定位问题原因,我将aaa.example.com虚拟主机下的其他配置注意注释掉来调试,最后发现当注释掉proxy_set_header Host $http_host ;这条配置之后,就能成功转发了。这才注意到是反向代理配置的问题。现有环境中原有的配置也不能随便删掉,上网查了下原因,找到下面这种解决方案:
-
location ~ ^/api/([0-9]+)(\.[0-9]+)*/client/ {
-
proxy_pass http://bbb.example.com;
-
proxy_set_header Host $proxy_host;
-
}
即,在location里面添加一条proxy_set_header Host $proxy_host;配置。
当Host设置为$http_host时,则不改变请求头的值,所以当要转发到bbb.example.com的时候,请求头还是aaa.example.com的Host信息,就会有问题;当Host设置为$proxy_host时,则会重新设置请求头为bbb.example.com的Host信息。
另外,关于proxy_pass转发url的参数,可以通过在location中用rewrite来做,所以完善后的配置如下:
-
location ~ ^/api/([0-9]+)(\.[0-9]+)*/client/ {
-
rewrite /(.*)$ /$1 break;
-
proxy_pass http://bbb.example.com;
-
proxy_set_header Host $proxy_host;
-
}
在location用rewrite改变了URI之后,proxy_pass将使用改变后的URI。上面例子(.*)是将所有参数传给$1,转发时/$1会拼接在http://bbb.example.com后面。
补习
自己之前并没有太留意nginx中proxy_set_header的设置,借这次遇到的问题,补习下功课。
proxy_set_header用来重定义发往后端服务器的请求头。
语法格式:
proxy_set_header Field Value;
Value值可以是包含文本、变量或者它们的组合。常见的设置如:
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
注意:在nginx的配置文件中,如果当前模块中没有proxy_set_header的设置,则会从上级别继承配置。继承顺序为:http, server, location。
参考资料:
1 proxy_set_header设置Host为$proxy_host,$host与$local_host的区别_a19860903的专栏-CSDN博客
2 《精通Nginx》— 第4章 Nginx作为反向代理
这篇关于关于nginx中proxy_set_header的设置的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-13用Nginx防范DDoS攻击的那些事儿
- 2024-12-13用Terraform在AWS上搭建简单NGINX服务器指南
- 2024-10-29Nginx发布学习:从入门到实践的简单教程
- 2024-10-28Nginx发布:新手入门教程
- 2024-10-21nginx 怎么设置文件上传最大20M限制-icode9专业技术文章分享
- 2024-10-17关闭 nginx的命令是什么?-icode9专业技术文章分享
- 2024-09-17Nginx实用篇:实现负载均衡、限流与动静分离
- 2024-08-21宝塔nginx新增8022端口方法步骤-icode9专业技术文章分享
- 2024-08-21nginx配置,让ws升级为wss访问的方法步骤-icode9专业技术文章分享
- 2024-08-15nginx ws代理配置方法步骤-icode9专业技术文章分享