Cara Cache Kandungan di Nginx

Cara Cache Kandungan di Nginx

Nginx Menjadi pelayan web sumber terbuka yang disatukan, berprestasi tinggi yang mempercepat kandungan dan penghantaran aplikasi, meningkatkan keselamatan, dan meningkatkan skalabiliti. Salah satu kes penggunaan yang paling biasa Nginx ialah Kandungan caching, yang merupakan cara paling berkesan untuk meningkatkan prestasi laman web.

Baca juga: 10 alat caching sumber terbuka atas untuk linux

Anda boleh menggunakan Nginx untuk mempercepat pelayan asal tempatan dengan mengkonfigurasinya ke respons cache dari pelayan hulu dan juga untuk membuat pelayan tepi untuk rangkaian penghantaran kandungan (CDNS). Nginx Kuasa Beberapa CDN Terbesar.

Apabila dikonfigurasikan sebagai cache, nginx akan:

  • kandungan statik dan dinamik cache.
  • meningkatkan prestasi kandungan dinamik dengan caching mikro.
  • Hidangkan kandungan basi semasa merevalidasi di latar belakang untuk prestasi yang lebih baik.
  • mengatasi atau menetapkan tajuk kawalan cache, dan banyak lagi.

Dalam artikel ini, anda akan belajar cara mengkonfigurasi Nginx sebagai Kandungan caching di Linux untuk menjadikan pelayan web anda berjalan dengan cekap yang mungkin.

Prasyarat:

Anda mesti ada Nginx Dipasang pada pelayan Linux anda, jika tidak ikuti panduan ini untuk memasang nginx:

  • Cara Memasang Nginx pada CentOS 8
  • Cara Memasang Nginx pada CentOS 7

Kandungan statik cache pada nginx

Kandungan statik adalah kandungan laman web yang tetap sama (tidak berubah) di halaman. Contoh kandungan statik termasuk fail seperti imej, video, dokumen; Fail CSS, dan fail JavaScript.

Sekiranya laman web anda menggunakan banyak kandungan statik, maka anda dapat mengoptimumkan prestasinya dengan membolehkan klien klien di mana penyemak imbas menyimpan salinan kandungan statik untuk akses yang lebih cepat.

Konfigurasi sampel berikut adalah baik, hanya ganti www.Contoh.com dengan url nama laman web anda dan buat pengubahsuaian ke nama laluan lain yang sesuai.

pelayan  # Gantikan URL pelayan web anda untuk www.Contoh.com server_name www.Contoh.com; root/var/www/Contoh.com/htdocs; Indeks indeks.PHP; akses_log/var/log/nginx/Contoh.com.akses.log; error_log/var/log/nginx/Contoh.com.ralat.log; lokasi / try_files $ uri $ uri / / indeks.php?$ args;  lokasi ~ .php $ try_files $ uri = 404; termasuk fastcgi_params; # Gantikan soket, atau alamat dan port, pelayan wordpress anda fastcgi_pass unix:/var/run/php5-fpm.kaus kaki; #fastcgi_pass 127.0.0.1: 9000;  lokasi ~* .(Ogg | ogv | svg | svgz | eot | otf | woff | mp4 | ttf | css | rss | atom | js | jpg | jpeg | gif | png | ico | zip | tgz | gz | rar | bz2 | | exe | ppt | tar | mid | midi | wav | bmp | rtf) $ tamat max; log_not_found off; akses_log off;  

Kandungan dinamik cache pada nginx

Nginx Menggunakan cache berasaskan cakera berterusan yang terletak di suatu tempat di sistem fail tempatan. Oleh itu, mulakan dengan membuat direktori cakera tempatan untuk menyimpan kandungan cache.
# mkdir -p/var/cache/nginx

Seterusnya, tetapkan pemilikan yang sesuai di direktori cache. Ia harus dimiliki oleh Nginx pengguna (nginx) dan kumpulan (nginx) seperti berikut.

# chown nginx: nginx/var/cache/nginx 

Sekarang teruskan lebih jauh untuk melihat bagaimana untuk membolehkan kandungan dinamik pada nginx di bahagian bawah.

Membolehkan Cache Fastcgi di Nginx

Fastcgi (atau Fcgi) adalah protokol yang digunakan secara meluas untuk interfacing aplikasi interaktif seperti Php dengan pelayan web seperti Nginx. Ia adalah lanjutan dari CGI (Antara muka gerbang biasa).

Kelebihan utama dari Fcgi adalah bahawa ia menguruskan pelbagai permintaan CGI dalam satu proses. Tanpa itu, webserver perlu membuka proses baru (yang perlu dikawal, memproses permintaan, dan ditutup) untuk setiap permintaan pelanggan untuk perkhidmatan.

Untuk memproses Php Skrip dalam Penyebaran Stack Lemp, Nginx penggunaan Fpm (Pengurus Proses Fastcgi) atau PHP-FPM, Pelaksanaan PHP Fastcgi alternatif yang popular. Sekali PHP-FPM proses sedang berjalan, Nginx dikonfigurasikan kepada permintaan proksi untuk diproses. Oleh itu, nginx juga boleh dikonfigurasikan kepada respons cache dari PHP-FPM pelayan aplikasi backend.

Di bawah Nginx, The Fastcgi Cache kandungan diisytiharkan menggunakan arahan yang dipanggil fastcgi_cache_path Di peringkat tertinggi http konteks, dalam struktur konfigurasi nginx. Anda juga boleh menambah fastcgi_cache_key yang mentakrifkan kunci (pengenal permintaan) untuk caching.

Selain itu, untuk membaca status cache hulu, tambahkan add_header x-cache-status arahan dalam http Konteks - Ini berguna untuk tujuan debug.

Dengan mengandaikan fail konfigurasi blok pelayan anda terletak di /etc/nginx/conf.d/testapp.Conf atau /etc/nginx/laman web yang tersedia/testapp.Conf (di bawah Ubuntu dan derivatifnya), buka fail penyuntingan dan tambahkan baris berikut di bahagian atas fail.

fastcgi_cache_path/var/cache/nginx tahap = 1: 2 kekunci_ZONE = cachezone: 10m; tidak aktif = 60m max_size = 40m; fastcgi_cache_key "$ skema $ request_method $ host $ request_uri"; add_header X-Cache $ UPSTREAM_CACHE_STATUS; 
Dayakan cache fastcgi di nginx

The fastcgi_cache_path Arahan Menentukan bilangan parameter yang:

  • /var/cache/nginx - jalan ke direktori cakera tempatan untuk cache.
  • tahap - mentakrifkan tahap hierarki cache, ia menubuhkan hierarki direktori dua peringkat di bawah /var/cache/nginx.
  • kekunci_ZONE (Nama: Saiz) - Membolehkan penciptaan zon memori bersama di mana semua kunci aktif dan maklumat mengenai data (meta) disimpan. Perhatikan bahawa menyimpan kunci dalam memori mempercepatkan proses pemeriksaan, dengan memudahkan Nginx untuk menentukan sama ada Rindu atau Hit, tanpa memeriksa status pada cakera.
  • tidak aktif - Menentukan jumlah masa selepas data cache yang tidak diakses pada masa yang ditentukan dapat dipadam dari cache tanpa mengira kesegaran mereka. Nilai 60m Dalam contoh konfigurasi kami bermaksud fail yang tidak diakses selepas 60 akan dikeluarkan dari cache.
  • max_size - Menentukan saiz maksimum cache. Terdapat lebih banyak parameter yang boleh anda gunakan di sini (baca dokumentasi nginx untuk maklumat lanjut).

Pembolehubah di fastcgi_cache_key Arahan diterangkan di bawah.

Nginx menggunakannya dalam mengira kunci (pengenal) permintaan. Yang penting, untuk menghantar respons cache kepada pelanggan, permintaan mesti mempunyai kunci yang sama seperti respons cache.

  • $ skema - Skim Permintaan, HTTP atau HTTPS.
  • $ request_method - kaedah permintaan, biasanya "Dapatkan"Atau"Jawatan".
  • $ host - Ini boleh menjadi nama hos dari baris permintaan, atau nama hos dari "Tuan rumah"Permintaan medan header, atau nama pelayan yang memadankan permintaan, mengikut urutan keutamaan.
  • $ request_uri - bermaksud permintaan asal uri penuh (dengan argumen).

Juga, yang $ HUSTSTREAM_CACHE_STATUS pemboleh ubah dalam add_header x-cache-status Arahan dikira untuk setiap permintaan yang Nginx bertindak balas, sama ada ia adalah Rindu (Respons tidak dijumpai di cache, mendapat dari pelayan aplikasi) atau a Hit (respons yang disampaikan dari cache) atau mana -mana nilai yang disokong lain.

Seterusnya, dalam Lokasi Arahan yang melepasi permintaan PHP ke PHP-FPM, menggunakan fastcgi_cache arahan untuk mengaktifkan cache yang baru anda tentukan di atas.

Juga menetapkan masa caching untuk respons yang berbeza menggunakan fastcgi_cache_valid arahan seperti yang ditunjukkan.

fastcgi_cache cachezone; fastcgi_cache_valid 60m; 
Tentukan Zon dan Masa Caching

Sekiranya hanya masa caching ditentukan seperti dalam kes kita, hanya 200, 301, dan 302 Respons dikurangkan. Tetapi anda juga boleh menentukan respons secara eksplisit atau menggunakan mana -mana (untuk sebarang kod respons):

fastcgi_cache cachezone; fastcgi_cache_valid 200 301 203 60m; fastcgi_cache_valid 404 10m; Atau fastcgi_cache cachezone; fastcgi_cache_valid mana -mana 10m; 

Penalaan Fastcgi Caching Prestasi di nginx

Untuk menetapkan bilangan minimum kali permintaan dengan kunci yang sama mesti dibuat sebelum respons di cache, sertakan fastcgi_cache_min_uses arahan, sama ada di http atau pelayan atau Lokasi konteks.

fastcgi_cache_min_uses 3 
Tetapkan penggunaan cache minimum

Untuk membolehkan pengesahan semula item cache yang tamat tempoh menggunakan permintaan bersyarat dengan "Jika diubah suai"Dan"Jika tidak-perlawanan"Bidang pengepala, tambahkan fastcgi_cache_revalidate arahan, dalam http atau pelayan atau Lokasi konteks.

fastcgi_cache_revalidate on; 
Tetapkan Cache Re-validation

Anda juga boleh mengarahkan Nginx Untuk menyampaikan kandungan cache apabila pelayan asal atau pelayan FCGI turun, menggunakan proxy_cache_use_stale arahan, dalam arahan lokasi.

Konfigurasi sampel ini bermaksud bahawa bila Nginx Menerima ralat, masa tamat, dan mana -mana kesilapan yang ditentukan dari pelayan hulu dan mempunyai versi basi fail yang diminta dalam kandungan cache, ia menyampaikan fail basi.

proxy_cache_use_stale ralat masa http_500; 
Dayakan berkhidmat data basi

Satu lagi arahan yang berguna untuk prestasi caching FCGI yang baik fastcgi_cache_background_update yang berfungsi bersempena dengan proxy_cache_use_stale arahan. Apabila ditetapkan, ia mengarahkan Nginx untuk melayani kandungan basi apabila pelanggan meminta fail yang telah tamat tempoh atau sedang dalam proses dikemas kini dari pelayan huluan.

fastcgi_cache_background_update on; 
Dayakan kemas kini latar cache

The fastcgi_cache_lock berguna juga, untuk penalaan halus prestasi cache kerana jika banyak pelanggan meminta kandungan yang sama yang tidak ada dalam cache, nginx hanya akan mengemukakan permintaan pertama ke pelayan hulu, cache respons kemudian melayani permintaan klien yang lain dari cache.

fastcgi_cache_lock on; 
Dayakan kunci cache

Setelah membuat semua perubahan di atas di Nginx fail konfigurasi, simpan dan tutupnya. Kemudian periksa struktur konfigurasi untuk sebarang kesilapan sintaks sebelum memulakan semula perkhidmatan nginx.

# nginx -t # Systemctl mulakan semula nginx 
Periksa dan mulakan perkhidmatan nginx

Seterusnya, ujian jika cache berfungsi dengan betul, cuba mengakses aplikasi atau tapak web anda daripada menggunakan arahan curl berikut (kali pertama harus menunjukkan a Rindu, Tetapi permintaan berikutnya harus menunjukkan a Hit seperti yang ditunjukkan dalam tangkapan skrin).

# curl -i http: // testapp.Tecmint.com 
Ujian cache fastcgi

Berikut adalah tangkapan skrin lain yang menunjukkan data basi nginx yang berkhidmat.

Ujian data nginx yang menghidangkan basi

Menambah pengecualian untuk memintas cache

Adalah mungkin untuk menetapkan syarat di bawahnya Nginx tidak boleh menghantar respons cache kepada pelanggan, menggunakan fastcgi_cache_bypass arahan. Dan untuk mengarahkan nginx untuk tidak memberi respons cache dari pelayan hulu sama sekali, gunakan fastcgi_no_cache.

Contohnya, jika anda mahu Jawatan permintaan dan URL dengan rentetan pertanyaan untuk selalu pergi ke php. Pertama, nyatakan pernyataan jika menetapkan syarat seperti berikut.

Tetapkan $ skip_cache 0; jika ($ request_method = post) set $ skip_cache 1;  

Kemudian aktifkan pengecualian di atas di Lokasi Arahan yang melepasi permintaan PHP ke PHP-FPM, menggunakan fastcgi_cache_bypass dan fastcgi_no_cache arahan.

 fastcgi_cache_bypass $ skip_cache; fastcgi_no_cache $ skip_cache; 

Terdapat banyak bahagian lain dari laman web anda yang mana anda mungkin tidak mahu mengaktifkan caching kandungan. Berikut adalah contoh konfigurasi nginx untuk meningkatkan prestasi tapak WordPress, yang disediakan di nginx.com Blog.

Untuk menggunakannya, buat perubahan (seperti domain, laluan, nama fail, dll.) untuk mencerminkan apa yang ada di persekitaran anda.

fastcgi_cache_path/var/run/nginx-cache = 1: 2 KEYS_ZONE = WordPress: 100m tidak aktif = 60m; fastcgi_cache_key "$ skema $ request_method $ host $ request_uri"; Server Server_Name Contoh.com www.Contoh.com; Root/var/www/contoh.com; Indeks indeks.PHP; Access_log/var/log/nginx/contoh.com.akses.log; error_log/var/log/nginx/contoh.com.ralat.log; Tetapkan $ skip_cache 0; # Permintaan pos dan URL dengan rentetan pertanyaan harus selalu pergi ke php if ($ request_method = post) set $ skip_cache 1;  jika ($ query_string != "") set $ skip_cache 1;  # Jangan cache uris yang mengandungi segmen berikut jika ($ request_uri ~* "/wp-admin/|/xmlrpc.Php | Wp-.*.Php |/Feed/| Indeks.php | sitemap (_index)?.xml ") set $ skip_cache 1; # Jangan gunakan cache untuk pengguna log masuk atau pengulas baru-baru ini jika ($ http_cookie ~*" comment_author | wordpress_ [a-f0-9]+| wp-postpass | wordpress_no_cache | wordpress_logged_in ") set $ skip_cache 1; lokasi / try_files $ uri $ uri / / index.php?$ args;  lokasi ~ .php $ try_files $ uri /index.PHP; termasuk fastcgi_params; fastcgi_pass unix:/var/run/php5-fpm.kaus kaki; fastcgi_cache_bypass $ skip_cache; fastcgi_no_cache $ skip_cache; fastcgi_cache wordpress; fastcgi_cache_valid 60m;  Lokasi ~ /Purge ( /.*) fastcgi_cache_purge wordpress "$ skema $ request_method $ host $ 1";  lokasi ~* ^.+.(Ogg | ogv | svg | svgz | eot | otf | woff | mp4 | ttf | css | rss | atom | js | jpg | jpeg | gif | png | ico | zip | tgz | gz | rar | bz2 | | exe | ppt | tar | mid | midi | wav | bmp | rtf) $ access_log off; log_not_found off; tamat tempoh max;  lokasi = /robot.txt access_log off; log_not_found off;  lokasi ~ /. menafikan semua; akses_log off; log_not_found off;  

Membolehkan Cache Proksi di Nginx

Nginx juga menyokong caching respons dari pelayan proksi lain (ditakrifkan oleh proxy_pass arahan). Untuk kes ujian ini, kami menggunakan nginx sebagai proksi terbalik untuk nod.Aplikasi Web JS, jadi kami akan membolehkan Nginx sebagai cache untuk nod.Permohonan JS. Semua arahan konfigurasi yang digunakan di sini mempunyai makna yang sama seperti arahan fastcgi di bahagian sebelumnya, jadi kami tidak akan menerangkannya lagi.

Untuk membolehkan caching respons dari pelayan proksi, sertakan proxy_cache_path Arahan di peringkat teratas http konteks. Untuk menentukan bagaimana permintaan di -cache, anda juga boleh menambah proxy_cache_key arahan seperti berikut.

proxy_cache_path/var/cache/nginx app1 kekunci_zone = proxycache: 100m tidak aktif = 60m max_size = 500m; proxy_cache_key "$ skema $ request_method $ host $ request_uri"; add_header x-cache-status $ UPSTREAM_CACHE_STATUS; proxy_cache_min_uses 3; 

Seterusnya, aktifkan cache dalam arahan lokasi.

lokasi/proxy_pass http: // 127.0.0.1: 3000; proxy_cache proxycache; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m;  

Untuk menentukan syarat -syarat di mana nginx tidak menghantar kandungan cache dan tidak cache respons sama sekali dari pelayan huluan, sertakan proxy_cache_bypass dan proxy_no_cache.

 proxy_cache_bypass $ cookie_nocache $ arg_nocache $ arg_comment; proxy_no_cache $ http_pragma $ http_authorization; 

Prestasi cache proksi penalaan halus

Arahan berikut berguna untuk menyempurnakan prestasi cache proksi. Mereka juga mempunyai makna yang sama dengan arahan fastcgi.

proxy_cache_min_uses 3; proxy_cache_revalidate on; proxy_cache_use_stale ralat masa mengemas kini http_500; proxy_cache_background_update on; proxy_cache_lock on; 

Untuk maklumat lanjut dan arahan konfigurasi caching, lihat dokumentasi untuk dua modul utama ngx_http_fastcgi_module dan ngx_http_proxy_module.

Sumber Tambahan: Caching Kandungan Nginx dan Petua untuk Meningkatkan Prestasi WordPress.