proxy_set_header设置Host为$proxy_host,$host与$local_host的区别
2015-11-18 22:29
633 查看
先来看下proxy_set_header的语法
允许重新定义或者添加发往后端服务器的请求头。
默认情况下,只有两个请求头会被重新定义:
nginx对于upstream默认使用的是基于IP的转发,因此对于以下配置:
Xml代码
upstream backend {
server 127.0.0.1:8080;
}
upstream crmtest {
server crmtest.aty.sohuno.com;
}
server {
listen 80;
server_name chuan.aty.sohuno.com;
proxy_set_header Host $http_host;
proxy_set_header x-forwarded-for $remote_addr;
proxy_buffer_size 64k;
proxy_buffers 32 64k;
charset utf-8;
access_log logs/host.access.log main;
location = /50x.html {
root html;
}
location / {
proxy_pass backend ;
}
location = /customer/straightcustomer/download {
proxy_pass http://crmtest;
proxy_set_header Host $proxy_host;
}
}
当匹配到/customer/straightcustomer/download时,使用crmtest处理,到upstream就匹配到crmtest.aty.sohuno.com,这里直接转换成IP进行转发了。假如crmtest.aty.sohuno.com是在另一台nginx下配置的,ip为10.22.10.116,则$proxy_host则对应为10.22.10.116。此时相当于设置了Host为10.22.10.116。如果想让Host是crmtest.aty.sohuno.com,则进行如下设置:
如果不想改变请求头“Host”的值,可以这样来设置:
但是,如果客户端请求头中没有携带这个头部,那么传递到后端服务器的请求也不含这个头部。 这种情况下,更好的方式是使用
此外,服务器名可以和后端服务器的端口一起传送:
如果某个请求头的值为空,那么这个请求头将不会传送给后端服务器:
语法: | proxy_set_header field value; |
默认值: | proxy_set_header Host $proxy_host; proxy_set_header Connection close; |
上下文: | http, server, location |
value可以包含文本、变量或者它们的组合。 当且仅当当前配置级别中没有定义
proxy_set_header指令时,会从上面的级别继承配置。
默认情况下,只有两个请求头会被重新定义:
proxy_set_header Host $proxy_host; proxy_set_header Connection close;
nginx对于upstream默认使用的是基于IP的转发,因此对于以下配置:
Xml代码
upstream backend {
server 127.0.0.1:8080;
}
upstream crmtest {
server crmtest.aty.sohuno.com;
}
server {
listen 80;
server_name chuan.aty.sohuno.com;
proxy_set_header Host $http_host;
proxy_set_header x-forwarded-for $remote_addr;
proxy_buffer_size 64k;
proxy_buffers 32 64k;
charset utf-8;
access_log logs/host.access.log main;
location = /50x.html {
root html;
}
location / {
proxy_pass backend ;
}
location = /customer/straightcustomer/download {
proxy_pass http://crmtest;
proxy_set_header Host $proxy_host;
}
}
当匹配到/customer/straightcustomer/download时,使用crmtest处理,到upstream就匹配到crmtest.aty.sohuno.com,这里直接转换成IP进行转发了。假如crmtest.aty.sohuno.com是在另一台nginx下配置的,ip为10.22.10.116,则$proxy_host则对应为10.22.10.116。此时相当于设置了Host为10.22.10.116。如果想让Host是crmtest.aty.sohuno.com,则进行如下设置:
proxy_set_header Host crmtest.aty.sohuno.com;
如果不想改变请求头“Host”的值,可以这样来设置:
proxy_set_header Host $http_host;
但是,如果客户端请求头中没有携带这个头部,那么传递到后端服务器的请求也不含这个头部。 这种情况下,更好的方式是使用
$host变量——它的值在请求包含“Host”请求头时为“Host”字段的值,在请求未携带“Host”请求头时为虚拟主机的主域名:
proxy_set_header Host $host;
此外,服务器名可以和后端服务器的端口一起传送:
proxy_set_header Host $host:$proxy_port;
如果某个请求头的值为空,那么这个请求头将不会传送给后端服务器:
proxy_set_header Accept-Encoding "";
相关文章推荐
- 关于坐标系和投影的相关知识探讨
- Google C++编程风格指南(非常有用)
- 运行时-二
- 第一次spring冲刺第7天
- mysqladmin flush-hosts
- iOS开发之应用程序
- 热更新lua语法
- QT: :QWheelEvent
- IntentServices源码分析
- Tomcat java.lang.OutOfMemoryError: PermGen space及其解决方法
- .Net 扩展方法集合.
- final修饰符---final类
- Android ProgressBar的案例
- VC中使用XML
- 【转载】linux 技巧:使用 screen 管理你的远程会话
- 浮点数(有限浮点数、无限循环浮点数)的精确表达
- db2离线备份、在线备份和回复
- HDU 5402 Travelling Salesman Problem(组合数学+构造)
- c语言:使用main函数的参数,实现一个整数计算器
- Hadoop HDFS原理