$connection

Переменная $connection возвращает номер дескриптора соединения для текущего запроса в NGINX. — NGINX Core (HTTP)

$connection NGINX Core (HTTP)

Описание

Переменная $connection — это встроенная переменная в NGINX, которая предоставляет уникальный идентификатор соединения для каждого запроса, обрабатываемого сервером. Она особенно полезна при отладке и ведении логов, позволяя администраторам отслеживать данные о соединении между несколькими запросами. Значение основано на дескрипторе сокета и является целым числом, которое меняется для каждой отдельной сессии соединения. Каждый раз, когда обрабатывается новый запрос, эта переменная устанавливается, чтобы идентифицировать используемое соединение, что помогает обнаруживать параллельные запросы от одного и того же клиента или различать разных пользователей в файле журнала. В процессе обработки запроса, когда клиент подключается к серверу NGINX, создаётся объект соединения, который содержит различную информацию, связанную с соединением, например адрес клиента, состояние соединения и другие данные. Переменная $connection напрямую коррелирует с этим объектом соединения. Поскольку каждый клиент может отправлять несколько запросов по одному соединению, эта переменная незаменима в ситуациях, где реализована логика, зависящая от соединения, например ограничение скорости, контроль доступа и кастомизированное ведение логов. Типичные значения этой переменной — целые числа, соответствующие текущим соединениям в системе, и они также могут быть связаны с запросами по мультиплексированным потокам HTTP/2, где одно и то же соединение может обслуживать несколько запросов одновременно. Обратите внимание, что поскольку NGINX использует асинхронную, событийно-ориентированную модель, один и тот же $connection будет разделяться между запросами до закрытия соединения, после чего для новых соединений будет назначен новый идентификатор.

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

server {
    listen 80;
    location / {
        access_log /var/log/nginx/access.log;
        log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$connection"';
    }
}

Подсистема

http

Кэшируется

Да

Контексты

http, server, location, if

Использование $connection в операторах if может привести к непредсказуемому поведению, поскольку переменная может неправильно оцениваться в некоторых контекстах.

При использовании $connection для логирования убедитесь, что просматриваемые записи логов корректно отформатированы для обработки соединений с несколькими значениями, таких как HTTP/2.