SSLアクセラレータ(reverse proxy)配下のnginxのcache_key

SSLアクセラレータ配下のnginxで
http、httpsで個別のキャッシュにしたいときに、
この設定をいれると、一見$schemeでhttp/httpsに振り分けられて
出来そうに見えますが、このままだと同じキャッシュになります。

proxy_cache_key "$scheme://$host$request_uri";

fastcgi_cache_key
uwsgi_cache_key
も同様

nginxに復号された状態でrequestがくるのでssl用のvirtualhostの
$schemeの中身はhttpになっています。

回避するには明示的にcache_keyにhttpsと指定する必要あり。

  • http
proxy_cache_key "$scheme://$host$request_uri";
proxy_cache_key "https://$host$request_uri";

もしくはcache用の変数を1個かまして、proxy_cache_key は同じ設定にする。
($schemeは元から定義されている変数なので別に用意)

  • http
set $cache_scheme "http";
proxy_cache_key "$cache_scheme://$host$request_uri";
set $cache_scheme "https";
proxy_cache_key "$cache_scheme://$host$request_uri";