$server_name

Переменная $server_name представляет имя виртуального хоста, обслуживающего запрос. — NGINX Core (HTTP)

$server_name NGINX Core (HTTP)

Описание

Переменная $server_name в NGINX автоматически заполняется именем, указанным в server-блоке конфигурации. Она может соответствовать заголовку Host входящего запроса или быть явно задана в server-блоке. Значение $server_name зависит от того, как определён server-блок; оно может принимать разные формы — одиночное имя, подстановочный шаблон или регулярное выражение. Если запрос не совпадает ни с одним из server-блоков, определённых в конфигурации, переменная $server_name останется неустановленной. Эта переменная обычно используется для логирования, страниц ошибок и директив rewrite, позволяя серверу динамически настраивать ответы в зависимости от запрошенного хоста. При работе с несколькими именами сервера в одном server-блоке NGINX выполняет простой процесс сопоставления, отдавая приоритет точным соответствиям перед подстановочными шаблонами или регулярными выражениями. Чтобы эффективно использовать переменную $server_name, важно правильно сконфигурировать server-блок и убедиться, что он соответствует входящим запросам. К этой переменной также можно обращаться в логах для получения контекста об обрабатываемых запросах, что помогает при отладке и аналитике.

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

server {
    listen 80;
    server_name example.com www.example.com;

    location / {
        root /var/www/example;
        index index.html;
    }

    error_page 404 /404.html;
    access_log /var/log/nginx/example.access.log;
    error_log /var/log/nginx/example.error.log;
}

Подсистема

http

Кэшируется

Да

Контексты

http, server, location, if

Если для запроса не найден соответствующий server block, $server_name не будет установлено, что может привести к путанице в logs или redirects.

Избегайте использования $server_name в locations, где он может быть затронут определениями regex или wildcard в server blocks, так как результаты могут отличаться.

Помните, что наличие www или subdomains должно быть точно отражено в server_name, чтобы обеспечить правильное поведение.