Statik saytga xizmat ko'rsatish
Nginx'ning eng asosiy va eng ko'p ishlatiladigan vazifasi โ statik saytga xizmat ko'rsatish. Ya'ni disk'da yotgan HTML, CSS, JavaScript fayllar va rasmlarni brauzerga uzatish. Ushbu darsda oddiy statik saytni to'liq sozlashni, try_files, 404 sahifasi, gzip siqish va keshlashni batafsil o'rganamiz.
Oddiy statik sayt uchun config
Faraz qilaylik, saytimiz fayllari /var/www/mysite papkasida (ichida index.html, style.css va h.k.). Eng sodda config quyidagicha:
server {
listen 80;
server_name mysite.com www.mysite.com;
root /var/www/mysite;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Bu config'ni /etc/nginx/sites-available/mysite fayliga saqlab, keyin uni faollashtiramiz:
sudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/
sudo nginx -t
sudo nginx -s reload
root va index'ni tushunish
root โ bu saytning "ildiz" papkasi. Brauzerdan kelgan yo'l shu papkaga qo'shiladi:
- So'rov
/→ Nginx/var/www/mysite/papkasiga qaraydi; - So'rov
/style.css→ Nginx/var/www/mysite/style.cssfaylini beradi; - So'rov
/blog/post.html→ Nginx/var/www/mysite/blog/post.htmlfaylini beradi.
index esa papka so'ralganda (fayl nomi ko'rsatilmaganda) qaysi faylni ochishni bildiradi. index index.html; bo'lsa, / so'ralganda /var/www/mysite/index.html qaytariladi.
root va index ni server darajasida bir marta yozsangiz, ular ichdagi barcha location bloklariga ta'sir qiladi. Bu takrorlashning oldini oladi.try_files direktivasi
try_files โ statik sayt uchun eng muhim direktivalardan biri. U Nginx'ga bir nechta variantni navbat bilan sinab ko'rishni buyuradi. Birinchi topilgan faylni qaytaradi:
try_files $uri $uri/ =404;
Bu qatordagi har bir bo'lak alohida ma'noga ega:
$uriโ avval so'ralgan yo'lga aniq mos fayl bor-yo'qligini tekshiradi (masalan,/about.html);$uri/โ agar fayl topilmasa, o'sha nomdagi papka bormi tekshiradi (va ichidagiindexfaylni beradi);=404โ agar ikkalasi ham topilmasa, 404 (topilmadi) xatoligini qaytaradi.
$uri โ bu Nginx'ning ichki o'zgaruvchisi: u joriy so'rov yo'lini bildiradi. Nginx'da bunday o'zgaruvchilar $ belgisi bilan boshlanadi (masalan, $host, $remote_addr).
try_files $uri $uri/ /index.html; yoziladi โ topilmagan har qanday yo'l uchun index.html qaytariladi, ilova esa sahifani o'zi ko'rsatadi.location bilan yo'llarni boshqarish
Turli fayl turlariga turli qoidalar berish uchun location ishlatamiz. Masalan, rasm va statik resurslarni alohida ajratish:
server {
listen 80;
server_name mysite.com;
root /var/www/mysite;
index index.html;
location / {
try_files $uri $uri/ =404;
}
# rasm, css, js kabi statik fayllar uchun alohida qoida
location ~* \.(jpg|jpeg|png|gif|css|js|ico|svg)$ {
expires 30d;
access_log off;
}
}
Bu yerda ~* โ registrga sezgir bo'lmagan regulyar ifoda mosligi. Ya'ni .jpg ham, .JPG ham mos keladi.
Maxsus 404 sahifasi
Foydalanuvchi mavjud bo'lmagan sahifani so'raganda standart, quruq 404 o'rniga o'zingizning chiroyli sahifangizni ko'rsatishingiz mumkin. Buning uchun error_page direktivasidan foydalanamiz:
server {
listen 80;
server_name mysite.com;
root /var/www/mysite;
index index.html;
location / {
try_files $uri $uri/ =404;
}
# 404 xatoligida maxsus sahifani ko'rsatish
error_page 404 /404.html;
location = /404.html {
internal;
}
}
Bu yerda error_page 404 /404.html; โ 404 xatolik yuz berganda /404.html faylini ko'rsatishni buyuradi. location = /404.html { internal; } esa bu sahifaga faqat Nginx ichidan (foydalanuvchi to'g'ridan-to'g'ri emas) kirilishini ta'minlaydi.
error_page 500 502 503 504 /50x.html;gzip siqishni yoqish
gzip โ matnli fayllarni (HTML, CSS, JS, JSON) brauzerga uzatishdan oldin siqib, hajmini kichraytiradigan mexanizm. Bu sahifa yuklanishini sezilarli tezlashtiradi, chunki tarmoq orqali kamroq ma'lumot yuboriladi. Odatda http kontekstida yoqiladi:
http {
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
gzip_min_length 1000;
gzip_comp_level 5;
}
gzip on;โ siqishni yoqadi;gzip_typesโ qaysi fayl turlarini siqish kerakligini belgilaydi (rasmlar allaqachon siqilgan, ularni qayta siqish shart emas);gzip_min_length 1000;โ faqat 1000 baytdan katta fayllar siqiladi (kichik fayllarni siqishning foydasi yo'q);gzip_comp_level 5;โ siqish darajasi (1 dan 9 gacha; balandroq โ kuchliroq siqish, lekin ko'proq CPU sarfi).
Kesh sarlavhalari
Rasm, CSS va JS kabi kamdan-kam o'zgaradigan fayllarni brauzer o'z xotirasida (keshda) saqlab, keyingi tashriflarda serverdan qayta so'ramasligi mumkin. Buni expires direktivasi orqali sozlaymiz:
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff2)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
expires 30d;โ brauzerga bu faylni 30 kun davomida keshda saqlashni aytadi (mosExpiresvaCache-Controlsarlavhalarini avtomatik qo'shadi);add_header Cache-Control "public";โ faylni har qanday kesh (brauzer, proxy) saqlashi mumkinligini bildiradi.
style.v2.css yoki style.css?v=2). Zamonaviy qurish vositalari (build tools) buni avtomatik bajaradi.To'liq namuna
Yuqoridagi barcha elementlarni birlashtirgan to'liq, ishlatishga tayyor server bloki:
server {
listen 80;
server_name mysite.com www.mysite.com;
root /var/www/mysite;
index index.html;
# asosiy marshrutlash
location / {
try_files $uri $uri/ =404;
}
# statik resurslarni uzoq muddat keshlash
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff2)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
access_log off;
}
# maxsus xato sahifalari
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
# gzip (agar http blokida yoqilmagan bo'lsa)
gzip on;
gzip_types text/css application/javascript application/json;
}
Xulosa
- Statik sayt uchun asosiy sozlamalar:
root,indexvalocation /; try_files $uri $uri/ =404;faylni, so'ng papkani sinab ko'radi, topmasa 404 beradi;- SPA uchun
try_files $uri $uri/ /index.html;ishlatiladi; error_pagemaxsus 404 va boshqa xato sahifalarini beradi;gzip on;matnli fayllarni siqib, saytni tezlashtiradi;expiresvaCache-Controlstatik resurslarni brauzer keshida saqlaydi.