Nginx haqida yuz gram
@yetimdasturchi
Web dasturlash sohasida ishlaydiganlarning barchasi bu dasturiy ta'minot haqida bir marta bo'lsada foydalangan bo'lsa kerak.
Web server sifatida foydalanadigan ushbu dasturiy ta'minot ommaviyligi bo'yicha yetakchi o'rinda turadi. Raqobatchi sifatida apache ham bor albatta. Lekin nginx ta'mini bir marta totgan inson apachega qaytib qaramasligi aniq.
Qulayliklari:
1. Statik fayllarni uzatish uchun qulay (avto keshlash bor)
2. Reverse proxy (Turli loyihalarni birlashtirish)
3. Load balancing (ulanishlarni nazorat qilish va mos ravishda javob berish)
4. FastCGI vaa SCGI kabi texnologiyalarni qo'llay olish.
5. Web socketlar.
6. Turlicha protokollarni qo'llash va yana yuzlab imkoniyatlarni o'z ichiga oladi.
Nginxning apachedan asosiy farqi apachedan ko'ra gapga yaxshiroq tushunadi. Ya'ni nginxning fayl strukturasi juda sodda va tushunarli ishlab chiqilgan. Konfiguratsiya fayllar ham ko'plab imkoniyatlarga ega.
Keling ishni dasturni o'rnatishdan boshlasak. Debian asosidagi distributivlar uchun ikkitagina muhim paket bor va shuni o'zini o'rnatish kifoya. Boshqa distributiv yoki operatsion tizimlarda kodlardan kompiliyatsiya qilish ham mumkin:
sudo apt install nginx nginx-extras
Shuningdek aytib o'tish kerakki nginx-extras paketi nginx uchun qo'shimcha modullarni ortiqcha bosh og'riqlarsiz o'rnatish imkonini beradi. Kapot ostidanoq siz uchun zaruriy modullarning barchasi o'rnatiladi.
Fayl strukturasi:
Linuxda nginxning asosiy konfiguratsion fayllari /etc/nginx jildi orqali yuritiladi. Bunda /etc/nginx/nginx.conf fayli asosiy konfiguratsiya fayli hisoblanib qolgan barcha fayllar shu orqali import qilinadi.
Shuningdek /etc/nginx papkasi ichida modules-availlable, modules-enabled, sites-available, sites-enabled kabi papkalarni ham ko'rish mumkin. Bu papkalarda kerakli server konfiguratsiyalarini boshqara olasiz. Enabled va available esa bu systemlinklar xolos. Ya'ni available papkasidan enabled uchun berilgan systemlink dastur ishga tushirilgan vaqtda yuklanadi.
/etc/nginx/nginx.conf fayliga qaraydigan bo'lsak:
Nginx konfiguratsiyalarning eng asosiy yutuqlaridan biri bu ularning blok shaklida ishlashi hisoblanadi. Masalan yuqoridagi fayl kontentiga qaraydigan bo'lsak barcha sozlamalar http{} bloki ichida joylashgan. Bu esa aynan http(s) protokoli uchun javob beradigan qism hisoblanadi. Shuningdek ehtiyojga qarab rtmp va shunga o'xshab ko'plab prokollarni ham sozlash mumkin.
http bloki umumiy bir prokol uchun javob beradi. Uning ichida esa server{} va server bloki ichida location bloklari keladi.
server bloki bu yuritishilishi kerak bo'lsa hostlar yoki soddaroq aytganda har bir web saytlar konfiguratsiya hisoblanadi. Localtion esa web saytlardagi routerlar uchun javob beradi.
http bloki ichi tushunarli bo'lishi uchun sites-available papkasidan server konfiguratsiyalari import qilinadi.
Qo'lda yozilgan fayliga misol:
user www-data;
worker_processes 4;
events {
worker_connections 768;
}
http {
include mime.types;
default_type application/octet-stream;
access_log off;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location /hello {
default_type text/plain;
echo "hello, world!";
}
}
}
Yuqoridagi konfiguratsiyaga tayanadigan bo'lsak localhost domeni 80 porti uchun ochilmoqda va asosiy fayllarni o'qish pakasi etib /var/www/html papkasiga to'g'rilanmoqda. Index bandi birinchi navbatda qaysi faylni yuklash kerakli ekanligini bildiriladi. Fayllarni yuklash tartibini esa shuyerdan belgilashingiz mumkin. Masalan index index.php index.html holatida index.php fayli birinchi yuklanadi. Agarda bunday fayl bo'lmasa index.html fayl yuklashga harakat qilinadi.
location /{} bloki bu root qism hisoblanadi. Ya'ni domendan keyingi keladigan routerlar shu blok orqali harakatlanadi. try_files seksiyasi fayllarni yuklash uchun moslashgan. Yuqoridagi konfiguratsiyada request uridan kelgan so'rov root papkasida qaytarilishga harakat qilinadi, agarda topilmasa 404 xatolik beriladi. Yoki try_files $uri $uri/ /error.html; orqali o'zingizga mos faylga sozlashingiz ham mumkin.
location /hello {} bloki http orqali salom dunyo xabarini brauzerga yuboradi.
Nginx va phpni sozlash:
Bash:
sudo apt install php8.1 php8.1-fpm
Nginx (shuningdek index bandiga index.php qo'shishni unutmang):
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
Nginx orqali nodejs ilovasiga proxy berish:
server {
listen 80;
server_name frontapp.uz;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Yuqoridagi konfiguratsiyalardan ko'rib turganingizdek nginx juda sodda va tushunarli tuzulgan. Unda yana ko'plab ishlarni qilishingiz mumkin. map, if else, lua kabi o'zining juda ko'p qo'shimcha imkoniyalari bor. Hattoki lua, njs moduli orqali lua dasturlash tili va javascriptda to'g'ridan to'g'ri kod yozishingiz ham mumkin.
Nginx katta trafikdagi ulanishlar uchun apachedan ko'ra ancha samarali ishlaydi. Buning asosiy sabablaridan biri apache konfiguratsiyalarning loyiha jildlari ichidan har so'rovda qidiradi, nginx esa ularni boshlang'ich holatda keshlaydi.
Shaxsiy tajribamdan aytishim mumkin mendagi daqiqasiga yuz minglab so'rovlar keladigan loyihalarning ortida nginx ishlamoqda.