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

本文详细介绍了Nginx中proxy_set_header指令的用法,特别是如何设置Host头为不同的值,如$proxy_host、$host等,并讨论了这些变量在不同场景下的应用。

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

先来看下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 "";
#load_module /usr/share/nginx/modules/ngx_stream_module.so; #user appyw; worker_processes 1; error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; proxy_hide_header X-Powered-By; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/host.access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; client_max_body_size 10m; #gzip_static on; server { server_tokens off; autoindex off; allow 127.0.0.1; allow 172.23.16.0/24; allow 172.23.68.219; allow 172.23.228.56; allow 218.76.15.23; allow ::1; deny all; listen 18081; listen 443 ssl; server_name localhost; if ($request_method !~ ^(GET|HEAD|POST)$) { return 444; } ssl_certificate ../jason.crt; ssl_certificate_key ../jason-np.key; ssl_session_timeout 5m; ssl_prefer_server_ciphers on; #charset koi8-r; #access_log logs/host.access.log main; location / { root /home/appyw/app/car; index index.html index.htm; try_files $uri $uri/ /index.html; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location /dev-api/ { proxy_pass http://172.23.228.56:18081/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /netty/ { proxy_pass http://127.0.0.1:18099/; } location /document/ { proxy_pass http://hn-cwhdfwpt-test.oss-cn-changsha-wwy-d01-a.opswan.sgmc.sgcc.com.cn/; #proxy_set_header Host $host; #proxy_set_header X-Real-IP $remote_addr; #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /v2g-platform-web { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; alias /home/appyw/app/ls/v2g-platform-web; index index.html; try_files $uri $uri/ /v2g-platform-web/index.html; } location /v2g-charging-web { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; alias /home/appyw/app/ls/v2g-charging-web; index index.html; try_files $uri $uri/ /v2g-charging-web/index.html; } location /v2g-tjtf-web { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; alias /home/appyw/app/ls/v2g-tjtf-web; index index.html; try_files $uri $uri/ /v2g-tjtf-web/index.html; } location /vehicle-grid-h5 { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; alias /home/appyw/app/ls/vehicle-grid-h5; index index.html; try_files $uri $uri/ /vehicle-grid-h5/index.html; } location /market/api/ { proxy_pass http://172.23.228.56:18081/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /vehicle-grid-admin/ { proxy_pass http://172.23.228.56:18081/vehicle-grid-admin/vehicle-grid-admin/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /vehicle-grid-mobile/ { proxy_pass http://172.23.228.56:18081/vehicle-grid-mobile/vehicle-grid-mobile/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /vehicle-charge-server/ { proxy_pass http://172.23.228.56:18081/charge-server/charge-server/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /vehicle-charging-admin/ { proxy_pass http://172.23.228.56:18081/vehicle-charging-admin/charging-admin/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /vehicle-grid-system/ { proxy_pass http://172.23.228.56:34509/vehicle-grid-system/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /twoBatterySwapping/ { proxy_pass http://172.23.228.56:18081/twoBatterySwapping/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /travel/ { proxy_pass http://172.23.228.56:18081/travel/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /vehicle-grid-client-interconnect/ { proxy_pass http://172.23.228.56:34510/charging-client-interconnect/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /iot/ { proxy_pass http://172.23.228.56:34530; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /newiot/ { proxy_pass http://172.23.228.56:34530; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /xxl-job-admin/ { proxy_pass http://172.23.228.56:18892/xxl-job-admin/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } #upstream dataide{ # server 172.23.228.33:34540; # check interval=5000 rise=2 fall=3 timeout=3000 type=http; # check_http_send "HEAD /dataide-server HTTP/1.0\r\n\r\n"; # check_http_expect_alive http_2xx http_3xx; # } location /dataide-server/ { #root html; index index.html index.htm; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host:$server_port; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://172.23.228.33:34540; } location ^~/dataide { alias /home/appyw/app/ls/ide; index index.html; try_files $uri $uri/ /dataide/index.html; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} } 比如我的这个配置文件,我想把iot,newiot,xxl-job都导到另一个18085端口上,该怎么做
最新发布
07-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值