Saya mendengar baru-baru ini bahwa Nginx telah menambahkan caching ke fitur proxy terbalik. Saya melihat sekeliling tetapi tidak menemukan banyak info tentang itu.
Saya ingin mengatur Nginx sebagai caching reverse proxy di depan Apache / Django: untuk memiliki permintaan proxy Nginx untuk beberapa (tetapi tidak semua) halaman dinamis ke Apache, kemudian cache halaman yang dihasilkan dan melayani permintaan berikutnya untuk halaman tersebut dari cache.
Idealnya saya ingin membatalkan cache dengan 2 cara:
- Tetapkan tanggal kedaluwarsa pada item yang di-cache
- Untuk secara eksplisit membatalkan item yang di-cache. Misalnya jika backend Django saya telah memperbarui data tertentu, saya ingin memberitahu Nginx untuk membatalkan cache dari halaman yang terpengaruh
Apakah mungkin untuk mengatur Nginx untuk melakukan itu? Bagaimana?
proxy
nginx
reverse-proxy
varnish
Kelanjutan
sumber
sumber
Jawaban:
Saya tidak berpikir bahwa ada cara untuk secara eksplisit membatalkan item yang di-cache, tetapi di sini adalah contoh bagaimana melakukan sisanya. Pembaruan: Seperti yang disebutkan oleh Piotr dalam jawaban lain, ada modul pembersih cache yang bisa Anda gunakan. Anda juga dapat memaksa penyegaran item yang di-cache menggunakan proxy_cache_bypass dari nginx - lihat jawaban Cherian untuk informasi lebih lanjut.
Dalam konfigurasi ini, item yang tidak di-cache akan diambil dari example.net dan disimpan. Versi yang di-cache akan disajikan hingga klien masa depan hingga tidak lagi valid (60 menit).
Kontrol Cache dan Kedaluwarsa HTTP header Anda akan dihormati, jadi jika Anda ingin secara eksplisit menetapkan tanggal kedaluwarsa, Anda dapat melakukannya dengan mengatur header yang benar dalam apa pun yang Anda proksi.
Ada banyak parameter yang dapat Anda sesuaikan - lihat dokumentasi modul Proxy nginx untuk informasi lebih lanjut tentang semua ini termasuk rincian tentang arti pengaturan / parameter yang berbeda: http://nginx.org/r/proxy_cache_path
sumber
inactive=600m
maksud dari: Bukankahinactive
seharusnya waktu? `[inactive=time]
Anda dapat secara khusus membatalkan halaman tembolok
Katakanlah Anda ingin me-cache halaman, atur cache dengan cara ini
Sekarang, ketika Anda ingin membatalkan halaman itu dan cache lagi
Lakukan panggilan ikal rahasia dengan tajuk
Ini akan membatalkan dan menyimpannya.
Bekerja dari nginx 0.7.
Sebagai bonus tambahan,
add_header X-Cache-Status
dapat digunakan untuk memeriksa apakah halaman tersebut dari cache atau tidak.sumber
Saya sarankan Anda mencoba Varnish . Varnish dirancang khusus sebagai cache proksi terbalik. Ini akan menghormati semua header kontrol cache yang Anda kirim dari server asal, yang memenuhi permintaan pertama Anda.
Untuk permintaan kedua Anda, pembatalan eksplisit. Rekomendasi kuat saya adalah untuk mengubah nama url dari sumber daya yang ingin Anda batalkan, baik dengan mengganti nama file atau menggunakan beberapa bentuk buster cache string kueri. Varnish memang memiliki
PURGE
operasi yang akan menghapus sumber daya dari cache Varnish, tetapi tidak akan memberi Anda kontrol atas cache lain antara Anda dan pengguna. Seperti yang Anda katakan ingin menghapus sumber daya secara eksplisit, maka header kontrol http standar tidak akan membantu Anda. Dalam kasus itu, cara yang paling mudah untuk mengalahkan caching sumber daya adalah dengan mengganti namanya.sumber
style.v123.css
karena beberapa cache tidak akan menembolok permintaan yang memiliki string kueri.Untuk membatalkan halaman yang dipilih, Anda dapat menggunakan patch "cache_purge" untuk nginx-0.8.x yang memang sesuai dengan yang Anda inginkan;)
Ini tersedia di sini .
sumber
Sebagian besar alat cache (Citrix) memungkinkan pemuatan paksa (Ctrl + r) untuk mengisi kembali halaman yang di-cache.
Inilah trik yang saya temukan untuk melakukan hal serupa di nginx.
Ini mengasumsikan bahwa ketika Anda melakukan Ctrl + r di browser Anda, header Cache-Control memiliki max-age = 0 dalam permintaannya. Saya tahu Chrome melakukan ini, tetapi saya belum mencoba di peramban lain. Menambahkan lebih banyak bidang tajuk bisa mudah, hanya dengan menambahkan lebih banyak jika pernyataan yang mengatur
$eac
variabel menjadi 1.sumber
Caching adalah fungsi yang cukup baru di nginx (dan belum didokumentasikan dengan baik untuk saat ini), tetapi cukup stabil untuk digunakan dalam produksi.
Gunakan dokumentasi bahasa Inggris
Tanya di milis
Terjemahkan dokumentasi Rusia dengan sesuatu seperti Google Translate
Gunakan pernis
sumber
Saya percaya NginxHttpProxyModule mampu membuat permintaan http caheing. Cari arahan yang dimulai dengan:
Ya, adalah mungkin untuk mengontrol perilaku cache melalui arahan seperti:
sumber
Berdasarkan fakta bahwa Anda tidak dapat menemukan dokumen di atasnya, saya akan sedikit khawatir tentang mengandalkannya dalam produksi. Sudahkah Anda mempertimbangkan Varnish? Ini adalah "nginx of reverse proxies" saya, kecil, ringan, melakukan satu pekerjaan dan melakukannya dengan baik.
sumber
Jika Anda menggunakan eTag pada aplikasi Anda dan meletakkan nginx di depannya maka itu akan menyelesaikan masa berlaku Anda, karena jika eTag berubah maka akan membatalkan cache.
sumber
Anda dapat mengontrol kedaluwarsa cache Nginx dengan beberapa arahan / parameter:
proxy_cache_valid 200 302 10m;
Expires
Cache-Control
X-Accel-Expires
yang
inactive
parameter dalamproxy_cache_path
direktif:proxy_cache_path /data/nginx/cache keys_zone=one:10m inactive=60m;
Saya merekomendasikan posting blog saya jika Anda ingin mempelajari lebih lanjut tentang caching Nginx.
Topik pembersihan sangat menarik karena fitur ini hanya ada di Nginx Plus (edisi komersial Nginx). Saya sangat suka jawaban @ randy-wallace. Tetapi ada juga kemungkinan lain seperti modul ngx_cache_purge .
Hal paling sederhana yang dapat Anda lakukan adalah menghapus file cache secara manual:
buat kunci hash Anda:
hapus file dari sistem file:
sumber
Untuk pengunjung masa depan: Sementara itu proksi nginx reverse memiliki caching terintegrasi dan dokumen tersedia di:
sumber
Ini menciptakan cache untuk / img / lokasi. Itu ada di / opt / nginx-cache. Objek di-cache selama 1 menit.
Anda dapat menulis kode respons yang berbeda.
Sekarang Anda tidak dapat membatalkan cache untuk halaman yang dipilih. Mungkin dalam 0.8.x itu akan mungkin.
sumber
Ada plugin nginx bernama ncache yang mengklaim sebagai "sistem cache web berbasis server web nginx. Lebih cepat dan lebih efisien daripada squid."
sumber