nginx reverse proxy bələdçisi
Bu səhifədə
Reverse proxy tətbiqlərinizin qarşısında dayanır və ziyarətçilərin sorğularını onlara ötürür. Önündə nginx olduqda, hansısa portda işləyən Node.js tətbiqi, Docker konteyneri və ya idarəetmə paneli https://app.example.com olur: HTTPS, düzgün başlıqlar və hər şeyi idarə etmək üçün bir yer.
Bu bələdçi nginx-i Ubuntu-da addım-addım reverse proxy kimi qurur: server bloku, başlıqlar, WebSockets, pulsuz HTTPS və ən çox rastlaşacağınız xətalar.
Reverse proxy nə edir
- Bir ümumi giriş nöqtəsi. nginx 80 və 443 portlarını dinləyir və hər domeni və ya yolu lazımi tətbiqə yönləndirir, beləliklə tətbiqlərin özləri heç vaxt birbaşa internetə açılmır.
- HTTPS bir yerdə. Sertifikatları nginx idarə edir; arxasındakı tətbiqlər localhost üzərində adi HTTP ilə işləyə bilər.
- Bir serverdə bir neçə tətbiq.
app.example.com,api.example.comvəexample.com/bloghər biri ayrı xidmətə yönələ bilər. - Əlavələr: sıxılma, keşləmə, yükləmə limitləri və giriş qaydaları, tətbiqə toxunmadan.
Addım 1: nginx-i quraşdırın
sudo apt update sudo apt install nginx
http://your-server-ip ünvanını açın, nginx xoş gəlmisiniz səhifəsini görməlisiniz. ufw istifadə edirsinizsə, veb trafikinə sudo ufw allow 'Nginx Full' ilə icazə verin.
Tətbiqinizin işlədiyinə və serverin özündən əlçatan olduğuna əmin olun, məsələn curl http://127.0.0.1:3000 ilə. Bu alınmasa, nginx də alınmayacaq.
nginx-i və tətbiqlərinizi tam root girişi ilə işlədin: HytHost KVM VPS planları €2.92/ay-dan başlayır.
VPS planlarına baxınAddım 2: Proxy server blokunu yaradın
Ubuntu-da hər sayt /etc/nginx/sites-available/ qovluğunda bir fayl alır və sites-enabled içindəki keçidlə aktivləşdirilir. /etc/nginx/sites-available/app.example.com faylını yaradın:
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
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;
}
}
Onu aktivləşdirin, konfiqurasiyanı yoxlayın və yenidən yükləyin:
sudo ln -s /etc/nginx/sites-available/app.example.com /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx
Domenin A qeydini serverinizə yönləndirin və artıq http://app.example.com tətbiqinizi göstərir. Yenidən yükləmədən əvvəl həmişə nginx -t işlədin: o, yazı səhvlərini sayt çökmədən tutur.
Başlıqlar və sondakı slash
Hostziyarətçinin istədiyi domeni ötürür. Onsuz nginxproxy_passiçindəki ünvanı göndərir və keçidləri host-dan quran tətbiqlər pozulur.X-Real-IPvəX-Forwarded-Forziyarətçinin IP ünvanını ötürür. Onlarsız hər sorğu127.0.0.1ünvanından gəlmiş kimi görünür.X-Forwarded-Prototətbiqə ziyarətçinin HTTPS istifadə edib-etmədiyini bildirir ki, tətbiq dövrəyə düşüb yönləndirmə etməsin.
Ubuntu-nun nginx paketi bu sətirləri /etc/nginx/proxy_params faylında gətirir, ona görə include proxy_params; qısa yoldur.
Sondakı slash vacibdir. Bir yol altında olan tətbiq üçün:
location /app/ {
proxy_pass http://127.0.0.1:3000/;
}
Portdan sonra slash olduqda /app/login tətbiqə /login kimi çatır. Onsuz tətbiq tam /app/login yolunu alır.
WebSockets
Çat tətbiqləri, canlı panellər və bir çox admin panellər WebSockets istifadə edir və onlara iki əlavə başlıq lazımdır. Bu map-i bir dəfə, http blokunun içinə əlavə edin, məsələn yeni /etc/nginx/conf.d/websocket.conf faylında:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
Sonra location içində:
proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_read_timeout 1h;
nginx 60 saniyə ərzində heç nə göndərməyən proxy bağlantısını bağlayır; daha uzun proxy_read_timeout sakit WebSocket bağlantılarını açıq saxlayır. proxy_http_version 1.1 yalnız nginx 1.29.7-dən etibarən standartdır, Ubuntu 24.04 isə 1.24 versiyası ilə gəlir, ona görə bu sətri saxlayın.
Addım 3: Certbot ilə pulsuz HTTPS
sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/local/bin/certbot sudo certbot --nginx -d app.example.com
Certbot pulsuz Let's Encrypt sertifikatı alır, HTTPS ayarlarını server blokunuza əlavə edir və HTTP-ni HTTPS-ə yönləndirə bilər. Sertifikatı avtomatik yeniləyir; sudo certbot renew --dry-run ilə yoxlayın. Sertifikatlar haqqında ətraflı: pulsuz SSL sertifikatını necə almaq olar.
502, 504 və 413 xətalarının həlli
| Xəta | Adi səbəb | Həll |
|---|---|---|
| 502 Bad Gateway | nginx tətbiqə çata bilmir: tətbiq dayandırılıb, çöküb və ya başqa port ya ünvanda dinləyir | Tətbiqi başladın, portu curl http://127.0.0.1:PORT ilə yoxlayın, /var/log/nginx/error.log faylını oxuyun |
| 504 Gateway Timeout | Tətbiqin cavab verməsi 60 saniyədən çox çəkdi | Sorğunu sürətləndirin və ya həmin location üçün proxy_read_timeout dəyərini artırın |
| 413 Request Entity Too Large | Yükləmə nginx-in standart 1 MB limitindən böyükdür | Server blokunda client_max_body_size 50m; təyin edin |
| Yönləndirmə dövrəsi | Tətbiq ziyarətçinin HTTPS istifadə etdiyini bilmir | X-Forwarded-Proto ötürün və tətbiqə proxy arxasında olduğunu bildirin |
Hər dəyişiklikdən sonra: sudo nginx -t, sonra sudo systemctl reload nginx.
HytHost VPS-də işlədin
Reverse proxy-yə 80 və 443 portlarını idarə etdiyiniz server lazımdır. HytHost VPS planları tam root girişi, SSD yaddaş və DDoS qorunması ilə KVM üzərində işləyir; Ubuntu 24.04 seçin və yuxarıdakı addımları izləyin. Tətbiqlərinizi konteynerlərdə işlədirsiniz? Əvvəlcə Ubuntu-da Docker-i necə quraşdırmaq olar bələdçisi ilə Docker-i qurun və konteynerlərin portlarını 127.0.0.1 ünvanına bağlayın ki, onlara yalnız nginx çata bilsin.
Tez-tez verilən suallar
Reverse proxy sorğuları arxasındakı bir və ya bir neçə tətbiqə ötürür. Load balancer isə sorğuları eyni tətbiqin bir neçə nüsxəsi arasında paylayan reverse proxy-dir. nginx nüsxələri sadalayan upstream bloku ilə hər ikisini edə bilir.
nginx arxasındakı tətbiqə çata bilmir. Tətbiqin işlədiyini və proxy_pass içindəki ünvan və portda dinlədiyini yoxlayın, dəqiq səbəb üçün isə /var/log/nginx/error.log faylını oxuyun.
Tətbiq eyni serverdə işləyirsə, xeyr. nginx ziyarətçilər üçün HTTPS-i idarə edir və tətbiqlə 127.0.0.1 üzərində adi HTTP ilə danışır, bu trafik maşından heç vaxt çıxmır.
Hər tətbiqə öz server_name dəyəri olan ayrıca server bloku verin, məsələn app.example.com və api.example.com, hər biri fərqli porta yönələn proxy_pass ilə.
Bəli. Hər konteynerin portunu yalnız 127.0.0.1 üzərində dərc edin və proxy_pass-i ora yönləndirin. Bu, konteynerləri ümumi internetdən uzaq saxlayır; bu vacibdir, çünki Docker-in dərc olunmuş portları ufw-ni yan keçir.
Tətbiqlərinizi nginx arxasında host edin
Tam root girişi, SSD yaddaş və DDoS qorunması olan HytHost KVM VPS planları €2.92/ay-dan başlayır.
Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hoursBu bələdçi sizə kömək etdi?