在Nginx中,变量$host
和$http_host
有什么区别?
发布于 2013-03-15 00:25:54
$host
是Core模块的一个变量。
$host如果主机标头不可用,则此变量等于请求标头中的行主机或处理请求的服务器的名称。在以下情况下,此变量可以具有与$http_host不同的值: 1)当主机输入报头不存在或具有空值时,$host等于server_name指令的值;2)当主机的值包含端口号时,$host不包括该端口号。从0.8.17开始,$host的值总是小写。
$http_host
也是同一模块的一个变量,但是您找不到具有该名称的变量,因为它一般被定义为$http_HEADER
(ref)。
$http_HEADER转换为小写并将“破折号”转换为“下划线”时的HTTP请求标头的值,例如$http_user_agent,$http_referer...;
总结:
$http_host
始终等于header.$host
request 等于$http_host
,小写且不带端口号(如果存在),,除非request不存在或为空值。在这种情况下,$host
等于处理请求的服务器的server_name
指令值。发布于 2021-04-23 16:50:05
被接受的答案和它的评论似乎不再正确。文档(http://nginx.org/en/docs/http/ngx_http_core_module.html#var_host)说$host
是
按以下优先级顺序排列的
:请求行中的主机名,或“主机”请求标头字段中的主机名,或与请求匹配的服务器名
因此,$http_host
始终是Host
报头字段的值。如果请求行中的主机(如果指定)与Host
标头字段不同,它们可能会有所不同。或者如果没有设置Host
报头。
server_name
仅匹配Host
报头字段(http://nginx.org/en/docs/http/request_processing.html),因此$host
可能不同于匹配的server_name
。
https://stackoverflow.com/questions/15414810
复制相似问题