Nginx中$ host和$ http_host的区别是什么

时间:2013-03-14 16:25:54

标签: configuration nginx http-headers

在Nginx中,变量$host$http_host之间有什么区别。

2 个答案:

答案 0 :(得分:180)

$hostCore模块的变量。

  

$宿主

     

此变量等于请求标头中的行Host或   如果Host标头不是,则处理请求的服务器的名称   可用。

     

此变量可能与$ http_host具有不同的值   情况:1)当主机输入标头不存在或具有空值时,   $ host等于server_name指令的值; 2)当值   主机包含端口号,$ host不包含该端口号。   自0.8.17以来,$ host的值始终为小写。

$http_host也是同一模块的变量,但您找不到该名称,因为它一般定义为$http_HEADERref)。

  

$ HTTP_HEADER

     

转换为小写并将“破折号”转换为“下划线”时HTTP请求标头HEADER的值,例如$ http_user_agent,$ http_referer ...;


汇总:

  • $http_host始终等于HTTP_HOST请求标头。
  • $host等于$http_host小写且没有端口号(如果存在),除非HTTP_HOST不存在或为空值即可。在这种情况下,$host等于处理请求的服务器的server_name指令的值。

答案 1 :(得分:1)

接受的答案及其评论似乎不正确(不再)。文档 (http://nginx.org/en/docs/http/ngx_http_core_module.html#var_host) 说 $host

<块引用>

按此优先顺序:请求行中的主机名,或“Host”请求头字段中的主机名,或与请求匹配的服务器名

所以 $http_host 始终是 Host 标头字段的值。如果请求行中的主机(如果指定)与 Host 标头字段不同,它们可能会有所不同。或者如果未设置 Host 标头。

server_name 仅匹配 Host 标头字段 (http://nginx.org/en/docs/http/request_processing.html),因此 $host 可能与匹配的 server_name 不同。