Konfiguratsiya asoslari
Nginx'ning kuchi uning konfiguratsiya fayli (config) da yashiringan. Nginx nima qilishini aynan shu fayl belgilaydi. Ushbu darsda config'ning tuzilishini, uning bo'limlarini (kontekstlarni), direktiva sintaksisini va eng muhim bloklarni โ server hamda location ni batafsil o'rganamiz.
nginx.conf tuzilishi
Asosiy config fayli โ /etc/nginx/nginx.conf. U ichma-ich joylashgan bloklar (kontekstlar) va direktivalar (buyruqlar) dan iborat. Umumiy ko'rinishi quyidagicha:
# main kontekst (fayl eng tashqi darajasi)
user www-data;
worker_processes auto;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name example.com;
location / {
root /var/www/html;
index index.html;
}
}
}
Diqqat qiling: bloklar bir-birining ichida joylashadi. http ichida server, server ichida location. Bu iyerarxiya (ichma-ichlik) Nginx'ni tushunishning kalitidir.
Direktiva sintaksisi
Direktiva โ bu Nginx'ga beriladigan bitta ko'rsatma. Ikki turi bor:
- Oddiy direktiva: nom va qiymatlardan iborat, oxirida
;(nuqta-vergul) qo'yiladi. Masalan:listen 80; - Blokli direktiva: nomdan keyin
{ ... }jingalak qavslar keladi va ichida boshqa direktivalar bo'ladi. Masalan:server { ... }
# Oddiy direktiva โ oxirida nuqta-vergul shart:
worker_processes auto;
server_name example.com www.example.com;
# Blokli direktiva โ jingalak qavslar bilan:
events {
worker_connections 1024;
}
; qo'yishni unutish. Bunda nginx -t "unexpected end of file" yoki shunga o'xshash xatolik beradi. Har bir oddiy direktiva albatta nuqta-vergul bilan tugashi shart.Izohlar # belgisi bilan boshlanadi โ Nginx o'sha qatordagi # dan keyingi hamma narsani e'tiborsiz qoldiradi.
Kontekstlar (bloklar)
Kontekst โ bu ma'lum bir soha uchun sozlamalarni birlashtirgan blok. Har bir direktiva o'ziga tegishli kontekstda yozilishi kerak. Asosiy kontekstlar:
main kontekst
Bu fayl eng tashqi darajasi โ hech qanday blok ichida bo'lmagan qism. Bu yerda umumiy, butun serverga ta'sir qiluvchi sozlamalar bo'ladi:
user www-data;โ Nginx qaysi tizim foydalanuvchisi nomidan ishlashini belgilaydi;worker_processes auto;โ ishchi jarayonlar soni (autoโ protsessor yadrolari soniga tenglashtiradi);error_log /var/log/nginx/error.log;โ xatoliklar logi joyi.
events kontekst
Ulanishlarni qayta ishlash bilan bog'liq past darajali sozlamalar shu yerda:
events {
worker_connections 1024;
}
worker_connections โ bitta ishchi jarayon bir vaqtda nechta ulanishni ushlab tura olishini belgilaydi.
http kontekst
HTTP va HTTPS trafik bilan bog'liq hamma narsa shu blok ichida bo'ladi. Barcha saytlar (server bloklari) shu http ichida joylashadi. Bu yerda umumiy sozlamalar (masalan, MIME turlari, gzip, loglar) beriladi:
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# bu yerda bir yoki bir nechta server bloki bo'ladi
}
server kontekst
server bloki โ bitta virtual serverni (ya'ni bitta saytni) tavsiflaydi. Bitta Nginx bir nechta server bloki bilan bir nechta saytga xizmat qilishi mumkin. Har biri o'z domeni va portiga ega.
location kontekst
location bloki โ ma'lum URL yo'llari (path) uchun maxsus qoidalarni belgilaydi. U doim server ichida bo'ladi.
server bloki asosiy direktivalari
Har bir server blokida bir necha muhim direktiva bo'ladi:
listen
Server qaysi portni tinglashini belgilaydi. HTTP uchun 80, HTTPS uchun 443:
listen 80;
listen 443 ssl; # HTTPS uchun
server_name
Server qaysi domen nomiga javob berishini belgilaydi. Nginx kelgan so'rovdagi Host sarlavhasini shu bilan solishtiradi:
server_name example.com www.example.com;
Bir necha domenni bo'sh joy bilan ajratib yozish mumkin. Nginx aynan shu domenlar uchun kelgan so'rovlarni shu server blokiga yo'naltiradi.
root
Saytning fayllari qaysi papkada joylashganini bildiradi. Nginx so'ralgan faylni shu papkadan qidiradi:
root /var/www/example.com;
Masalan, brauzer /about.html so'rasa, Nginx /var/www/example.com/about.html faylini qaytaradi.
index
Papka so'ralganda (masalan, oddiygina /) qaysi faylni standart qilib qaytarishni belgilaydi:
index index.html index.htm;
Nginx birinchi topilgan faylni qaytaradi โ avval index.html ni izlaydi, topmasa index.htm ni.
location bloki asoslari
location URL yo'liga qarab turli qoidalar qo'llash imkonini beradi. Eng oddiy shakli โ prefiks bo'yicha mos kelish:
server {
listen 80;
server_name example.com;
root /var/www/example.com;
# asosiy yo'l โ hamma so'rovlar shu yerga tushadi
location / {
index index.html;
}
# /images/ bilan boshlanadigan so'rovlar uchun alohida qoida
location /images/ {
root /var/data;
}
}
Bu misolda /images/logo.png so'ralsa, Nginx uni /var/data/images/logo.png dan oladi (ikkinchi location root'i tufayli). Boshqa barcha so'rovlar esa birinchi location / ga tushadi.
location bir necha xil mos kelish turini qo'llab-quvvatlaydi:
location /โ prefiks bo'yicha (shu bilan boshlanadigan hamma yo'llar);location = /aniqโ aniq mos kelish (faqat shu yo'l);location ~ \.php$โ regulyar ifoda bo'yicha (harf-registrga sezgir);location ~* \.(jpg|png)$โ regulyar ifoda (registrga sezgir emas).
location mos kelganda maxsus tartib bo'yicha eng mosini tanlaydi: avval aniq mos kelish (=), so'ng regulyar ifodalar, oxirida eng uzun prefiks. Boshlanishida buni chuqur bilish shart emas โ asosiy prefiks va aniq mos kelishni tushunish yetarli.Xulosa
- Nginx config'i ichma-ich joylashgan kontekstlar va direktivalardan iborat;
- Oddiy direktiva
;bilan tugaydi, blokli direktiva{ }ishlatadi; - Asosiy kontekstlar:
main→events/http→server→location; serverbloki bitta saytni tavsiflaydi:listen,server_name,root,index;locationURL yo'liga qarab maxsus qoidalar qo'llaydi (prefiks, aniq mos kelish, regulyar ifoda).