proxy_ssl_server_name
Директива `proxy_ssl_server_name` включает SNI для проксируемых запросов, позволяя NGINX отправлять имя сервера в SSL handshake.
Описание
Директива proxy_ssl_server_name управляет тем, включается ли поле Server Name Indication (SNI) в SSL/TLS requests, которые NGINX проксирует на другой сервер. Когда установлено в on, NGINX включает имя хоста из заголовка Host в SSL handshake, что важно для серверов, использующих несколько SSL-сертификатов для разных имён хостов на одном и том же IP-адресе. Это особенно актуально в сценариях, когда несколько доменов размещены на одном сервере с общими IP-адресами; правильный сертификат может быть выбран на основе информации SNI, предоставленной клиентом.
Директиву можно использовать в нескольких контекстах: блоках http, server и location, и она ожидает один аргумент — флаг. Установка директивы в on включает SNI, установка в off отключает его. По умолчанию директива установлена в off, то есть SNI не будет использоваться, если явно не включён. Важно отметить, что если сервер бэкенда не поддерживает SNI, правильный сертификат может не быть подан, что потенциально приведёт к ошибкам SSL-подключения.
Эта директива особенно полезна при работе с несколькими SSL-сертификатами на сервере бэкенда, поскольку она позволяет NGINX динамически выбирать соответствующий сертификат на основе запрошенного имени хоста, тем самым обеспечивая правильную SSL termination и повышая общую безопасность проксируемых соединений.
Пример конфига
location /api {
proxy_pass https://backend.example.com;
proxy_ssl_server_name on;
}Убедитесь, что сервер бэкенда поддерживает SNI; в противном случае установка этой директивы в 'on' может привести к ошибкам SSL.
Проксирование на устаревший сервер, который некорректно обрабатывает SNI, может вызвать проблемы, если эта директива включена.