Яка різниця $ хост і $ http_host в Nginx


Відповіді:


217

$hostє змінною модуля Core .

$ хост

Ця змінна дорівнює рядку Host у заголовку запиту або імені сервера, що обробляє запит, якщо заголовок хоста недоступний.

Ця змінна може мати інше значення, ніж $ http_host у таких випадках: 1) коли заголовок вводу хоста відсутній або має порожнє значення, $ хост дорівнює значенню директиви_імен_сервера; 2) коли значення Host містить номер порту, $ host не включає цей номер порту. Значення $ хост завжди є малим з 0,8,17.

$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директиви сервера, який обробив запит.

57
$ host - це конкретно перше,server_name що визначено в поточному блоці сервера. якщо у вас кілька server_names, з’явиться лише перший.
Джонатан Ванаско

4
Правда. Насправді, досить типово визначати: ім'я_сервера example.com www.example.com;
glarrain

Ви також можете мати кілька server_nameдиректив. якщо у вас трапляється регулярний вираз в першому, він стає тим $host, і під час перезапису правил можуть траплятися всілякі некрасиві речі.
Джонатан Ванаско

5
Чи відповідає $server_nameзмінна значенню server_nameдирективи або фактичному імені сервера, вибраному, якщо було декілька server_nameдиректив?
CMCDragonkai

1
@CMCDragonkai $server_nameзавжди дорівнює першому значенню, вказаному в директиві ім'я_сервера. Наприклад, з server_name example.com one.example.com two.example.com;, $server_nameзавжди буде "example.com", незалежно від того, який хост вказав користувач . Насправді, якщо у вас немає default_server, хост може бути чимось зовсім іншим (наприклад, example.org).
ATLief
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.