$host

Переменная $host в NGINX содержит имя хоста из HTTP-заголовка запроса или имя сервера, определённое в конфигурации. — NGINX Core (HTTP)

$host NGINX Core (HTTP)

Описание

Переменная $host имеет ключевое значение для обработки входящих запросов, поскольку она напрямую извлекает имя хоста либо из Host request header, либо из соответствующего имени сервера, определённого в конфигурации NGINX. Когда поступает запрос, NGINX проверяет заголовок Host; если он присутствует, значение этого заголовка используется для установки переменной $host. Если заголовок отсутствует, NGINX возвращается к использованию имени сервера, настроенного в server block, который обработал запрос. Это поведение позволяет NGINX корректно отвечать на запросы, адресованные разным доменам или поддоменам, которые указывают на один и тот же экземпляр сервера. Этой переменной обычно присваиваются значения, соответствующие доменным именам или IP-адресам, к которым обращаются клиенты. Например, если пользователь запрашивает "http://example.com/path", переменная $host будет содержать "example.com". Если в запросе не указан hostname и в server block определён default server, $host будет хранить имя этого сервера. Важно отметить, что если NGINX настроен с несколькими server blocks для разных hostnames, значение $host может быть критичным для маршрутизации запросов в правильный блок на основе входящего URL. Переменная $host также может вести себя по-разному в зависимости от наличия директивы server_name. Если настроенные имена серверов для server block включают wildcards или regex, фактическое значение $host может зависеть от конкретного совпадения, найденного в процессе обработки запроса. Это обеспечивает корректную обработку запросов на основе конкретных hostnames, позволяя реализовывать мультиарендные конфигурации на одном экземпляре сервера NGINX.

Пример конфига

server {
    listen 80;
    server_name example.com;

    location / {
        return 200 "Host is: $host";
    }
}

Подсистема

http

Кэшируется

Да

Контексты

http, server, location, if

Если заголовок Host не отправляется клиентом, переменная $host может вести себя не так, как ожидалось, что может повлиять на маршрутизацию.

Убедитесь, что серверный блок с желаемым server_name настроен правильно, иначе вы можете получить неожиданные значения для $host.