No Nginx, posso definir o Keep-Alive dinamicamente dependendo da conexão ssl?

1

Eu gostaria de evitar ter que repetir todos os blocos {} do servidor virtualhost no nginx apenas para ter configurações ssl personalizadas que variem um pouco das solicitações http simples.

A maioria das diretivas ssl pode ser colocada diretamente no bloco principal, exceto um obstáculo Não consigo encontrar uma solução alternativa para: keep-alive diferente para https vs http

Existe alguma maneira de usar o esquema $ para alterar dinamicamente o keepalive_timeout ?

Eu até considerei que posso usar more_set_input_headers -r 'Keep-Alive: timeout=60'; para condicionalmente substituir o tempo limite de keep-alive apenas se ele já existir, mas o problema é $scheme não pode ser usado em location ie. isso é inválido location ^https {}

    
por ck_ 27.11.2012 / 08:05

2 respostas

2

Tenho certeza de que você pode usar um map :

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

add_header Keep-Alive timeout=$myCustomTTL;
    
por 27.11.2012 / 08:46
0

Como parece que keepalive_timeout não pode ser usado com parâmetros, mas apenas com valores fixos, outra solução seria usar nginx como um ponto final SSL.

Suas solicitações SSL serão tratadas por um bloco server{} específico, que gerenciaria somente o handshake SSL e o valor Keep-Alive específico e encaminharia a solicitação HTTP simples para o bloco server {} principal.

Sua configuração nginx incluiria algo como o seguinte:

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://;  
   }
}

A diretiva proxy_redirect informa ao nginx para reescrever o URI encontrado nos cabeçalhos Location e Refresh na resposta HTTP simples.

    
por 29.11.2012 / 11:14