プレーンなhttpリクエストとは少し異なるカスタムSSL設定を行うためだけに、nginxですべての仮想ホストサーバー{}ブロックを繰り返す必要はありません。
ほとんどのsslディレクティブは、回避策を見つけることができない1つのハードルを除いて、メインブロックに直接配置できます。https
とhttp
の異なるキープアライブ
$ schemeを使用して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
ディレクティブは、プレーンHTTP応答のnginx
およびLocation
ヘッダーにあるURIを書き換えるようにRefresh
に指示します。