Saya memiliki sistem runnning nginx / php-fpm / varnish / wordpress dan amazon s3.
Sekarang saya telah melihat banyak file konfigurasi saat mengatur sistem, dan pada semuanya saya menemukan sesuatu seperti ini:
/* If the request is for pictures, javascript, css, etc */
if (req.url ~ "\.(jpg|jpeg|png|gif|css|js)$") {
/* Remove the cookie and make the request static */
unset req.http.cookie;
return (lookup);
}
Saya tidak mengerti mengapa ini dilakukan. Sebagian besar contoh juga menjalankan NginX sebagai server web. Sekarang pertanyaannya adalah, mengapa Anda menggunakan cache pernis untuk melakukan cache file statis ini.
Lebih masuk akal bagi saya untuk hanya men-cache file dinamis sehingga php-fpm / mysql tidak terkena sebanyak itu.
Apakah saya benar atau saya kehilangan sesuatu di sini?
MEMPERBARUI
Saya ingin menambahkan beberapa info ke pertanyaan berdasarkan jawaban yang diberikan.
Jika Anda memiliki situs web yang dinamis, di mana kontennya benar-benar banyak berubah, chaching tidak masuk akal. Tetapi jika Anda menggunakan WordPress untuk situs web statis misalnya, ini bisa di-cache untuk jangka waktu yang lama.
Yang mengatakan, yang lebih penting bagi saya adalah static conent . Saya telah menemukan tautan dengan beberapa pengujian dan benchmark pada berbagai aplikasi cache dan aplikasi server web.
http://nbonvin.wordpress.com/2011/03/14/apache-vs-nginx-vs-varnish-vs-gwan/
NginX sebenarnya lebih cepat dalam mendapatkan konten statis Anda, jadi lebih masuk akal untuk membiarkannya berlalu. NginX bekerja sangat baik dengan file statis.
-
Selain itu, sebagian besar waktu konten statis bahkan tidak ada di server web itu sendiri. Sebagian besar waktu konten ini disimpan di CDN di suatu tempat, mungkin AWS S3, sesuatu seperti itu. Saya pikir cache pernis adalah tempat terakhir di mana Anda ingin Anda menyimpan konten statis.
sumber
if (req.url ~ "\.(png|gif|jp(e?)g|avi|flv|mp(e?)g|mp4|mp3)"){return(pass);}
di vcl_recv (). Pada dasarnya, saya tidak ingin men-cache media - tapi tentu saja ingin me-cache html (php) dan bahkan js / css (teori adalah bahwa gambar berkontribusi lebih sedikit terhadap waktu buka halaman yang dirasakan daripada tata letak).Saya pikir Anda mungkin kehilangan sesuatu.
Menurut definisi, file dinamis berubah. Biasanya, mereka berubah dengan melakukan semacam permintaan basis data yang memengaruhi konten halaman yang dilayani hingga ke pengguna. Karena itu, Anda tidak ingin melakukan cache konten dinamis. Jika Anda melakukannya, itu hanya menjadi konten statis dan kemungkinan besar konten statis dengan konten yang salah.
Sebagai contoh sederhana, katakanlah Anda memiliki halaman dengan nama pengguna pengguna yang masuk di bagian atas halaman. Setiap kali halaman dimuat, kueri basis data dijalankan untuk menentukan nama pengguna apa yang dimiliki oleh pengguna yang masuk yang meminta halaman yang memastikan bahwa nama yang tepat ditampilkan. Jika Anda melakukan cache halaman ini, maka permintaan basis data tidak akan terjadi dan semua pengguna akan melihat nama pengguna yang sama di bagian atas halaman dan kemungkinan itu bukan nama pengguna mereka. Anda memerlukan kueri untuk terjadi pada setiap pemuatan halaman untuk memastikan bahwa nama pengguna yang tepat ditampilkan untuk setiap pengguna. Karena itu tidak dapat di-cache.
Perluas logika itu ke sesuatu yang sedikit lebih bermasalah seperti izin pengguna dan Anda dapat melihat mengapa konten dinamis tidak perlu di-cache. Jika database tidak mengenai konten dinamis, CMS tidak memiliki cara untuk menentukan apakah pengguna yang meminta halaman memiliki izin untuk melihat halaman itu.
Konten statis, menurut definisi, sama untuk semua pengguna. Oleh karena itu, tidak ada permintaan basis data yang perlu dilakukan untuk mengkustomisasi halaman tersebut untuk setiap pengguna sehingga masuk akal untuk melakukan cache untuk menghilangkan permintaan basis data yang tidak perlu. Gambar adalah contoh konten statis yang sangat bagus - Anda ingin semua pengguna melihat gambar header yang sama, tombol login yang sama, dll, sehingga mereka adalah kandidat yang sangat baik untuk melakukan caching.
Dalam cuplikan kode Anda di atas, Anda melihat cuplikan VCL yang sangat khas yang memaksa gambar, css, dan javascript di-cache. Secara default, Varnish tidak akan men-cache permintaan apa pun dengan cookie di dalamnya. Logikanya adalah bahwa jika ada cookie dalam permintaan, maka harus ada beberapa alasan server membutuhkan cookie sehingga diperlukan di bagian belakang dan harus melewati cache. Pada kenyataannya, banyak CMS (Drupal, Wordpress, dll) melampirkan cookie ke hampir semua hal, baik itu diperlukan atau tidak sehingga sangat umum untuk menulis VCL untuk menghapus cookie dari konten yang dikenal sebagai statis yang pada gilirannya menyebabkan Varnish melakukan cache Itu.
Masuk akal?
sumber
Untuk konten dinamis , beberapa jenis seperti harga saham sebenarnya sering berubah (diperbarui setiap detik pada
SaaS server
dari daribackend server
) tetapi mungkin lebih sering ditanyakan (oleh puluhan ribusubscription clients
):Dalam hal ini, caching pada
SaaS server
pembaruan per-detik daribackend servers
memungkinkan untuk memenuhi permintaan puluhan ribusubscription users
.Tanpa cache pada server SaaS maka model ini tidak akan berfungsi.
sumber
Caching file statis dengan Varnish akan mendapat manfaat dalam hal membongkar Nginx. Tentu saja, jika Anda memiliki banyak file statis untuk di-cache, itu akan membuang-buang RAM. Namun, Varnish memiliki fitur yang bagus - mendukung banyak penyimpanan backend untuk cache-nya.
Untuk file statis: cache ke HDD Untuk yang lainnya: cache ke RAM.
Ini akan memberi Anda lebih banyak wawasan tentang bagaimana menerapkan skenario ini: http://www.getpagespeed.com/server-setup/varnish-static-files-cache
sumber