zoukankan      html  css  js  c++  java
  • Nginx中$http_host、$host、$proxy_host的区别

    变量 是否显示端口 值是否存在
    host

    "Host:value"显示

    值为a:b的时候,只显示a

    http_host "Host:value",value存在就显示
    proxy_host

    默认80不显示

    其他端口显示

    "Host:value"显示

    通过Nginx配置演示:

    [root@ans3 conf]# cat nginx.conf
    
    #user  nobody;
    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;
    
        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/access.log  main;
    
        sendfile        on;
        tcp_nopush     on;
    
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        #gzip  on;
    #     upstream backend {
    #       server 10.0.0.50:8080;
    #}
    
        server {
              listen       80;
              server_name  a.test.com;
    
        location / {
            proxy_pass http://10.0.0.50:8080;
            proxy_set_header X-Proxy-Host $proxy_host;
            proxy_set_header Host $http_host;
               index index.html index.htm;
           }
    }
    }

    另一台服务器配置

    [root@master conf]# cat nginx.conf
    
    #user  nobody;
    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;
    
        #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/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        #gzip  on;
    
        server {
            listen       8080;
            server_name  www.test.com aa.test.com;
    
    
            location / {
          return 200 'http_host=[$http_host] host=[$host] proxy_host=[$http_x_proxy_host]
    ';
    }
    }
    }

    不携带请求头 Host

    [root@ans3 conf]# curl -H 'Host:' --http1.0 http://a.test.com
    http_host=[] host=[www.test.com] proxy_host=[10.0.0.50:8080]
     
    变量说明
    http_host   请求无 Host, 则 http_host 为空, 继而无 Host 传到 proxy
    host www.test.com proxy 无 Host 传入, 则使用其 server_name 的第一项
    proxy_host
    10.0.0.50:8080
    取自于 proxy_pass 的参数

    携带请求头 Host

    [root@ans3 conf]# curl -H 'Host:abc:123' --http1.0 http://a.test.com
    http_host=[abc:123] host=[abc] proxy_host=[10.0.0.50:8080]
    变量说明
    http_host abc:123 给啥拿啥
    host abc 第一个:前的内容(小写)
    proxy_host
    10.0.0.50:8080
    带端口显示

    修改真实服务器的端口为默认端口

    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        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/access.log  main;
    
        sendfile        on;
        tcp_nopush     on;
    
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        #gzip  on;
    #     upstream backend {
    #       server 10.0.0.50:8080;
    #}
    
        server {
              listen       80;
              server_name  a.test.com;
            
        location / {
            proxy_pass http://10.0.0.50:80;
            proxy_set_header X-Proxy-Host $proxy_host;
            proxy_set_header Host $http_host;
               index index.html index.htm;
           }
    }
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        #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/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        #gzip  on;
    
        server {
            listen       80;
            server_name www.test.com aa.test.com;
    
    
            location / {
          return 200 'http_host=[$http_host] host=[$host] proxy_host=[$http_x_proxy_host]
    ';
    }
    }
    }

    访问时proxy_host会省略80端口

    [root@ans3 conf]# curl -H 'Host:abc:123' --http1.0 http://a.test.com
    http_host=[abc:123] host=[abc] proxy_host=[10.0.0.50]
  • 相关阅读:
    bash脚本入门
    DNS 递归查询
    场景题
    利用 python 发送邮件(qq 邮件)
    Swagger 简单使用
    Nginx支持HTTPS,生成SSL证书
    使用 Python 搭建简易HTTP服务器
    扫码登陆原理
    【积累】在jQuery.Validate额中使用可以传入参数的message
    关于RUBY处理多语言转字符编码的一点经验 nkf
  • 原文地址:https://www.cnblogs.com/zh-dream/p/12834056.html
Copyright © 2011-2022 走看看