opened image

Mikrokeshavimas nginx+apache ir konfigūracijos niuansai

Šiame straipsnyje aptarsime mikrošalinimą: kam jis reikalingas, kaip jį sukonfigūruoti ir kokios galimos problemos gali pasitaikyti kelyje.

 

 

Kas yra mikrošalinimas?

 

Mikrošalinimas — tai talpyklos tipas, kuris visiškai sukuria puslapių failus ir leidžia vietoj užklausos į backend serverį pateikti jau paruoštą puslapį.

Pagrindinis tokio šalinimo trūkumas, žinoma, yra tas, kad puslapiai atnaujinami labai retai. Bet kokie tada yra privalumai iš tokio šalinimo?

Paimkime situaciją su silpnu serveriu ir pakankamai greitu tinklalapiu, tačiau jis gauna didelį kiekį užklausų iš botų. Jie apkraus tiek backend, tiek duomenų bazę, kas sukels tinklalapio našumo sumažėjimą, ir jis bus lėtesnis. Čia į pagalbą ateina mikrošalinimas: mes tiesiog pateikiame jau paruoštus puslapius, neapkraudami nei backend, nei duomenų bazės serverio. Taip pat mikrošalinimas leidžia puslapius įkelti kelis kartus greičiau, nes kiekvienos užklausos metu nereikia laukti atsakymo iš backend.

Tokie talpyklos sprendimai netinka dinamiškiems tinklalapiams ir administravimo panelių puslapiams, tačiau jei turite puslapį, kurį atnaujinate, pavyzdžiui, kartą per dieną, tai puikus variantas.

Dabar galime pereiti prie mikrošalinimo konfigūravimo.

 

Mikrošalinimo konfigūravimas

 

Tam mums reikia katalogo, kuriame bus saugoma mūsų talpykla.

Šiame straipsnyje bus naudojama dalis RAM kaip disko vieta, nes tai efektyviau nei saugoti tokius failus diske.

Pirmiausia sukursime katalogą, kuriame bus saugoma mūsų talpykla, mūsų atveju /home/cache:

 

 

mkdir /home/cache

 

 

Prijungsime 1 GB RAM kaip failų vietą naudodami komandą:

 

 

mount -t tmpfs -o size=1G tmpfs  /home/cache

 

Ir pridėsime šios erdvės prijungimą kiekvieną kartą paleidžiant serverį (reikia pridėti šią eilutę į failą /etc/fstab):

 

 

tmpfs /home/cache tmpfs rw,size=1G 0 0

 

Taip pat nustatome saugius teises katalogui:

 
chown www-data:www-data -R /home/cache
chmod 700 /home/cache

Mikrošalinimas nginx+apache ir konfigūracijos niuansai - 2

 

Paruošta, mes paruošėme vietą talpyklai. Šio sprendimo privalumas yra tas, kad serverio perkrovimo atveju visa talpykla išvaloma.

Dabar mes užsiimsime potencialiomis problemomis, kurios gali trukdyti dirbti su talpykla, ir dėl kurių ji neveiks, net jei talpyklos failai bus kuriami. Pirmas dalykas, kurį reikia padaryti — nustatyti PHP parametrą session.cache_limiter į public, kitaip svetainės antraštėje bus nurodyta Pragma: no-cache, kas neleis mums teisingai naudoti ir kurti talpyklą.

 

Mikrošalinimas nginx+apache ir konfigūracijos niuansai - 3

Antra problema — reikia pridėti eilutę į jūsų svetainės .htaccess failą. Rekomenduoju nustatyti max-age taip pat, kaip ir kitai talpyklai, kad talpykla nesenstų:

 

 
Header set Cache-Control "max-age=300, public"

Mikrošalinimas nginx+apache ir konfigūracijos niuansai - 4

 

Dabar galime būti tikri, kad beveik niekas netrukdys mums naudoti talpyklą. Svarbiausią paliksiu pabaigai, o tai yra Nginx konfigūravimas.

Failo /etc/nginx/nginx.conf sekcijoje http reikia pridėti šias eilutes:

 

 
proxy_cache_path /home/cache levels=1:2 keys_zone=global_cache:100m max_size=1g inactive=5m;
proxy_cache_valid any 5m;
proxy_cache_valid 200 5m;
proxy_cache_valid 404 15s;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_503;
proxy_cache_lock on;

Mikrošalinimas nginx+apache ir konfigūracijos niuansai - 5

 

Į svetainės konfigūracijos failą bloko location / reikia pridėti šias eilutes: 

 

location / {
proxy_cache global_cache;
add_header X-Cache-Status $upstream_cache_status;
proxy_cache_key $host$request_uri;
proxy_ignore_headers "Set-Cookie";
proxy_pass http://backend;
}

Mikrošalinimas nginx+apache ir konfigūracijos niuansai - 6

 

ISPManager atveju šias eilutes reikia pridėti į bloką location @fallback, nes visos užklausos į backend eina per šį bloką.

Dabar paaiškinsiu, už ką atsako kiekviena eilutė, kurią pridėjome konfigūracijose:

  • proxy_cache_path /home/cache levels=1:2 keys_zone=global_cache:100m max_size=1g inactive=5m;

    • proxy_cache_path — kelias, kur bus saugoma talpykla.
    • levels=1:2 — galima naudoti ne daugiau kaip 3 įdėties (pavyzdžiui, 1:2:3). Skaičiai nurodo simbolių skaičių talpyklos katalogų pavadinimuose, kas būtina greitam darbui lėtuose diskuose. Jei naudoti tik levels=1, lėtuose diskuose talpyklos nauda bus maža, nes bus kuriama didelis kiekis failų. Rekomenduoju naudoti jau paruoštą nustatymą.
    • keys_zone=global_cache:100m — zonos pavadinimas, kuriai kreipsis mūsų svetainės. Jei talpykla sukonfigūruota zonai global_cache, ji ieškos failų būtent kataloge /home/cache. 100m — talpyklos vardų zonos dydis.
    • max_size=1g — bendras talpyklos dydis.
    • inactive=5m — laikas, per kurį talpykla laikoma aktyvia. Jei talpykla nebus naudojama per šį laiką, sistema laikys ją neaktyvia ir gali ją ištrinti.
  • proxy_cache_valid any 5m; — laikas, per kurį talpykla bus saugoma. any reiškia, kad visi HTTP kodai, išskyrus atskirai nurodytus, bus saugomi 5 minutes.

  • proxy_cache_use_stale error timeout invalid_header updating http_500 http_503; — leidžia naudoti pasenusią talpyklą nurodytų klaidų atveju.

  • proxy_cache_lock on; — neleidžia kurti tų pačių talpyklų iš kelių užklausų vienu metu.

  • proxy_cache global_cache; — nurodo, kurią talpyklos zoną naudos svetainė.

  • proxy_cache_key $host$request_uri; — talpyklos statuso tikrinimas. Jei antraštėje bus X-Cache-Status: HIT, tai viskas teisingai sukonfigūruota. Jei MISS, reikia ieškoti priežasčių.

  • proxy_ignore_headers "Set-Cookie"; — leidžia kurti užklausą, ignoruojant slapukus. Be to, talpykla nerodys HIT, nes kiekviena užklausa bus unikali.

  • proxy_pass http://backend; — čia reikia nurodyti backend serverio IP ir prievadą (pavyzdžiui, localhost:8080, jei naudojamas Apache2 kaip backend serveris).

Talpyklos statusą galima patikrinti komanda:

 
curl -I http://Jūsų_svetainė

​​​​​​​Mikrošalinimas nginx+apache ir konfigūracijos niuansai - 7

 

Atsakyme bus antraštė X-Cache-Status: HIT (arba MISS, BYPASS). Viskas, kas nėra HIT, — tai klaida.

Paruošta. Mes sukonfigūravome mikrošalinimą svetainėje.

*Svetainė articlesite.com sukurta specialiai šiam straipsniui.

 

Taip pat siūlome apsvarstyti kitas naudingas straipsnius: