server_name_in_redirect

Директива server_name_in_redirect управляет тем, будет ли имя сервера включено в перенаправления. — NGINX HTTP Core

server_name_in_redirect
httpserverlocation
Синтаксисserver_name_in_redirect on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core
Аргументыflag

Описание

Директива server_name_in_redirect при включении изменяет поведение NGINX при формировании перенаправлений (например, ответов HTTP 301 или 302) для запросов, обрабатываемых сервером. Конкретно она определяет, будут ли URL перенаправлений включать `server_name`, указанный в конфигурации блока server. По умолчанию при перенаправлении NGINX может использовать заголовок `Host` из запроса для построения URL перенаправления, но включение этой директивы принудительно заставляет NGINX использовать вместо этого `server_name`. Эта директива особенно полезна в случаях, когда сервер NGINX обслуживает несколько доменных имён (т.е. виртуальные хосты) и вы хотите, чтобы перенаправления всегда отражали один конкретный домен. Например, если запрос приходит на `example.com`, но вы настроены перенаправлять на `www.example.com`, установка `server_name_in_redirect` в `on` гарантирует, что все перенаправления последовательно будут использовать `www.example.com`. Директива принимает флаг: значение может быть `on` для включения поведения или `off` для его отключения, что позволяет легко и гибко настраивать её в разных контекстах, таких как http, server и location блоки.

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

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

    location / {
        return 301 https://www.example.com$request_uri;
    }
}

Отсутствие установки этой директивы в соответствующем контексте может привести к непоследовательному поведению перенаправлений.

Если вы используете несколько серверных блоков, убедитесь, что в каждом задан правильный `server_name`, чтобы избежать неожиданных результатов.