Cara mensembakan konten di nginx

Cara mensembakan konten di nginx

Nginx Menjadi server web open-source yang terkonsolidasian, berkinerja tinggi yang mempercepat pengiriman konten dan aplikasi, meningkatkan keamanan, dan meningkatkan skalabilitas. Salah satu kasus penggunaan yang paling umum Nginx adalah Caching konten, yang merupakan cara paling efektif untuk meningkatkan kinerja situs web.

Baca juga: 10 Alat caching open source teratas untuk Linux

Anda dapat gunakan Nginx Untuk mempercepat server asal lokal dengan mengkonfigurasinya ke respons cache dari server hulu dan juga untuk membuat server tepi untuk jaringan pengiriman konten (CDN). Nginx kekuatan beberapa cdn terbesar.

Saat dikonfigurasi sebagai cache, nginx akan:

  • cache konten statis dan dinamis.
  • Tingkatkan kinerja konten dinamis dengan caching mikro.
  • Sajikan konten basi sambil menilai kembali di latar belakang untuk kinerja yang lebih baik.
  • mengesampingkan atau mengatur header kontrol cache, dan banyak lagi.

Di artikel ini, Anda akan belajar cara mengkonfigurasi Nginx sebagai Caching konten di linux untuk membuat server web Anda berjalan seefisien mungkin.

Prasyarat:

Kamu harus punya Nginx Diinstal di server Linux Anda, jika tidak ikuti panduan ini untuk menginstal Nginx:

  • Cara menginstal nginx di centos 8
  • Cara menginstal nginx di centos 7

Cache konten statis di nginx

Konten statis adalah konten dari situs web yang tetap sama (tidak berubah) di halaman. Contoh konten statis termasuk file seperti gambar, video, dokumen; File CSS, dan file JavaScript.

Jika situs web Anda menggunakan banyak konten statis, maka Anda dapat mengoptimalkan kinerjanya dengan mengaktifkan caching sisi klien di mana browser menyimpan salinan konten statis untuk akses yang lebih cepat.

Konfigurasi sampel berikut ini bagus, ganti saja www.contoh.com Dengan URL nama situs web Anda dan buat modifikasi ke nama path lain yang sesuai.

Server  # Ganti URL Server Web Anda untuk www.contoh.com server_name www.contoh.com; root/var/www/contoh.com/htdocs; Indeks Indeks.PHP; access_log/var/log/nginx/contoh.com.mengakses.catatan; error_log/var/log/nginx/contoh.com.kesalahan.catatan; Lokasi / TRY_FILES $ URI $ URI / / INDEX.php?$ args;  Lokasi ~ .php $ try_files $ uri = 404; Sertakan fastcgi_params; # Ganti soket, atau alamat dan port, dari server 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 | doc | xls | exe | ppt | tar | mid | midi | wav | bmp | rtf) $ kedaluwarsa max; log_not_found off; Access_log off;  

Konten Dinamis Cache di Nginx

Nginx menggunakan cache berbasis disk persisten yang terletak di suatu tempat di sistem file lokal. Jadi mulailah dengan membuat direktori disk lokal untuk menyimpan konten yang di -cache.
# mkdir -p/var/cache/nginx

Selanjutnya, atur kepemilikan yang sesuai di direktori cache. Itu harus dimiliki oleh Nginx pengguna (Nginx) dan grup (Nginx) sebagai berikut.

# chown nginx: nginx/var/cache/nginx 

Sekarang lanjutkan lebih jauh untuk melihat cara mengaktifkan konten dinamis di Nginx di bagian di bawah ini.

Mengaktifkan cache fastcgi di nginx

Fastcgi (atau Fcgi) adalah protokol yang banyak digunakan untuk berinteraksi dengan aplikasi interaktif seperti Php dengan server web seperti Nginx. Ini adalah perpanjangan dari CGI (Antarmuka gateway umum).

Keuntungan utama Fcgi apakah itu mengelola beberapa permintaan CGI dalam satu proses. Tanpa itu, server web harus membuka proses baru (yang harus dikendalikan, memproses permintaan, dan ditutup) untuk setiap permintaan klien untuk layanan.

Proses Php skrip dalam penyebaran tumpukan lemp, Nginx penggunaan FPM (Fastcgi Process Manager) atau Php-fpm, Implementasi FastCGI PHP alternatif yang populer. Sekali Php-fpm proses sedang berjalan, Nginx dikonfigurasi ke permintaan proxy untuk diproses. Dengan demikian nginx juga dapat dikonfigurasi ke respons cache dari Php-fpm server aplikasi backend.

Di bawah Nginx, itu Fastcgi cache konten dinyatakan menggunakan arahan yang dipanggil fastcgi_cache_path di tingkat atas http konteks, dalam struktur konfigurasi nginx. Anda juga dapat menambahkan fastcgi_cache_key yang mendefinisikan kunci (pengidentifikasi permintaan) untuk caching.

Selain itu, untuk membaca status cache hulu, tambahkan Add_header X-Cache-Status Petunjuk di dalam http Konteks - Ini berguna untuk tujuan debugging.

Dengan asumsi file konfigurasi blok server situs Anda terletak di /etc/nginx/conf.D/TestApp.conf atau /etc/nginx/situs-tersedia/testapp.conf (Di bawah Ubuntu dan turunannya), buka file pengeditan dan tambahkan baris berikut di bagian atas file.

fastcgi_cache_path/var/cache/nginx level = 1: 2 keys_zone = cachezone: 10m; tidak aktif = 60m max_size = 40m; fastcgi_cache_key "$ scheme $ request_method $ host $ request_uri"; add_header x-cache $ upstream_cache_status; 
Aktifkan cache fastcgi di nginx

Itu fastcgi_cache_path Petunjuk Menentukan jumlah parameter yang adalah:

  • /var/cache/nginx - Jalan ke direktori disk lokal untuk cache.
  • level - mendefinisikan tingkat hierarki cache, ia mengatur hierarki direktori dua tingkat di bawah /var/cache/nginx.
  • keys_zone (nama: ukuran) - memungkinkan pembuatan zona memori bersama di mana semua kunci aktif dan informasi tentang data (meta) disimpan. Perhatikan bahwa menyimpan kunci dalam memori mempercepat proses pemeriksaan, dengan memudahkan Nginx untuk menentukan apakah itu a MERINDUKAN atau MEMUKUL, tanpa memeriksa status di disk.
  • tidak aktif - Menentukan jumlah waktu setelah itu data cache yang tidak diakses selama waktu yang ditentukan dihapus dari cache terlepas dari kesegarannya. Nilai 60m Dalam contoh konfigurasi kami berarti file yang tidak diakses setelah 60 akan dihapus dari cache.
  • max_size - Menentukan ukuran maksimum cache. Ada lebih banyak parameter yang dapat Anda gunakan di sini (baca dokumentasi Nginx untuk informasi lebih lanjut).

Variabel di fastcgi_cache_key Petunjuk dijelaskan di bawah ini.

Nginx menggunakannya dalam menghitung kunci (pengidentifikasi) dari permintaan. Yang penting, untuk mengirim tanggapan yang di -cache kepada klien, permintaan harus memiliki kunci yang sama dengan respons yang di -cache.

  • $ skema - Skema permintaan, http atau https.
  • $ request_method - Metode permintaan, biasanya “MENDAPATKAN" atau "POS".
  • $ host - Ini bisa menjadi nama host dari baris permintaan, atau nama host dari “Tuan rumahBidang header permintaan, atau nama server yang cocok dengan permintaan, dalam urutan prioritas.
  • $ request_uri - berarti permintaan asli URI (dengan argumen).

Juga $ upstream_cache_status variabel di Add_header X-Cache-Status Petunjuk dihitung untuk setiap permintaan yang ditanggapi Nginx, apakah itu a MERINDUKAN (Respons tidak ditemukan di cache, dapatkan dari server aplikasi) atau a MEMUKUL (Respons disajikan dari cache) atau nilai lain yang didukung.

Selanjutnya, di dalam Lokasi Petunjuk yang meneruskan permintaan PHP Php-fpm, menggunakan fastcgi_cache Arahan untuk mengaktifkan cache yang baru saja Anda tentukan di atas.

Juga mengatur waktu caching untuk tanggapan yang berbeda menggunakan fastcgi_cache_valid arahan seperti yang ditunjukkan.

Fastcgi_cache Cachezone; fastcgi_cache_valid 60m; 
Tentukan zona dan waktu caching

Kalau saja waktu caching ditentukan seperti dalam kasus kami 200, 301, Dan 302 Respons di -cache. Tetapi Anda juga dapat menentukan respons secara eksplisit atau menggunakan apa pun (untuk kode respons apa pun):

Fastcgi_cache Cachezone; fastcgi_cache_valid 200 301 203 60m; fastcgi_cache_valid 404 10m; Atau fastcgi_cache cachezone; fastcgi_cache_valid setiap 10m; 

Kinerja caching fastcgi fine-tuning di nginx

Untuk mengatur jumlah minimum kali permintaan dengan kunci yang sama harus dilakukan sebelum respons di -cache, sertakan fastcgi_cache_min_uses arahan, baik di http atau server atau Lokasi konteks.

fastcgi_cache_min_uses 3 
Atur penggunaan cache minimum

Untuk memungkinkan validasi ulang item cache yang sudah kadaluwarsa menggunakan permintaan bersyarat dengan “IF-Modified-Since" Dan "Jika tidak ada pertandinganBidang header, tambahkan fastcgi_cache_revalidate Petunjuk, di dalam http atau server atau Lokasi konteks.

fastcgi_cache_revalidate on; 
Atur validasi ulang cache

Anda juga bisa menginstruksikan Nginx Untuk mengirimkan konten yang di -cache saat server asal atau server FCGI turun, menggunakan proxy_cache_use_stale Petunjuk, dalam Petunjuk Lokasi.

Konfigurasi sampel ini berarti bahwa saat Nginx menerima kesalahan, batas waktu, dan salah satu kesalahan yang ditentukan dari server hulu dan memiliki versi basi dari file yang diminta dalam konten yang di -cache, ia memberikan file basi.

proxy_cache_use_stale Timeout kesalahan http_500; 
Aktifkan penyajian data basi

Petunjuk lain yang berguna untuk menyempurnakan kinerja caching FCGI adalah fastcgi_cache_background_update yang berfungsi bersama dengan proxy_cache_use_stale pengarahan. Saat diatur ke ON, itu menginstruksikan Nginx untuk melayani konten basi saat klien meminta file yang sudah kedaluwarsa atau sedang dalam proses diperbarui dari server hulu.

fastcgi_cache_background_update on; 
Aktifkan Pembaruan Latar Belakang Cache

Itu fastcgi_cache_lock berguna juga, untuk penyempurnaan kinerja cache karena jika beberapa klien meminta konten yang sama yang tidak ada di cache, nginx hanya akan meneruskan permintaan pertama ke server hulu, cache respons kemudian melayani permintaan klien lain dari cache.

fastcgi_cache_lock on; 
Aktifkan kunci cache

Setelah membuat semua perubahan di atas Nginx file konfigurasi, simpan dan tutup. Kemudian periksa struktur konfigurasi untuk kesalahan sintaks apa pun sebelum memulai kembali layanan Nginx.

# nginx -t # systemctl restart nginx 
Periksa dan mulai layanan nginx

Selanjutnya, uji jika cache berfungsi dengan baik, cobalah untuk mengakses aplikasi web atau situs Anda dari menggunakan perintah curl berikut (pertama kali harus menunjukkan a MERINDUKAN, tetapi permintaan selanjutnya harus menunjukkan a MEMUKUL seperti yang ditunjukkan dalam tangkapan layar).

# curl -i http: // testapp.tecmint.com 
Uji cache fastcgi

Berikut adalah tangkapan layar lain yang menunjukkan data basi nginx yang menyajikan.

Uji Nginx Melayani Data Basi

Menambahkan pengecualian ke cache bypass

Dimungkinkan untuk menetapkan kondisi di mana Nginx tidak boleh mengirim tanggapan yang di -cache kepada klien, menggunakan fastcgi_cache_bypass pengarahan. Dan untuk menginstruksikan Nginx untuk tidak men -cache respons dari server hulu sama sekali, gunakan fastcgi_no_cache.

Misalnya, jika Anda mau POS Permintaan dan URL dengan string kueri untuk selalu pergi ke PHP. Pertama, nyatakan pernyataan IF untuk mengatur kondisi sebagai berikut.

Setel $ skip_cache 0; if ($ request_method = post) Set $ ​​skip_cache 1;  

Kemudian aktifkan pengecualian di atas di Lokasi Petunjuk yang meneruskan permintaan PHP Php-fpm, menggunakan fastcgi_cache_bypass Dan fastcgi_no_cache arahan.

 fastcgi_cache_bypass $ skip_cache; fastcgi_no_cache $ skip_cache; 

Ada banyak bagian lain dari situs Anda yang Anda mungkin tidak ingin mengaktifkan caching konten. Berikut ini adalah contoh konfigurasi nginx untuk meningkatkan kinerja situs WordPress, yang disediakan di Nginx.com blog.

Untuk menggunakannya, buat perubahan (seperti domain, jalur, nama file, dll.) untuk mencerminkan apa yang ada di lingkungan Anda.

fastcgi_cache_path/var/run/nginx-cache level = 1: 2 keys_zone = wordpress: 100m tidak aktif = 60m; fastcgi_cache_key "$ scheme $ request_method $ host $ request_uri"; Contoh server server_name.com www.contoh.com; root/var/www/contoh.com; Indeks Indeks.PHP; access_log/var/log/nginx/contoh.com.mengakses.catatan; ERROR_LOG/VAR/LOG/NGINX/Contoh.com.kesalahan.catatan; Setel $ skip_cache 0; # Posting Permintaan dan URL dengan string kueri harus selalu masuk ke PHP if ($ request_method = post) Set $ ​​skip_cache 1;  if ($ query_string != "") Set $ ​​skip_cache 1;  # Jangan cache uris yang berisi segmen berikut jika ($ request_uri ~* "/wp-admin/|/xmlrpc.PHP | WP-.*.php |/feed/| index.php | sitemap (_index)?.xml ") Set $ ​​skip_cache 1; # Jangan gunakan cache untuk pengguna yang masuk atau komentator terbaru 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; Sertakan 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 "$ scheme $ 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 | doc | xls | exe | ppt | tar | mid | midi | wav | bmp | rtf) $ access_log off; log_not_found off; kedaluwarsa Max;  lokasi = /robot.txt access_log off; log_not_found off;  Lokasi ~ /. tolak semua; Access_log off; log_not_found off;  

Mengaktifkan cache proxy di nginx

Nginx juga mendukung caching tanggapan dari server proksi lainnya (ditentukan oleh proxy_pass pengarahan). Untuk kasus uji ini, kami menggunakan Nginx sebagai proxy terbalik untuk sebuah node.aplikasi web js, jadi kami akan mengaktifkan nginx sebagai cache untuk node.Aplikasi JS. Semua arahan konfigurasi yang digunakan di sini memiliki makna yang sama dengan arahan fastcgi di bagian sebelumnya, jadi kami tidak akan menjelaskannya lagi.

Untuk memungkinkan caching tanggapan dari server proksi, sertakan proxy_cache_path Petunjuk di tingkat atas http konteks. Untuk menentukan bagaimana permintaan di -cache, Anda juga dapat menambahkan proxy_cache_key Petunjuk sebagai berikut.

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

Selanjutnya, aktifkan cache di 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 kondisi di mana Nginx tidak mengirim konten yang di -cache dan tidak menyimpan respons sama sekali dari server hulu, sertakan proxy_cache_bypass Dan proxy_no_cache.

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

Kinerja cache proxy fine-tuning

Arahan berikut berguna untuk menyempurnakan kinerja cache proxy. Mereka juga memiliki makna yang sama dengan arahan fastcgi.

proxy_cache_min_uses 3; proxy_cache_revalidate on; proxy_cache_use_stale kesalahan batas waktu pembaruan http_500; proxy_cache_background_update on; proxy_cache_lock on; 

Untuk informasi lebih lanjut dan arahan konfigurasi caching, lihat dokumentasi untuk dua modul utama NGX_HTTP_FASTCGI_MODULE dan NGX_HTTP_PROXY_MODULE.

Sumber daya tambahan: caching konten nginx dan tips untuk meningkatkan kinerja WordPress.