在 Nginx 中,我可以根据 ssl 连接动态设置 Keep-Alive 吗?

在 Nginx 中,我可以根据 ssl 连接动态设置 Keep-Alive 吗?

我想避免在 nginx 中重复所有的 virtualhost server {} 块,只是为了拥有与普通 http 请求略有不同的自定义 ssl 设置。

大多数 SSL 指令都可以放在主块中,但有一个障碍我无法找到解决方法:httpsSSL 和 SSL的 keep-alive 不同。http

有什么方法可以使用 $scheme 来动态更改keepalive_timeout

我甚至考虑过,more_set_input_headers -r 'Keep-Alive: timeout=60'; 只有在保持活动超时已经存在的情况下,我才可以使用它来有条件地替换它,但问题是它不能在ie$scheme中使用。这是无效的locationlocation ^https {}

答案1

我很确定你可以使用map

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

add_header Keep-Alive timeout=$myCustomTTL;

答案2

由于它似乎keepalive_timeout不能与参数一起使用而只能与固定值一起使用,因此另一种解决方案是用作nginxSSL 端点。

您的 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指令告诉重写在纯 HTTP 响应中nginx找到的 URILocation和标头。Refresh

相关内容