Reverse proxy va load balancing
1. Reverse Proxy (Teskari proksi)
Reverse Proxy — bu foydalanuvchi bilan server o'rtasida vositachi (oraliq) bo'lib xizmat qiladigan server. U kiruvchi so'rovlarni qabul qilib, ularni ichki serverlarga (masalan, backend API'ga va eng oddiy misol bu nginx reverse proxy) uzatadi, so'ngra javobni foydalanuvchiga qaytaradi.
1.1 Misol:
Foydalanuvchi example.com saytiga kiradi.
Nginx serveri (reverse proxy) bu so'rovni oladi.
Nginx bu so'rovni ichki localhost:3000 (masalan, Node.js) serverga uzatadi.
Node.js javobni qaytaradi → Nginx → foydalanuvchiga yuboradi.
1.2 Foydasi:
Xavfsizlik: Foydalanuvchi haqiqiy backend IP manzilini bilmaydi.
SSL/TLS offloading: HTTPS bilan ishlashni Nginx bajaradi, backend esa HTTP’da ishlaydi.
Caching: Ma'lumotlar keshlanadi va tez yetkaziladi.
Static fayllar: Frontend fayllarni xizmat qiladi (.html, .css, .js).
2 Load Balancing (Yuklama muvozanatlovchi)
Load Balancer — bu ko'p backend serverlar orasida so'rovlarni taqsimlaydi. Maqsad: yuklamani teng taqsimlash va tizimning barqaror ishlashini ta’minlash.
2.1 Misol:
Sizda 3 ta Node.js server bor:
localhost:3001
localhost:3002
localhost:3003
Nginx oldida load balancer konfiguratsiyasi yozilgan.
Har bir kiruvchi so'rovni u har xil serverga yuboradi (navbati bilan yoki eng kam band bo'lganiga).
2.2 Load balancing strategiyalari:
Round Robin – navbati bilan aylantirib yuboradi.
Least Connections – eng kam ulanishga ega serverga yuboradi.
IP Hash – foydalanuvchining IP manziliga qarab yuboradi.
3. Tasavvur qilaylik:
-
Bizda 3 ta backend server bor:
http://localhost:3001http://localhost:3002http://localhost:3003
-
Foydalanuvchi sizning domeningiz:
http://myapp.uzorqali murojaat qiladi. -
Siz istaysizki, Nginx foydalanuvchi so'rovlarini bu 3 serverga muvozanatli (load balancing) qilib uzatsin.
nginx.conf yoki sites-available/myapp.conf konfiguratsiyasi:
# 1. HTTP blok – umumiy sozlamalar
http {
upstream backend_servers {
# 2. Bu yerda backend serverlar ro'yxati – Load balancing qilinadi
server 127.0.0.1:3001;
server 127.0.0.1:3002;
server 127.0.0.1:3003;
# Round-robin usuli avtomatik ishlaydi
}
server {
listen 80; # 3. HTTP so'rovlarni 80-port orqali qabul qilamiz
server_name myapp.uz; # 4. Domen nomi (real domen ham bo'lishi mumkin)
# 5. Static fayllar joylashgan joy (masalan, React build)
location / {
root /var/www/myapp-frontend;
index index.html;
try_files $uri /index.html;
}
# 6. API so'rovlar (masalan, /api) backend serverlarga uzatiladi
location /api/ {
proxy_pass http://backend_servers; # 7. Bu yerda load balancer ishlaydi
proxy_http_version 1.1;
# 8. Quyidagilar foydalanuvchi ma’lumotlarini saqlash uchun kerak
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 9. Error page
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
}
Qadam-baqadam tushuntirish:
| Qadam | Qator | Izoh |
|---|---|---|
| 1 | http {} | Barcha HTTP konfiguratsiyalar shu blokda bo'ladi |
| 2 | upstream backend_servers | Bu nom bilan biz bir nechta serverni guruhlaymiz |
| 3 | listen 80 | HTTP trafikni 80-portda eshitadi |
| 4 | server_name myapp.uz | Saytingiz domeni (localda ham test qilsa bo'ladi) |
| 5 | location / | Foydalanuvchi sahifaga kirsa (masalan, myapp.uz/), frontend fayllarni beradi |
| 6 | location /api/ | API so'rovlar shu yo'nalish orqali uzatiladi |
| 7 | proxy_pass http://backend_servers | So'rovlar 3001, 3002, 3003 ga navbati bilan uzatiladi |
| 8 | proxy_set_header | Foydalanuvchining IP va boshqa kontekstlarini saqlab yuboradi |
| 9 | error_page | Agar server xato qilsa, foydalanuvchiga foydali sahifa ko'rsatadi |
Ishlatish uchun:
1. Bu faylni /etc/nginx/sites-available/myapp.conf ga yozing
2. So'ng link yarating:
sudo ln -s /etc/nginx/sites-available/myapp.conf /etc/nginx/sites-enabled/
3. nginx konfiguratsiyasini tekshiring:
sudo nginx -t
4. Nginx’ni qayta ishga tushiring:
sudo systemctl restart nginx
Test qilish:
- Brauzerga
http://myapp.uz/api/hellodeb kirganingizda, - So'rov
backend_serversdan biriga (3001, 3002 yoki 3003) boradi - Har bir server logiga qarab, qaysi biri javob berganini ko'rishingiz mumkin
4. Reverse Proxy vs Load Balancer
| Xususiyat | Reverse Proxy | Load Balancer |
|---|---|---|
| Maqsad | So'rovni oraliq orqali uzatish | Yuklamani bir nechta serverga taqsimlash |
| Foyda | Xavfsizlik, SSL, caching | Performance, scalability |
| Foydalanish | 1 ta backend bilan ishlasa ham bo'ladi | Ko'p backendlar bo'lishi kerak |
| Texnologiyalar | Nginx, Apache, HAProxy | Nginx, HAProxy, AWS ELB, Traefik |