206

在 Nginx 中,变量$host$http_host.

4

2 回答 2

256

$host核心模块的变量。

$主机

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

在这种情况下,此变量可能与 $http_host 具有不同的值: 1)当 Host 输入标头不存在或具有空值时,$host 等于 server_name 指令的值;2)当 Host 的值包含端口号时,$host 不包含该端口号。从 0.8.17 开始,$host 的值总是小写。

$http_host也是同一个模块的一个变量,但你不会用那个名字找到它,因为它通常被定义为$http_HEADER( ref )。

$http_HEADER

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


总结:

  • $http_host始终等于HTTP_HOST请求标头。
  • $host等于$http_host小写且不带端口号(如果存在),除非HTTP_HOST不存在或为空值。在这种情况下,$host等于server_name处理请求的服务器的指令的值。
于 2013-03-14T16:25:54.447 回答
11

接受的答案及其评论似乎不正确(不再)。文档(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.

于 2021-04-23T08:50:05.273 回答