Ответы:
$hostпеременная модуля Core
$ хост
Эта переменная равна строке Host в заголовке запроса или имени сервера, обрабатывающего запрос, если заголовок Host недоступен.
Эта переменная может иметь значение, отличное от $ http_host, в следующих случаях: 1) если входной заголовок Host отсутствует или имеет пустое значение, $ host равно значению директивы server_name; 2) когда значение Host содержит номер порта, $ 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. Например, с server_name example.com one.example.com two.example.com;, $server_nameвсегда будет «example.com», независимо от того, какой хост указал пользователь . На самом деле, если у вас нет default_server, хост может быть чем-то совершенно другим (например, example.org).
server_nameкоторый определен в текущем блоке сервера. если у вас есть несколькоserver_names, появится только первый.