Відповіді:
$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директиви сервера, який обробив запит.server_nameдиректив. якщо у вас трапляється регулярний вираз в першому, він стає тим $host, і під час перезапису правил можуть траплятися всілякі некрасиві речі.
$server_nameзмінна значенню server_nameдирективи або фактичному імені сервера, вибраному, якщо було декілька server_nameдиректив?
$server_nameзавжди дорівнює першому значенню, вказаному в директиві ім'я_сервера. Наприклад, з server_name example.com one.example.com two.example.com;, $server_nameзавжди буде "example.com", незалежно від того, який хост вказав користувач . Насправді, якщо у вас немає default_server, хост може бути чимось зовсім іншим (наприклад, example.org).
server_nameщо визначено в поточному блоці сервера. якщо у вас кількаserver_names, з’явиться лише перший.