Configuration 什么';这是Nginx中$host和$http_host的区别

Configuration 什么';这是Nginx中$host和$http_host的区别,configuration,nginx,http-headers,Configuration,Nginx,Http Headers,在Nginx中,变量$host和$http\u host之间的区别是模块的变量 $host 此变量等于请求或消息头中的行主机 如果主机标头不存在,则处理请求的服务器的名称 可用 在这种情况下,此变量的值可能与$http_host不同 情况:1)当主机输入头不存在或有空值时, $host等于server_name指令的值;2) 当值 主机的端口号包含端口号,$Host不包含该端口号。 $host的值自0.8.17起始终为小写 $http_host也是同一模块的一个变量,但您找不到具有该名称的变量,

在Nginx中,变量
$host
$http\u host
之间的区别是模块的变量

$host

此变量等于请求或消息头中的行主机 如果主机标头不存在,则处理请求的服务器的名称 可用

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

$http_host
也是同一模块的一个变量,但您找不到具有该名称的变量,因为它一般定义为
$http_HEADER
()

$http_头

将HTTP请求标头转换为小写并将“破折号”转换为“下划线”时,HTTP请求标头的值,例如$HTTP_user_agent、$HTTP_referer


总结:

  • $http\u host
    始终等于
    http\u host
    请求头
  • $host
    等于
    $http\u host
    小写且不带端口号(如果存在),除非
    http\u host
    不存在或为空值
    。在这种情况下,
    $host
    等于处理请求的服务器的
    server\u name
    指令的值

    • 被接受的答案及其评论似乎不再正确。文档()说,
      $host

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

      因此,
      $http_host
      始终是
      host
      头字段的值。如果请求行(如果指定)中的主机与
      host
      头字段不同,则它们可能不同。或者如果未设置主机标题


      server\u name
      仅匹配
      Host
      标题字段(),因此
      $Host
      可能不同于匹配的
      server\u name

      $Host是当前服务器块中定义的第一个
      服务器名称。如果您有多个
      server\u name
      s,则只会显示第一个。True。事实上,这是非常典型的定义:server_name example.com www.example.com;您也可以有多个
      server\u name
      指令。如果在第一个正则表达式中碰巧有一个正则表达式,则它将成为
      $host
      ,重写规则期间可能会发生各种各样的丑恶事情。
      $server\u name
      变量是否等于
      server\u name
      指令的值,或者如果有多个
      server\u name
      指令,是否等于所选的实际服务器名称?@cmcdragokai
      $server\u name
      始终等于指定的第一个值使用server_name指令。例如,使用
      server\u name example.com one.example.com two.example.com
      $server\u name
      将始终为“example.com”,无论用户指定了哪个主机。事实上,如果您没有
      默认\u服务器
      ,那么主机可能完全不同(比如example.org)。