В Nginx я могу установить Keep-Alive динамически в зависимости от соединения ssl?
Я хотел бы избежать повторения всех блоков virtualhost server {} в nginx, просто чтобы иметь пользовательские настройки ssl, которые немного отличаются от простых запросов http.
Большинство директив ssl могут быть размещены прямо в главном блоке, за исключением одного препятствия, для которого я не могу найти обходной путь: разные keep-alive для https против http
Есть ли способ использовать $ схема для динамического изменения keepalive_timeout?
Я даже подумал, что я могу использовать more_set_input_headers -r 'Keep-Alive: timeout=60'; условно заменить тайм-аут активности, только если он уже существует, но проблема заключается в $scheme не может быть использован в location то есть. это неверно location ^https {}
2 ответа
Я уверен, что вы можете использовать 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.