Nginx — web server, reverse proxy, load balancer va static fayllarni tarqatish uchun ishlatiladigan yuqori unumdor server dasturi. Nginx ko‘pincha web saytlar, backend API’lar, frontend build fayllar, SSL sertifikatlar va Docker service’larni internetga chiqarishda ishlatiladi.
Nginx katta trafikni samarali qayta ishlashi, yengil ishlashi va konfiguratsiyasi moslashuvchanligi bilan web infratuzilmada keng qo‘llanadi.
Vazifasi
Nginx client va server o‘rtasidagi HTTP so‘rovlarni qabul qiladi, qayta ishlaydi va kerakli joyga yo‘naltiradi.
Nginx quyidagi vazifalarda ishlatiladi:
- web sahifalarni foydalanuvchiga berish;
- static fayllarni tarqatish;
- backend API’ga reverse proxy qilish;
- SSL sertifikat orqali HTTPS yoqish;
- bir nechta serverga load balancing qilish;
- domen va subdomenlarni boshqarish;
- cache bilan ishlash;
- gzip yoki brotli compression qo‘llash;
- rate limiting qilish;
- Docker containerlarni tashqi internetga ulash.
Masalan, foydalanuvchi uzbekdevs.uz saytini ochganda, Nginx so‘rovni qabul qilib, kerakli frontend yoki backend service’ga yo‘naltirishi mumkin.
Nginx qanday ishlaydi?
Nginx clientdan kelgan so‘rovni tinglaydi. So‘rov qaysi domen, port yoki path orqali kelganiga qarab, uni static faylga, backend serverga yoki boshqa service’ga yo‘naltiradi.
Oddiy jarayon:
- foydalanuvchi browser orqali saytga kiradi;
- browser serverga HTTP yoki HTTPS so‘rov yuboradi;
- Nginx so‘rovni qabul qiladi;
- konfiguratsiya asosida so‘rovni tahlil qiladi;
- kerak bo‘lsa static faylni qaytaradi;
- kerak bo‘lsa backend API’ga proxy qiladi;
- backend javobini clientga qaytaradi.
Nginx asosan so‘rovlarni tez va samarali boshqarish uchun ishlatiladi.
Web server
Web server — foydalanuvchi so‘roviga web kontent qaytaradigan server dasturi. Nginx web server sifatida HTML, CSS, JavaScript, rasm, video va boshqa fayllarni foydalanuvchiga uzatishi mumkin.
Web server sifatida Nginx quyidagilarni beradi:
- HTML fayllar;
- CSS fayllar;
- JavaScript fayllar;
- rasm va ikonlar;
- video va audio fayllar;
- font fayllar;
- dokumentatsiya sahifalari;
- frontend build natijalari.
Masalan, React yoki Vue build qilingandan keyin hosil bo‘lgan static fayllar Nginx orqali serve qilinishi mumkin.
Reverse proxy
Reverse proxy — clientdan kelgan so‘rovni backend serverga yo‘naltiradigan oraliq server. Nginx reverse proxy sifatida juda ko‘p ishlatiladi.
Reverse proxy jarayonida:
- client so‘rovni Nginx’ga yuboradi;
- Nginx so‘rovni backend service’ga uzatadi;
- backend javob qaytaradi;
- Nginx javobni clientga qaytaradi.
Masalan, api.example.com so‘rovlari Nginx orqali localhost:8000 da ishlayotgan backend API’ga yo‘naltirilishi mumkin.
Forward proxy va reverse proxy farqi
Forward proxy va reverse proxy ikkalasi ham oraliq server bo‘lsa-da, ularning vazifasi farq qiladi.
- Forward proxy client nomidan tashqi internetga so‘rov yuboradi;
- Reverse proxy tashqi client so‘rovlarini ichki serverlarga yo‘naltiradi;
- forward proxy ko‘proq client tomonda ishlatiladi;
- reverse proxy server infratuzilmasida ishlatiladi;
- Nginx asosan reverse proxy sifatida keng qo‘llanadi.
Masalan, kompaniya ichki internet filtri forward proxy bo‘lishi mumkin, web sayt oldida turgan Nginx esa reverse proxy hisoblanadi.
Static files
Static files — serverda tayyor holatda saqlanadigan va o‘zgarmas fayllar. Nginx static fayllarni tez tarqatish uchun ishlatiladi.
Static fayllarga quyidagilar kiradi:
- HTML;
- CSS;
- JavaScript;
- rasm;
- font;
- favicon;
- video;
- PDF;
- frontend build fayllari.
Masalan, /static/ path orqali CSS va JavaScript fayllar Nginx tomonidan to‘g‘ridan-to‘g‘ri berilishi mumkin.
Dynamic request
Dynamic request — backend tomonidan qayta ishlanishi kerak bo‘lgan so‘rov. Bunday so‘rovlar odatda API, login, ro‘yxatdan o‘tish, qidiruv yoki database bilan bog‘liq bo‘ladi.
Dynamic so‘rovlar quyidagilarga yuborilishi mumkin:
Masalan, /api/users so‘rovi Nginx orqali backend service’ga proxy qilinadi.
Server block
Server block — Nginx konfiguratsiyasida bitta domen yoki virtual host uchun yoziladigan blok. Server block qaysi domen, port va qoidalar ishlashini belgilaydi.
Server block ichida quyidagilar bo‘lishi mumkin:
listen;server_name;root;index;location;ssl_certificate;proxy_pass;- log fayllar;
- redirect qoidalari.
Masalan, example.com va api.example.com uchun alohida server block yozilishi mumkin.
Listen
listen — Nginx qaysi portni tinglashini belgilaydi.
Keng ishlatiladigan portlar:
80— HTTP;443— HTTPS;8080— alternativ web port;8000— development yoki backend port;3000— Node.js frontend development port.
Masalan:
listen 80;
Bu Nginx 80-portdagi HTTP so‘rovlarni qabul qilishini bildiradi.
Server name
server_name — qaysi domen yoki subdomen shu server blockga tegishli ekanini bildiradi.
Misollar:
server_name example.com;
server_name api.example.com;
server_name www.example.com example.com;
Nginx kelgan so‘rovdagi domain nomiga qarab kerakli server blockni tanlaydi.
Location
Location — Nginx’da ma’lum URL path uchun alohida qoidalar yoziladigan blok.
Location misollari:
/— asosiy path;/api/— API so‘rovlar;/static/— static fayllar;/media/— upload fayllar;/admin/— admin panel;/health/— health check endpoint.
Masalan, /api/ path backendga proxy qilinib, /static/ path esa serverdagi fayllardan berilishi mumkin.
Root
root — static fayllar qaysi papkadan berilishini bildiradi.
Misol:
root /var/www/example;
Bu holatda Nginx static fayllarni /var/www/example papkasidan qidiradi.
Root odatda frontend build fayllari, HTML sahifalar yoki static assets uchun ishlatiladi.
Index
index — papka ochilganda qaysi fayl asosiy sahifa sifatida qaytarilishini bildiradi.
Misol:
index index.html;
Agar foydalanuvchi saytning asosiy manzilini ochsa, Nginx index.html faylini qaytarishi mumkin.
Proxy pass
proxy_pass — Nginx so‘rovni qaysi backend serverga uzatishini belgilaydi.
Misol:
proxy_pass http://localhost:8000;
Bu konfiguratsiya kelgan so‘rovni localhost:8000 da ishlayotgan backendga yuboradi.
Docker muhitida esa quyidagicha bo‘lishi mumkin:
proxy_pass http://backend:8000;
Bu yerda backend Docker Compose’dagi service nomi bo‘lishi mumkin.
Proxy headers
Nginx backendga so‘rov uzatganda qo‘shimcha headerlar yuborishi mumkin. Bu headerlar backendga client haqida ma’lumot beradi.
Keng ishlatiladigan proxy headerlar:
Host;X-Real-IP;X-Forwarded-For;X-Forwarded-Proto;Upgrade;Connection.
Masalan, X-Forwarded-For backendga asl client IP manzilini bilishga yordam beradi.
HTTPS
HTTPS — HTTP protokolining shifrlangan ko‘rinishi. Nginx SSL sertifikat orqali HTTPS so‘rovlarni qabul qilishi mumkin.
HTTPS uchun odatda quyidagilar kerak bo‘ladi:
- SSL sertifikat;
- private key;
- 443-port;
- server block sozlamasi;
- HTTP’dan HTTPS’ga redirect;
- TLS protokollari;
- certificate renewal.
HTTPS foydalanuvchi va server o‘rtasidagi ma’lumot almashuvini shifrlangan holda bajaradi.
SSL sertifikat
SSL sertifikat — sayt domeni haqiqiyligini tasdiqlovchi va HTTPS ulanishni yoqish uchun ishlatiladigan raqamli sertifikat.
Nginx’da SSL sertifikat quyidagilar orqali ulanadi:
Let’s Encrypt sertifikatlari Nginx bilan keng ishlatiladi.
HTTP’dan HTTPS’ga redirect
Nginx HTTP so‘rovlarni HTTPS manzilga yo‘naltirishi mumkin. Bu foydalanuvchi saytni http:// bilan ochsa ham, https:// versiyasiga o‘tishini ta’minlaydi.
Redirect quyidagi holatlarda ishlatiladi:
- xavfsiz ulanishni majburiy qilish;
- SEO’da bitta canonical protokol saqlash;
- foydalanuvchini HTTPS versiyaga o‘tkazish;
- eski HTTP linklarni yangi manzilga yo‘naltirish.
Nginx redirect qoidalari return 301 yoki rewrite orqali yozilishi mumkin.
Load balancing
Load balancing — kelayotgan so‘rovlarni bir nechta backend server o‘rtasida taqsimlash jarayoni. Nginx load balancer sifatida ishlashi mumkin.
Load balancing quyidagi holatlarda ishlatiladi:
- bir nechta backend instance ishlaganda;
- trafik katta bo‘lganda;
- service barqarorligini oshirishda;
- serverlar orasida yukni taqsimlashda;
- zero-downtime deploy jarayonlarida.
Masalan, Nginx so‘rovlarni backend1, backend2 va backend3 orasida taqsimlashi mumkin.
Upstream
Upstream — Nginx’da bir yoki bir nechta backend serverlar guruhini belgilash uchun ishlatiladi.
Upstream ichida quyidagilar bo‘lishi mumkin:
- backend server manzillari;
- portlar;
- load balancing algoritmi;
- weight;
- backup server;
- health bilan bog‘liq sozlamalar.
Masalan, upstream backend bloki ichida bir nechta API server ko‘rsatilishi mumkin.
Load balancing algoritmlari
Nginx bir nechta load balancing usulini qo‘llashi mumkin.
Asosiy algoritmlar:
- round robin — so‘rovlar navbat bilan serverlarga taqsimlanadi;
- least connections — eng kam ulanishga ega server tanlanadi;
- ip hash — client IP asosida server tanlanadi;
- weighted — ayrim serverlarga ko‘proq trafik beriladi.
Bu algoritmlar trafikni backend serverlar orasida boshqarishga yordam beradi.
Cache
Nginx cache orqali ayrim javoblarni vaqtincha saqlab, keyingi so‘rovlarga tezroq javob berishi mumkin.
Cache quyidagi ma’lumotlarda ishlatiladi:
Cache server yukini kamaytiradi va response vaqtini qisqartiradi.
Browser cache
Nginx browser cache headerlarini berishi mumkin. Bu browserga faylni qancha vaqt lokal saqlash kerakligini bildiradi.
Browser cache bilan bog‘liq headerlar:
Cache-Control;Expires;ETag;Last-Modified.
Masalan, rasm va font fayllari uzoqroq muddat browser cache’da saqlanishi mumkin.
Gzip compression
Gzip compression — response hajmini kichraytirish uchun ishlatiladigan siqish usuli. Nginx HTML, CSS, JavaScript va boshqa matnli fayllarni gzip orqali siqib yuborishi mumkin.
Gzip quyidagi fayllarda ishlatiladi:
Compression trafik hajmini kamaytiradi va sahifa yuklanishiga ta’sir qiladi.
Brotli compression
Brotli — gzipga o‘xshash, ko‘pincha samaraliroq siqish algoritmi. Nginx’da Brotli alohida modul orqali ishlashi mumkin.
Brotli quyidagi fayllarda qo‘llanishi mumkin:
- HTML;
- CSS;
- JavaScript;
- JSON;
- SVG;
- font fayllar.
Brotli zamonaviy browserlar tomonidan qo‘llab-quvvatlanadi.
Rate limiting
Rate limiting — ma’lum vaqt ichida client qancha so‘rov yuborishini cheklash mexanizmi. Nginx rate limiting orqali serverni ortiqcha yukdan yoki oddiy hujumlardan himoyalashda ishlatiladi.
Rate limiting quyidagi holatlarda uchraydi:
- login endpoint;
- API endpoint;
- search endpoint;
- file upload;
- public formalar;
- bot trafik;
- brute force urinishlari.
Masalan, bitta IP bir soniyada ma’lum miqdordan ko‘p so‘rov yuborsa, Nginx uni cheklashi mumkin.
Access log
Access log — Nginx qabul qilgan so‘rovlar haqida yozib boriladigan log fayl.
Access log ichida quyidagilar bo‘lishi mumkin:
Access log trafikni tahlil qilish va muammolarni aniqlashda ishlatiladi.
Error log
Error log — Nginx ishlashi davomida yuz bergan xatolar yoziladigan log fayl.
Error logda quyidagilar ko‘rinishi mumkin:
- konfiguratsiya xatolari;
- backendga ulanish muammolari;
- permission xatolari;
- SSL xatolari;
- file not found holatlari;
- upstream timeout;
- server ichki xatolari.
Nginx xatolarini tekshirishda error log muhim manba hisoblanadi.
Status code
Nginx HTTP status codelarni qaytarishi yoki backenddan kelgan status codelarni clientga uzatishi mumkin.
Keng uchraydigan status codelar:
200— muvaffaqiyatli javob;301— doimiy redirect;302— vaqtinchalik redirect;400— noto‘g‘ri so‘rov;403— ruxsat yo‘q;404— topilmadi;500— server xatosi;502— bad gateway;503— service unavailable;504— gateway timeout.
Masalan, backend ishlamay qolsa, Nginx 502 Bad Gateway qaytarishi mumkin.
502 Bad Gateway
502 Bad Gateway — Nginx backend serverdan to‘g‘ri javob ololmaganda chiqadigan xato.
502 sabablari:
- backend ishlamayapti;
- backend porti noto‘g‘ri;
- backend container o‘chgan;
- proxy_pass manzili xato;
- firewall ulanishni bloklagan;
- backend juda kech javob qaytargan;
- network muammosi bor.
502 xato reverse proxy bilan ishlaganda ko‘p uchraydi.
404 Not Found
404 Not Found — so‘ralgan fayl yoki path topilmaganda qaytariladigan status code.
404 sabablari:
- fayl mavjud emas;
- URL noto‘g‘ri;
- root papka noto‘g‘ri ko‘rsatilgan;
- frontend routing sozlanmagan;
- location qoidasi noto‘g‘ri;
- backend route mavjud emas.
SPA frontend ilovalarda 404 muammosi routing konfiguratsiyasi bilan bog‘liq bo‘lishi mumkin.
Timeout
Timeout — so‘rov belgilangan vaqt ichida yakunlanmaganda yuz beradigan holat. Nginx backenddan javob kutish vaqtini cheklashi mumkin.
Timeout bilan bog‘liq sozlamalar:
proxy_connect_timeout;proxy_send_timeout;proxy_read_timeout;send_timeout;keepalive_timeout.
Timeout katta API so‘rovlari, sekin database querylar yoki yuklangan backend sababli yuzaga kelishi mumkin.
Client max body size
client_max_body_size — client yuborishi mumkin bo‘lgan maksimal request hajmini belgilaydi.
Bu sozlama quyidagi joylarda muhim:
Agar request hajmi limitdan katta bo‘lsa, Nginx 413 Request Entity Too Large xatosini qaytarishi mumkin.
WebSocket
Nginx WebSocket ulanishlarini ham backendga proxy qilishi mumkin. WebSocket real-time ikki tomonlama aloqa uchun ishlatiladi.
WebSocket quyidagi loyihalarda uchraydi:
- chat;
- live notification;
- online o‘yin;
- real-time dashboard;
- trading platform;
- collaborative editor;
- live tracking.
WebSocket uchun Nginx’da Upgrade va Connection headerlari muhim hisoblanadi.
HTTP/2
HTTP/2 — HTTP protokolining zamonaviy versiyalaridan biri. Nginx HTTP/2 orqali bir ulanish ichida bir nechta so‘rovni samaraliroq uzatishi mumkin.
HTTP/2 quyidagi imkoniyatlarga ega:
- multiplexing;
- header compression;
- connection reuse;
- sahifa resurslarini samarali yuklash;
- HTTPS bilan keng ishlatilish.
Nginx’da HTTP/2 odatda SSL bilan birga yoqiladi.
Virtual host
Virtual host — bitta serverda bir nechta domen yoki saytni alohida konfiguratsiya bilan yuritish usuli. Nginx’da virtual host server blocklar orqali amalga oshiriladi.
Masalan, bitta serverda quyidagilar ishlashi mumkin:
example.com;api.example.com;admin.example.com;blog.example.com;static.example.com.
Har bir domen uchun alohida server block yozilishi mumkin.
Nginx konfiguratsiyasi
Nginx konfiguratsiya fayllari odatda serverda maxsus papkalarda joylashadi.
Keng uchraydigan joylar:
/etc/nginx/nginx.conf;/etc/nginx/sites-available/;/etc/nginx/sites-enabled/;/etc/nginx/conf.d/;/var/log/nginx/.
Konfiguratsiya ichida server blocklar, location qoidalari, SSL sozlamalari, proxy va log sozlamalari yoziladi.
Nginx test
Nginx konfiguratsiyasini tekshirish uchun nginx -t buyrug‘i ishlatiladi.
Misol:
nginx -t
Bu buyruq konfiguratsiyada sintaksis xatosi bor yoki yo‘qligini tekshiradi.
Konfiguratsiya to‘g‘ri bo‘lsa, Nginx reload yoki restart qilinishi mumkin.
Reload va restart
Nginx’da konfiguratsiya o‘zgarganda reload yoki restart ishlatiladi.
- Reload — konfiguratsiyani qayta yuklaydi, lekin service’ni to‘liq to‘xtatmaydi;
- Restart — Nginx service’ni to‘xtatib, qayta ishga tushiradi.
Keng ishlatiladigan buyruqlar:
systemctl reload nginx
systemctl restart nginx
Reload odatda konfiguratsiya yangilanganida ishlatiladi.
Nginx va Docker
Docker muhitida Nginx alohida container sifatida ishlatilishi mumkin. U frontend fayllarni serve qilishi yoki backend containerlarga reverse proxy bo‘lishi mumkin.
Docker’da Nginx quyidagilar bilan ishlaydi:
nginximage;- custom
nginx.conf; - volume orqali config ulash;
- frontend build fayllari;
- Docker network;
- backend service nomlari;
- port mapping;
- SSL sertifikat fayllari.
Masalan, Nginx container backend:8000 service’ga so‘rovlarni yo‘naltirishi mumkin.
Nginx va frontend
Frontend loyihalarda Nginx static build fayllarni tarqatish uchun ishlatiladi.
Frontend bilan Nginx quyidagilarni bajaradi:
index.htmlfaylini serve qilish;- CSS va JavaScript fayllarni berish;
- rasm va fontlarni tarqatish;
- SPA routing uchun fallback qilish;
- cache headerlarini berish;
- gzip compression yoqish.
React, Vue, Angular yoki Svelte buildlari Nginx orqali productionda tarqatilishi mumkin.
Nginx va backend
Backend loyihalarda Nginx reverse proxy sifatida backend ilovani internetga chiqaradi.
Backend bilan Nginx quyidagilarni bajaradi:
- API so‘rovlarni backendga uzatish;
- HTTPS ulanishni qabul qilish;
- backend portini tashqi internetdan yashirish;
- proxy headerlarni uzatish;
- load balancing qilish;
- timeoutlarni boshqarish;
- WebSocket proxy qilish.
Masalan, FastAPI localhost:8000 da ishlasa, Nginx 443-port orqali HTTPS so‘rovlarni qabul qilib, ularni FastAPI’ga yuboradi.
Nginx va SSL
Nginx SSL sertifikatlar bilan HTTPS ulanishni boshqaradi. Bu jarayon SSL termination deb ham ataladi.
SSL termination’da:
- client HTTPS orqali Nginx’ga ulanadi;
- Nginx SSL sertifikatni tekshiradi;
- so‘rovni ichki backendga yuboradi;
- backend HTTP yoki HTTPS orqali javob qaytaradi;
- Nginx javobni clientga HTTPS orqali qaytaradi.
Bu usulda SSL boshqaruvi Nginx darajasida markazlashadi.
Nginx va CDN
Nginx CDN bilan birga ishlashi mumkin. CDN foydalanuvchiga static kontentni geografik yaqin serverlardan yetkazadi, Nginx esa origin server sifatida ishlashi mumkin.
CDN va Nginx birga ishlaganda:
- Nginx origin server bo‘ladi;
- CDN static fayllarni cache qiladi;
- foydalanuvchi CDN’dan javob oladi;
- cache’da yo‘q fayl Nginx’dan olinadi;
- trafikning bir qismi CDN orqali kamayadi.
Bu yondashuv katta trafikdagi saytlar uchun ishlatiladi.
Nginx va Apache farqi
Nginx va Apache ikkalasi ham web server sifatida ishlatiladi, lekin ichki ishlash uslubi va konfiguratsiyasi farq qiladi.
Farqlar:
- Nginx event-driven arxitekturaga ega;
- Apache process/thread-based yondashuvdan foydalanadi;
- Nginx reverse proxy va static fayllarda keng ishlatiladi;
- Apache
.htaccessbilan moslashuvchan konfiguratsiyaga ega; - Nginx katta concurrent ulanishlarda samarali ishlashi bilan tanilgan;
- Apache ko‘plab hosting muhitlarida uzoq yillardan beri ishlatiladi.
Har ikki server web infratuzilmada keng qo‘llanadi.
Nginx xavfsizligi
Nginx xavfsizlik qatlamida muhim rol o‘ynashi mumkin. U bevosita internetdan keladigan so‘rovlarni qabul qilgani uchun xavfsizlik sozlamalari katta ahamiyatga ega.
Nginx xavfsizligida quyidagilar uchraydi:
- HTTPS yoqish;
- eski TLS versiyalarini cheklash;
- rate limiting;
- client body size limit;
- security headerlar;
- directory listingni o‘chirish;
- backend portlarini yashirish;
- access control;
- log monitoring;
- bot trafikni cheklash.
Nginx backend service’lar oldida himoya va yo‘naltirish qatlami sifatida ishlaydi.
Dasturlashdagi o‘rni
Nginx zamonaviy web loyihalarda frontend, backend, API, Docker va server infratuzilmasini bog‘laydigan muhim vositalardan biridir. U foydalanuvchi so‘rovlarini qabul qiladi, kerakli service’ga yo‘naltiradi va web kontentni tarqatadi.
Nginx quyidagi joylarda qo‘llanadi:
- web saytlar;
- backend API;
- frontend static build;
- reverse proxy;
- load balancer;
- SSL termination;
- Docker deployment;
- microservice arxitekturasi;
- CDN origin server;
- production server konfiguratsiyasi.
Nginx web ilovalarni internetga chiqarish, trafikni boshqarish va server qatlamini tartibga solishda keng ishlatiladigan server dasturidir.
Bog‘liq tushunchalar
Server, Hosting, Domen, URL, HTTPS, SSL sertifikat, Reverse proxy, Load balancing, Docker, Backend, Frontend, CDN