Назад | Перейти на главную страницу

Могу ли я динамически установить Keep-Alive в Nginx в зависимости от ssl-соединения?

Я хотел бы избежать повторения всех блоков виртуального сервера {} в nginx только для того, чтобы иметь собственные настройки ssl, которые немного отличаются от простых HTTP-запросов.

Большинство директив ssl можно разместить прямо в основном блоке, за исключением одного препятствия, для которого я не могу найти обходного пути: другой keep-alive для https против http

Есть ли способ использовать схему $ для динамического изменения keepalive_timeout ?

Я даже подумал, что могу использовать more_set_input_headers -r 'Keep-Alive: timeout=60'; условно заменить таймаут проверки активности, только если он уже существует, но проблема в $scheme не может использоваться в location т.е. это неверно location ^https {}

Я почти уверен, что ты можешь использовать map :

map $scheme $myCustomTTL {
   default     90;
   http        90;
   https       60;
}

add_header Keep-Alive timeout=$myCustomTTL;

Как кажется, что keepalive_timeout нельзя использовать с параметрами, а только с фиксированными значениями, другим решением было бы использовать nginx в качестве конечной точки SSL.

Ваши запросы SSL будут обрабатываться специальным server{} блок, который будет управлять только подтверждением SSL и конкретным Keep-Alive значение, а затем перенаправить простой HTTP-запрос в основной server {} блок.

Ваш nginx конфигурация будет включать что-то вроде следующего:

upstream plain_http {
   server  127.0.0.1:80;
} 

server {
   listen   443;
   server_name  *.yourdomain.com;
   ssl                       on;
   ssl_certificate           /etc/nginx/ssl/mycert.pem;
   ssl_certificate_key       /etc/nginx/ssl/mykey.key;
   ssl_protocols             SSLv3 TLSv1;
   ssl_ciphers               ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM;
   ssl_prefer_server_ciphers on;

   keepalive_timeout 90;

   location / {
     proxy_pass              http://plain_http;
     proxy_redirect http:// https://;  
   }
}

В proxy_redirect директива говорит nginx перезаписать URI, найденный в Location и Refresh заголовки в обычном HTTP-ответе.