Pastikan backend Anda tidak menampilkan Set-Cookie
tajuk. Jika Nginx melihatnya, itu akan menonaktifkan caching.
Jika ini kasus Anda, opsi terbaik adalah memperbaiki backend Anda. Saat memperbaiki backend bukanlah suatu opsi, Nginx dapat diinstruksikan untuk mengabaikan Set-Cookie
tajuk
proxy_ignore_headers "Set-Cookie";
proxy_hide_header "Set-Cookie";
Lihat dokumentasinya
proxy_ignore_header
akan memastikan bahwa caching berlangsung. proxy_hide_header
akan memastikan muatan Cookie tidak termasuk dalam muatan yang di-cache. Ini penting untuk menghindari kebocoran cookie melalui cache NGINX.
Saya ingin menambahkan bahwa beberapa opsi dan kombinasi konfigurasi dapat menonaktifkan caching proxy di Nginx. Sayangnya ini tidak didokumentasikan dengan baik.
Dalam konfigurasi saya, saya menyetel proxy_buffering on
dan mengaktifkan caching seperti yang diharapkan.
setelah melalui banyak jawaban dan komentar, saya menemukan konfigurasi ini akhirnya berfungsi:
10m
=10mb
cache kunci, max_size
ke 2GB
, inactive=120m
(segarkan dari sumber setelah 120 menit tidak aktif), use_temp_path=off
(untuk mengurangi io)
proxy_cache_valid
- status cache dari 200
dan 302
selama 60 menit
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;
}
}