Akor Optimizasyon Nginx ak Caching

Nginx se yon lojisyèl aplikasyon entènèt pwisan pou òganize sit entènèt. Nan tan, Nginx te finalman depase Apache nan lojisyèl an sèvè entènèt ki pi itilize apre lansman li nan kòmansman ane 2000 yo, sitou akòz pèfòmans plis kapasite nan plis pase yon sèvè entènèt tradisyonèl yo. Youn nan anpil bagay yo itilize Nginx pou yo deplwaye kòm yon prokurasyon ranvèse oswa balans chaj.

Sepandan, yon karakteristik kle yo rate pifò fwa lè deplwaye kòm yon devan pou serveurs dèyè. Sa se kapasite Nginx genyen sou HAProxy nan trape resous estatik relativman fasil ak ekri sou disk oswa si ou gen yon sèvè andan ak byen yon abondans RAM ajoute kachèt la nan memwa pou pèfòmans final.

Nan leson patikilye sa a, ou pral wè kèk egzanp sou fason pou fè sa, imedyatman bay sèvè Nginx ou a yon ogmantasyon si ou itilize Nginx nan yon sitiyasyon proxy ranvèse.

Kondisyon

  • OS rekòmande: Nenpòt sistèm opere Linux ak Nginx enstale.
  • Kont itilizatè: Yon kont itilizatè ki gen aksè sudo oswa rasin.

reklam


Kreye kachèt Nginx (kachèt Disk tradisyonèl)

Nan premye egzanp lan, ou pral kreye yon anyè epi ajoute yon zòn nan blòk sèvè Nginx ou a ak kach tradisyonèl fichye estatik yo sou yon disk. Nan tèm long la, Si w pa itilize yon SSD, sa ka pafwa yon faktè negatif. Epitou, menm ak SSD, ekri konstan ka diminye esperans lavi a depann sou laj la ak kalite kondwi a difisil.

Premyèman, kreye anyè a pou konsève done kachèt yo:

sudo mkdir -p /cache/tmpfs/

Apre sa, ajoute sa ki annapre yo nan blòk sèvè ou a, modifye blòk sèvè proxy ki deja egziste a, epi ajoute siplemantè yo.

proxy_cache_path /cache/nginx/tmpfs levels=1:2 keys_zone=my_zone:100m max_size=6g inactive=1d use_temp_path=off;

server {
    ...
    location / {
        proxy_cache my_zone;
        proxy_cache_key $scheme$request_method$proxy_host$request_uri;
        proxy_cache_valid 404 302 1m;
        proxy_cache_valid 200 1d;
        proxy_http_version   1.1;
        add_header X-Cache-Status $upstream_cache_status;
    }
    ...
}

Remake byen, asire w ke (proxy_cache_path) ale nan pati HTTP a epi yo pa blòk sèvè a. Epitou, chemen dosye yo dwe absoli, oswa sinon li pa pral travay. An jeneral, gid la gen dosye yo pa manyen pou 24 èdtan retire ak validation kachèt pou 24 èdtan anvan yo te rafrechi.

Isit la se yon pann nan tèminoloji Nginx la.

  • keys_zone: mete kanpe yon zòn memwa pataje pou estoke kle yo kachèt ak metadata tankou revèy itilizasyon. Èske w gen yon kopi kle yo nan memwa pèmèt NGINX detèmine byen vit si yon demann se (HIT) oswa yon (MISS) san yo pa gen pou ale nan disk, anpil akselere chèk la. Yon zòn 1-MB ka estoke done pou apeprè 8,000 kle, kidonk zòn 10-MB ki konfigirasyon nan egzanp lan ka estoke done pou apeprè 80,000 kle.
  • inaktif: presize konbyen tan yon atik ka rete nan kachèt la san yo pa jwenn aksè. Nan egzanp sa a, yon dosye ki pa te mande pou 60 minit otomatikman efase nan kachèt la pa pwosesis la manadjè kachèt, kèlkeswa si wi ou non li te ekspire. Valè default la se 10 minit (10 m). Kontni inaktif diferan de kontni ekspire. NGINX pa efase otomatikman kontni ki ekspire jan sa defini nan yon header kontwòl kachèt (Cache-Control:max-age=120 pou egzanp). Ekspire (rasi) kontni yo efase sèlman lè li pa te jwenn aksè pou tan ki espesifye nan inaktif. Lè yo jwenn aksè nan kontni ki ekspire, NGINX rafrechi li soti nan sèvè orijin ak reset revèy inaktif la.
  • max_size: fikse limit siperyè gwosè kachèt la (a 10 jigokte nan egzanp sa a). Li se opsyonèl; pa espesifye yon valè pèmèt kachèt la grandi pou itilize tout espas disk ki disponib. Lè gwosè kachèt la rive nan limit la, yon pwosesis ki rele la manadjè kachèt retire dosye yo ki te pi piti dènyèman itilize pou pote gwosè kachèt la tounen anba limit la.
  • proxy_cache_path: chemen dosye a nan kachèt kachèt ou te kreye a.
  • add_header X-Cache-Statis $upstream_cache_status: ajoute yon header HTTP X-Cache-Status nan repons pou kliyan yo

Opsyon adisyonèl ki anba yo ka benefisye sèvè ou an konjonksyon avèk konfigirasyon orijinal proxy kachèt la:

  • proxy_cache_revalidate: bay NGINX enstriksyon pou itilize kondisyonèl (JWENN) demann lè rafrechi kontni ki soti nan sèvè orijin yo. Si yon kliyan mande yon atik ki nan kachèt men ki ekspire jan sa defini nan tèt kontwòl kachèt yo, NGINX gen ladan l. (Si-Modifye-Depi) jaden nan tèt la nan (JWENN) demann li voye bay sèvè orijin lan. Sa a sove sou Pleasant, paske sèvè a voye atik la plen sèlman si li te modifye depi lè ki anrejistre nan la. (Dènye modifye) header tache ak fichye a lè NGINX orijinal kache li.
  • proxy_cache_min_uses: fikse kantite fwa kliyan yo dwe mande yon atik anvan NGINX kache li. Sa a se itil si kachèt la toujou ap ranpli, paske li asire ke sèlman atik ki pi souvan jwenn aksè yo ajoute nan kachèt la. Pa defo (proxy_cache_min_uses) se mete sou 1.
  • proxy_cache_background_update : La (aktyalizasyon) paramèt nan (proxy_cache_use_stale) direktiv, konbine avèk pèmèt la (proxy_cache_background_update) direktiv, bay NGINX enstriksyon pou l delivre kontni rasi lè kliyan mande yon atik ki ekspire oswa ki nan pwosesis pou yo mete ajou soti nan sèvè orijin lan. Tout mizajou yo pral fè nan background nan. Yo retounen fichye rasi a pou tout demann jiskaske yo telechaje fichye a ajou nèt.
  • proxy_cache_lock: Ak (proxy_cache_lock) aktive, si plizyè kliyan mande yon dosye ki pa aktyèl nan kachèt la a (MISS), se sèlman premye nan demann sa yo ki gen dwa pase nan sèvè orijin lan. Demann ki rete yo rete tann pou demann sa a dwe satisfè ak Lè sa a, rale dosye a soti nan kachèt la. San yo pa (proxy_cache_lock) aktive, tout demann ki lakòz miss kachèt ale tou dwat nan sèvè orijin lan.

Nginx kachèt nan RAM

Si sèvè ou a gen resous yo, kachèt nan RAM ap toujou pi bon pase kachèt dosye sou disk, sa a menm aplike nan kondui SSD dènye kri yo. Sa a se vize nan direksyon pou sèvè pwòp tèt ou-jere epi li gen resous abondan tankou belye mouton chita alantou fè anyen. Ou ka potansyèlman mete kanpe kèk gwo memwa kachèt ki pral gen enpak imedya sou chaj sit entènèt ou a.

Premyèman, kreye yon nouvo anyè pou kachèt nan RAM:

sudo mkdir -p /cache/nginx/tmpfs

Dezyèmman, monte anyè a kreye nan RAM ak (tmpfs) lè l sèvi avèk lòd sa a:

sudo mount -t tmpfs -o size=2g tmpfs /cache/nginx/tmpfs

Sa monte (/data/nginx/tmpfs) nan RAM, allocation 2 GB. Sa a ka ajiste ogmante oswa diminye. Pi piti serveurs ta kòmanse ak 512MB olye de 2g. Sepandan, pa gen okenn repons bon oswa move kòm chak sèvè diferan.

Si ou bezwen demonte, egzekite kòd sa a:

sudo umount /cache/nginx/ramcache

Pou fini konfigirasyon an ak RAM kach ak Nginx, ou bezwen ajoute sa ki annapre yo nan (/etc/fstab), Se konsa, lè sèvè a otomatikman rekòmanse, anyè a kachèt RAM vin re-kreye.

Louvri nan (/etc/fstab) dosye lè l sèvi avèk nano:

sudo nano /etc/fstab

Antre sa ki annapre yo epi ajiste nan pozisyon kachèt ou ak gwosè:

tmpfs /cache/nginx/tmpfs tmpfs defaults,size=1g 0 0

reklam


Nginx proxy tanpon

Si w ap itilize yon prokurasyon ranvèse Nginx, yon bon fason pou ogmante pèfòmans se itilize tanpon proxy. Sa a gen rapò ak fason Nginx okipe repons yo resevwa nan men sèvè proxy a. Sa vle di ke sèvè proxy a pa mande pou chak demann kliyan, men done yo sèvi nan kachèt la si done yo nan kachèt yo toujou konsidere kòm valab. (toun lavi pa pase).

Egzanp travay anba a:

#Enables or disables buffering of responses from the proxied server.
proxy_buffering on;
 
#proxy buffer cache sizes
proxy_buffers 4 256k;
proxy_buffer_size 128k; 
proxy_busy_buffers_size 256k;

WordPress Caching

Egzanp ki anwo yo travay trè byen ak sit entènèt WordPress. Sepandan, kèk règ adisyonèl pral nesesè pou asire nou pa kache kèk resous pou rezon sekirite nan mitan tèt yo.

Premyèman, kole sa a pi wo a zòn ou (kote) ke yo te kache nan dosye blòk sèvè ou a:

set $skip_cache 0;

# POST requests and urls with a query string should always go to PHP
if ($request_method = POST) {
    set $skip_cache 1;
}
if ($query_string != "") {
    set $skip_cache 1;
}

# Don't cache uris containing the following segments
if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|^/feed/*|/tag/.*/feed/*|index.php|/.*sitemap.*\.(xml|xsl)") {
    set $skip_cache 1;
}

# Don't use the cache for logged in users or recent commenters
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
    set $skip_cache 1;
}

Kòm ou ka wè, nou ap sote kachèt la sou demann (POST) ak yon seri rechèch ki ta dwe toujou ale nan PHP epi yo pa kache nan tout URL ki gen kèk bagay chak jou tankou manje, sitemap, elatriye.

Apre sa, ajoute de liy sa yo nan kote kachèt ou a:

        proxy_cache_bypass $skip_cache;
        proxy_no_cache $skip_cache;

Pou itilizatè ki pi nouvo ki vle wè yon egzanp konplè, gade anba a nan yon anviwònman k ap travay:

    location / {
        proxy_pass http://webserver;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache my_zone;
        proxy_cache_key $scheme$request_method$proxy_host$request_uri;
        proxy_cache_valid 404 302 1m;
        proxy_cache_valid 200 31d;
        add_header X-Cache-Status $upstream_cache_status;
        proxy_buffering on;
        proxy_buffers 256 16k;
        proxy_buffer_size 32k;
        proxy_http_version   1.1;
        proxy_cache_bypass $skip_cache;
        proxy_no_cache $skip_cache;
    }
}

reklam


Nginx Navigatè Caching

Cache navigatè se yon bon fason pou redwi chaj la sou serveurs, sitou si w ap dirije blog oswa lòt kontni ki sanble. Ou ka fikse tan pwolonje pou fè makèt ak fowòm bal kote kontni dinamik chanje pi souvan pase pa.

Egzanp ki pi komen nan pwan popilè yo anba a. Antre sa a nan blòk sèvè ou.

  # assets, media
  location ~* \.(?:css(\.map)?|js(\.map)?|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)$ {
  expires    365d;
  access_log off;
  }
  
  # svg, fonts
  location ~* \.(?:svgz?|ttf|ttc|otf|eot|woff2?)$ {
  add_header Access-Control-Allow-Origin "*";
  expires    365d;
  access_log off;
  }

Pou sove sou disk IO ak anrejistreman, ou ka deklare resous sa yo koupe nan boutèy aksè ou a pou ogmante pèfòmans sou sèvè a si w ap konbat ak pi gwo tan chaj.

Kòmantè ak konklizyon

Nan leson patikilye a, ou te aprann kijan pou itilize kachèt proxy Nginx lè l sèvi avèk dosye ak RAM. Pou plis enfòmasyon sou Nginx Caching, vizite dokimantasyon Nginx Caching pou aprann anpil bagay paske li se trè vaste ak opsyon adisyonèl. Siplemantè yo ka fè kòm gid la jis grate sifas la nan sa ki vrèman ka fè.

Leave a Comment