美文网首页
http_host, host 和 proxy_host 的区别

http_host, host 和 proxy_host 的区别

作者: lindyang | 来源:发表于2020-04-24 18:31 被阅读0次
    变量 端口显示 值存在
    http_host "Host: ..." ? ✔ : ✖
    host "Host: ..." ? ✔ : (server_name ? ✔ : ✖)
    proxy_host 80 ? ✖ : ✔ proxy_pass ? ✔ : ✖

    参考

    An unchanged “Host” request header field can be passed like this:
    
      proxy_set_header Host       $http_host;
    
    However, if this field is not present in a client request header then nothing will be passed.
    In such a case it is better to use the $host variable - 
    its value equals the server name in the “Host” request header field 
    or the primary server name if this field is not present:
    
      proxy_set_header Host       $host;
    
    server {
        listen 8000;
        server_name lindyang.com;
        default_type text/html;
        location / {
            proxy_pass http://127.0.0.2:8888;  # 8888 -> 80
            proxy_set_header Host $http_host;
            proxy_set_header X-Proxy-Host $proxy_host;
        }
    }
    
    server {
        listen 8888;  # 8888 -> 80
        server_name yld.com www.yld.com;
        default_type text/html;
        location / {
            return 200 'http_host=[$http_host] host=[$host] proxy_host=[$http_x_proxy_host]\n';
        }
    }
    
    • 不携带请求头 Host

    curl -H 'Host:' --http1.0 http://lindyang.com:8000

    http_host=[] host=[yld.com] proxy_host=[127.0.0.2:8888]
    
    变量 说明
    http_host 请求无 Host, 则 http_host 为空
    host yld.com 忽略空 Host , 使用 server_name 的第一项
    proxy_host 127.0.0.2:8888 取自于 proxy_pass 的参数
    • 携带请求头 Host
    为验证 proxy_host 不带端口的情况,需将 8888 -> 80

    curl -H 'Host: Dummy:abc' http://lindyang.com:8000

    http_host=[dummy:abc] host=[dummy] proxy_host=[127.0.0.2]
    
    变量 说明
    http_host Dummy:abc 给啥拿啥
    host dummy 第一个:前的内容(d小写)
    proxy_host 127.0.0.2 省略端口 80

    相关文章

      网友评论

          本文标题:http_host, host 和 proxy_host 的区别

          本文链接:https://www.haomeiwen.com/subject/ipdfwhtx.html