proxy_set_header设置Host为$proxy_host,$host与$local_host的区别

转载 2015年11月18日 22:29:28
先来看下proxy_set_header的语法
语法: proxy_set_header field value;
默认值:
proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
上下文: httpserverlocation

允许重新定义或者添加发往后端服务器的请求头。value可以包含文本、变量或者它们的组合。 当且仅当当前配置级别中没有定义proxy_set_header指令时,会从上面的级别继承配置。 默认情况下,只有两个请求头会被重新定义:

proxy_set_header Host       $proxy_host;
proxy_set_header Connection close;

nginx对于upstream默认使用的是基于IP的转发,因此对于以下配置:

 

Xml代码  收藏代码
  1. upstream backend {  
  2.     server 127.0.0.1:8080;  
  3. }  
  4. upstream crmtest {  
  5.     server crmtest.aty.sohuno.com;  
  6. }  
  7. server {  
  8.         listen       80;  
  9.         server_name  chuan.aty.sohuno.com;  
  10.         proxy_set_header Host $http_host;  
  11.         proxy_set_header x-forwarded-for  $remote_addr;  
  12.         proxy_buffer_size         64k;  
  13.         proxy_buffers             32 64k;  
  14.         charset utf-8;  
  15.   
  16.         access_log  logs/host.access.log  main;  
  17.         location = /50x.html {  
  18.             root   html;  
  19.         }  
  20.     location / {  
  21.         proxy_pass backend ;  
  22.     }  
  23.           
  24.     location = /customer/straightcustomer/download {  
  25.         proxy_pass http://crmtest;  
  26.         proxy_set_header Host $proxy_host;  
  27.     }  
  28. }  

 

当匹配到/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 "";

关于nginx中proxy_set_header的设置

昨天一个开发找我帮忙配置一个nginx的转发,本来很容易的配置,但是坑了我好久才解决。。。需求大致是: nginx上配有aaa.example.com的虚拟主机,现在需要将访问http://aaa...

Nginx proxy_set_header中$proxy_host,$host,$http_host的区别

在使用Nginx做反向代理的时候,proxy_set_header功能可以设置反向代理后的http header中的host, 那么常用的几个设置中$proxy_host, $host,$http_...

nginx中proxy_set_header Host $host;的作用

nginx为了实现反向代理的需求而增加了一个ngx_http_proxy_module模块。其中proxy_set_header指令就是该模块需要读取的配置文件。在这里,所有设置的值的含义和http请...

nigix proxy_set_header Host $host:$server_port 与 $host:proxy_port 区别

nigix做反向代理   注意  :$proxy_port  与 :$server_port 区别 $server_port :nigix监听的端口 $proxy_port : 服...

nginx中proxy_set_header Host $host的作用

http://4856809.blog.51cto.com/4846809/1188931 nginx为了实现反向代理的需求而增加了一个ngx_http_proxy_module模块。其中pr...
  • ywh147
  • ywh147
  • 2013年07月08日 19:34
  • 12025

nginx proxy_set_header设置、自定义header

先来看下proxy_set_header的语法 语法: proxy_set_header field value; 默认值: proxy_set_header ...

nginx 做proxy 不转发 http header问题解决

使用nginx做负载均衡或http代理时,碰到http header不转发的问题。   配置里只有转发设置原始ip和host的             proxy_set_header Ho...
  • wx_mdq
  • wx_mdq
  • 2013年08月28日 18:19
  • 12045

Nginx不同域名反向代理到另一台服务器 proxy_pass和$host

假设对本机80端口的访问为一台服务器,对本机8000端口的访问为另一台服务器,下面这样写一个nginx的反向代理配置,就可以实现所有请求都转移 server { listen 0.0.0.0:80...
  • ownfire
  • ownfire
  • 2013年03月19日 15:03
  • 14349

nginx反向代理配置(nginx.conf+proxy_set_header)

公司最近有一些反向代理的需求,需要将nginx部署在互联网DMZ区。 之前只有利用nginx做过简单的web服务器,并未真正在生产环境上使用反向代理。 本公司生产环境目前配置如下: [root@szw...

NGINX学习笔记——传递请求头

默认情况,NGINX在代理请求时会重新定义两个HTTP头字段,“Host”和“Connection”...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:proxy_set_header设置Host为$proxy_host,$host与$local_host的区别
举报原因:
原因补充:

(最多只允许输入30个字)