Nginx プロキシキャッシュでクッキーがついていてもキャッシュするには


なにが危険か

Nginx のプロキシキャッシュで、レスポンスにクッキーが含まれていてキャッシュされない場合、

proxy_ignore_headers Set-Cookie;

を設定すればよい、というような説明が多く見られるのですが、これはプロキシキャッシュに Set-Cookie ヘッダを無視させる設定ではありません

これは見た目に反して、クッキー込みでキャッシュする設定です。

キャッシュにより、他人のクッキーが漏れます。例えばセッション ID が漏洩します。

対策

proxy_hide_header Set-Cookie; を一緒に指定します。

proxy_ignore_headers Set-Cookie;
proxy_hide_header Set-Cookie;

参考記事

なかなかにヤバい話だと思うんですが、あまり記事が見つかりません。

に、元の回答者とは別の方が後から追記しています。

This is important to avoid leaking cookies via the NGINX cache.

なぜこんなことになっているのか?

proxy_ignore_headers は、レスポンスヘッダの処理を止めるディレクティブです。

例えば、レスポンスの Cache-Control ヘッダを無視するために使います。

レスポンスに Set-Cookie ヘッダがついている場合、デフォルトだと「キャッシュを止める」という処理を行います。

この処理を無効にする、つまりSet-Cookie がついていてもキャッシュする」のが、proxy_ignore_headers Set-Cookie; の効果です。

でも、この字面から受け取れる意味は、どう見ても Set-Cookie ヘッダを無視するというものです。Nginx は、Set-Cookie ヘッダ用に別のディレクティブを作るべきなのでは、と思います。