Nginx

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 โ€” oxirida nuqta-vergul shart:
worker_processes auto;
server_name example.com www.example.com;

# Blokli direktiva โ€” jingalak qavslar bilan:
events {
    worker_connections 1024;
}
Eng ko'p uchraydigan xato โ€” oddiy direktiva oxiriga ; 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:

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:

Nginx bir nechta 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