web-dev-qa-db-ja.com

Nginxで、SSL接続に応じてキープアライブを動的に設定できますか?

プレーンなhttpリクエストとは少し異なるカスタムSSL設定を行うためだけに、nginxですべての仮想ホストサーバー{}ブロックを繰り返す必要はありません。

ほとんどのsslディレクティブは、回避策を見つけることができない1つのハードルを除いて、メインブロックに直接配置できます。httpshttpの異なるキープアライブ

$ schemeを使用してkeepalive_timeoutを動的に変更する方法はありますか?

キープアライブタイムアウトがすでに存在する場合にのみ、more_set_input_headers -r 'Keep-Alive: timeout=60';を使用して条件付きで置き換えることができると考えましたが、問題は$schemelocationで使用できないことです。これは無効ですlocation ^https {}

1
ck_

map を使用できると確信しています:

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

add_header Keep-Alive timeout=$myCustomTTL;
2

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ディレクティブは、プレーンHTTP応答のnginxおよびLocationヘッダーにあるURIを書き換えるようにRefreshに指示します。

0