$ssl_alpn_protocol
Переменная $ssl_alpn_protocol содержит протокол согласования прикладного уровня (ALPN), выбранный во время TLS-рукопожатия. — NGINX Core (HTTP)
Описание
Переменная $ssl_alpn_protocol характерна для конфигураций, которые используют HTTP/2 или другие протоколы, применяющие ALPN во время TLS-рукопожатия. Эта переменная устанавливается при установлении соединения по HTTPS и позволяет серверу определить, какой протокол прикладного уровня был выбран клиентом. Она особенно полезна для серверов, реализующих вариативность протоколов в сервисе, например при предоставлении контента как по HTTP/1.1, так и по HTTP/2, в зависимости от возможностей клиента. Значение этой переменной может быть названием протокола, например 'h2' для HTTP/2 или 'http/1.1', обозначающим согласованный протокол. Эта переменная особенно важна для оптимизации производительности, поскольку позволяет серверу отвечать на запросы клиента с использованием наиболее подходящего протокола, поддерживаемого клиентом согласно списку ALPN. Когда клиент инициирует TLS-рукопожатие, он может предлагать несколько протоколов, а сервер выбирает наиболее подходящий для этой сессии. Если клиент не поддерживает ни один из протоколов, предлагаемых сервером, переменная останется неустановленной, и обычно происходит откат к протоколу по умолчанию, часто HTTP/1.1. Механизм согласования повышает совместимость и производительность различных реализаций клиентов.
Пример конфига
server {
listen 443 ssl;
ssl_certificate /path/to/certificate.crt;
ssl_certificate_key /path/to/private.key;
# Using the variable in a log format to capture the negotiated protocol
access_log /var/log/nginx/access.log custom_format;
location / {
if ($ssl_alpn_protocol = 'h2') {
# Perform actions specific to HTTP/2
}
# Other processing...
}
}
log_format custom_format '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" Protocol: $ssl_alpn_protocol';Подсистема
httpКэшируется
ДаКонтексты
http, server, location, ifУбедитесь, что ваш сервер настроен на обработку протоколов, поддерживающих ALPN. Если настройка выполнена неправильно, $ssl_alpn_protocol может вернуть пустое значение.
Используйте переменную только при включённом SSL/TLS, так как она не будет задана для non-TLS соединений.
Будьте осторожны при использовании совместно с правилами перенаправления, поскольку некоторые конфигурации могут непреднамеренно изменить получаемый протокол.