バックエンドが Set-Cookie
を返さないことを確認してください ヘッダ。 Nginx がそれを認識した場合、キャッシングを無効にします。
このような場合、最善の選択肢はバックエンドを修正することです。バックエンドを修正できない場合は、Nginx に Set-Cookie
を無視するように指示することができます。 ヘッダー
proxy_ignore_headers "Set-Cookie";
proxy_hide_header "Set-Cookie";
ドキュメントを見る
proxy_ignore_header
キャッシュが確実に行われるようにします。 proxy_hide_header
Cookie ペイロードがキャッシュされたペイロードに含まれないようにします。これは、NGINX キャッシュを介した Cookie のリークを避けるために重要です。
複数の構成オプションと組み合わせにより、Nginx でプロキシ キャッシングを無効にできることを追加したいと思います。残念ながら、これは十分に文書化されていません。
私の構成では、 proxy_buffering on
を設定しました 期待どおりにキャッシュが有効になりました。
複数の回答とコメントを確認した後、この構成が最終的に機能することがわかりました:
10m
=10mb
キーキャッシュ、max_size
2GB
へ 、 inactive=120m
(非アクティブの 120 分後にソースから更新)、use_temp_path=off
(ioを減らすため)
proxy_cache_valid
- 200
のキャッシュ ステータス と 302
60分間
proxy_cache_path /tmp/cache levels=1:2 keys_zone=default_cache:10m max_size=2g
inactive=120m use_temp_path=off;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_cache_valid 200 302 60m;
server {
listen 80;
server_name example.com;
# https://www.nginx.com/blog/nginx-caching-guide
location / {
proxy_cache default_cache;
proxy_buffering on;
proxy_ignore_headers Expires;
proxy_ignore_headers X-Accel-Expires;
proxy_ignore_headers Cache-Control;
proxy_ignore_headers Set-Cookie;
proxy_hide_header X-Accel-Expires;
proxy_hide_header Expires;
proxy_hide_header Cache-Control;
proxy_hide_header Pragma;
add_header X-Proxy-Cache $upstream_cache_status;
proxy_pass http://ip-of-host:80;
#set $memcached_key "$uri?$args";
#memcached_pass 127.0.0.1:11211;
# error_page 404 502 504 = @fallback;
}
}