$host
$http_host
区别:官网解释:链接
优先级:请求行的主机名[1] > 请求头字段 Host 中的主机名[2] > 与请求匹配的服务器名称[3]
主机名:
ip或域名,不包含端口;如:访问
http://www.juejin.cn:300
, 主机名就是www.juejin.cn
;访问http://192.168.1.128:8000
主机名就是192.168.1.128
请求地址中的主机名,如图请求地址为 http://localhost:81
,那么 $host
值为 localhost
如图请求头 Host
值为 localhost:81
,那 $host
值为 localhost
此时的 $host
= $server_name
, 比如 nginx 配置如下:
server { listen 81; server_name h5.juejin.cn locahost; rewrite ^/(.*) https://$http_host/$1 redirect; }
访问地址为 http://h5.juejin.cn:81
时,$server_name
值为 h5.juejin.cn
访问地址为 http://localhost:81
时,注意 $server_name
值还是为 h5.juejin.cn
请求头字段 Host 的值,既包含主机名[主机名],也包含端口
访问地址为 http://h5.juejin.cn:81
时,$http_host
值为 h5.juejin.cn:81
访问地址为 http://localhost:81
时,注意 $server_name
值还是为 h5.juejin.cn
如图请求头 Host
值为 localhost:81
,那 $http_host
值为 localhost:81
server { listen 80; server_name h5.juejin.cn; location / { if ($scheme = 'http'){ ## 永久重定向至 https ; 需要注意到底使用 $host 还是 $http_host return 301 https://$host$request_uri; ## 永久重定向至 https rewrite ^(.*) https://$server_name$1 permanent; ## 临时重定向至 https rewrite ^(.*) https://$server_name$1 permanent; rewrite ^/(.*) /test/$1 redirect; } } }