$server_port

Переменная $server_port возвращает номер порта, на котором был получен текущий запрос. — NGINX Core (HTTP)

$server_port NGINX Core (HTTP)

Описание

Переменная $server_port в NGINX динамически устанавливается во время обработки запроса и отражает порт, на котором сервер прослушивает входящие соединения. Она особенно полезна при настройке ответов, которые могут различаться в зависимости от номера порта, например при включении определённых заголовков ответа или применении правил брандмауэра. Переменная учитывает как порт, указанный в конфигурации, так и порт, использованный клиентом для инициирования запроса, что обеспечивает ясность в конфигурациях с несколькими портами. Эта переменная обычно устанавливается при определении блока server в файле конфигурации NGINX. Например, если блок server настроен на прослушивание порта 80, любые запросы, поступающие на этот порт, установят значение переменной $server_port равным 80. Напротив, если блок server прослушивает альтернативный порт, например 443 (обычно используемый для HTTPS), переменная отразит это значение. Благодаря этому $server_port является необходимой при создании конфигураций, которые полагаются на различение, например, трафика HTTP и HTTPS, а также при управлении приложениями, работающими на нестандартных портах. Типичные значения $server_port включают 80 для HTTP, 443 для HTTPS или любой другой пользовательский порт. Переменная не включает протокол (HTTP/HTTPS), а фокусируется исключительно на номере порта, обеспечивая гибкость и точность для различных конфигураций сервера.

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

server {
    listen 80;
    server_name example.com;

    location / {
        add_header X-Server-Port "$server_port";
    }
}

Подсистема

http

Кэшируется

Да

Контексты

http, server, location, if

Имейте в виду, что значение $server_port определяется во время выполнения, поэтому оно может отличаться от настроенного порта прослушивания, если при проксировании или перенаправлении используется другой порт.

Если NGINX находится за балансировщиком нагрузки или прокси, который изменяет порт, $server_port будет отражать порт, на котором NGINX получает запрос, а не внешний порт.