nginx reverse proxy útmutató
Ezen az oldalon
A reverse proxy az alkalmazásaid előtt áll, és továbbítja nekik a látogatók kéréseit. Ha az nginx áll elöl, egy valamilyen porton futó Node.js alkalmazásból, Docker konténerből vagy dashboardból https://app.example.com lesz, HTTPS-sel, megfelelő fejlécekkel és egyetlen helyről kezelve.
Ez az útmutató lépésről lépésre beállítja az nginxet reverse proxyként Ubuntun: a server blokkot, a fejléceket, a WebSocketeket, az ingyenes HTTPS-t és azokat a hibákat, amelyekkel a legnagyobb eséllyel találkozol.
Mit csinál a reverse proxy
- Egyetlen nyilvános belépési pont. Az nginx a 80-as és 443-as porton figyel, és minden domaint vagy útvonalat a megfelelő alkalmazáshoz továbbít, így maguk az alkalmazások soha nem néznek ki közvetlenül az internetre.
- HTTPS egy helyen. A tanúsítványokat az nginx kezeli; a mögötte lévő alkalmazások sima HTTP-t használhatnak localhoston.
- Több alkalmazás egy szerveren. Az
app.example.com, azapi.example.comés azexample.com/blogmind más-más szolgáltatáshoz vezethet. - Extrák: tömörítés, gyorsítótárazás, feltöltési korlátok és hozzáférési szabályok, az alkalmazás módosítása nélkül.
1. lépés: Az nginx telepítése
sudo apt update sudo apt install nginx
Nyisd meg a http://your-server-ip címet, és meg kell jelennie az nginx üdvözlőoldalának. Ha ufw-t használsz, engedélyezd a webes forgalmat ezzel: sudo ufw allow 'Nginx Full'.
Győződj meg róla, hogy az alkalmazásod fut, és magán a szerveren elérhető, például így: curl http://127.0.0.1:3000. Ha ez nem sikerül, az nginx sem fog.
Futtasd az nginxet és az alkalmazásaidat teljes root hozzáféréssel: a HytHost KVM VPS csomagok €2.92/hó-tól indulnak.
VPS csomagok2. lépés: A proxy server blokk létrehozása
Ubuntun minden oldal kap egy fájlt a /etc/nginx/sites-available/ mappában, amelyet egy sites-enabled alatti hivatkozás kapcsol be. Hozd létre a /etc/nginx/sites-available/app.example.com fájlt:
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;
}
}
Kapcsold be, teszteld a konfigurációt, és töltsd újra:
sudo ln -s /etc/nginx/sites-available/app.example.com /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx
Irányítsd a domain A rekordját a szerveredre, és a http://app.example.com már az alkalmazásodat mutatja. Újratöltés előtt mindig futtasd az nginx -t parancsot: kiszűri az elírásokat, mielőtt leállítanák az oldalt.
A fejlécek és a záró perjel
- A
Hosttovábbítja a látogató által kért domaint. Nélküle az nginx aproxy_passcímét küldi, és a hostból linkeket építő alkalmazások elromlanak. - Az
X-Real-IPés azX-Forwarded-Fortovábbítja a látogató IP-címét. Nélkülük minden kérés úgy néz ki, mintha a127.0.0.1címről jönne. - Az
X-Forwarded-Protomegmondja az alkalmazásnak, hogy a látogató HTTPS-t használt-e, így az nem irányít át végtelen körben.
Az Ubuntu nginx csomagja ezeket a sorokat a /etc/nginx/proxy_params fájlban szállítja, így az include proxy_params; egy rövidítés.
A záró perjel számít. Egy útvonal alatti alkalmazásnál:
location /app/ {
proxy_pass http://127.0.0.1:3000/;
}
Ha a port után van perjel, a /app/login /login-ként érkezik az alkalmazáshoz. Nélküle az alkalmazás a teljes /app/login útvonalat kapja.
WebSockets
A chatalkalmazások, élő dashboardok és sok adminpanel WebSocketeket használ, amelyekhez két extra fejléc kell. Add hozzá ezt a mapet egyszer, a http blokkon belül, például egy új /etc/nginx/conf.d/websocket.conf fájlban:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
Aztán a location blokkban:
proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_read_timeout 1h;
Az nginx lezárja azt a proxyzott kapcsolatot, amely 60 másodpercig semmit nem küld; a hosszabb proxy_read_timeout nyitva tartja a csendes WebSocketeket. A proxy_http_version 1.1 csak az nginx 1.29.7-től alapértelmezett, az Ubuntu 24.04 pedig az 1.24-et szállítja, ezért hagyd benne a sort.
3. lépés: Ingyenes HTTPS Certbottal
sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/local/bin/certbot sudo certbot --nginx -d app.example.com
A Certbot ingyenes Let's Encrypt tanúsítványt szerez, hozzáadja a HTTPS-beállításokat a server blokkodhoz, és át tudja irányítani a HTTP-t HTTPS-re. A tanúsítványt automatikusan megújítja; ellenőrizd ezzel: sudo certbot renew --dry-run. A tanúsítványokról bővebben: hogyan szerezz ingyenes SSL tanúsítványt.
Az 502, 504 és 413 hibák javítása
| Hiba | Szokásos ok | Javítás |
|---|---|---|
| 502 Bad Gateway | Az nginx nem éri el az alkalmazást: le van állítva, összeomlott, vagy másik porton vagy címen figyel | Indítsd el az alkalmazást, ellenőrizd a portot ezzel: curl http://127.0.0.1:PORT, olvasd el a /var/log/nginx/error.log fájlt |
| 504 Gateway Timeout | Az alkalmazásnak 60 másodpercnél tovább tartott válaszolni | Gyorsítsd fel a kérést, vagy növeld a proxy_read_timeout értékét az adott locationnél |
| 413 Request Entity Too Large | A feltöltés nagyobb az nginx alapértelmezett 1 MB-os korlátjánál | Állítsd be a client_max_body_size 50m; sort a server blokkban |
| Átirányítási hurok | Az alkalmazás nem tudja, hogy a látogató HTTPS-t használt | Továbbítsd az X-Forwarded-Proto fejlécet, és jelezd az alkalmazásnak, hogy proxy mögött fut |
Minden módosítás után: sudo nginx -t, majd sudo systemctl reload nginx.
Futtasd HytHost VPS-en
A reverse proxyhoz olyan szerver kell, ahol te rendelkezel a 80-as és 443-as port felett. A HytHost VPS csomagok KVM-en futnak, teljes root hozzáféréssel, SSD tárhellyel és DDoS védelemmel; válaszd az Ubuntu 24.04-et, és kövesd a fenti lépéseket. Konténerekben futtatod az alkalmazásaidat? Előbb állítsd be a Dockert a Docker telepítése Ubuntura útmutatóval, és kösd a konténerek portjait a 127.0.0.1 címre, hogy csak az nginx érje el őket.
Gyakori kérdések
A reverse proxy egy vagy több mögötte lévő alkalmazásnak továbbítja a kéréseket. A load balancer olyan reverse proxy, amely ugyanannak az alkalmazásnak több példánya között osztja szét a kéréseket. Az nginx mindkettőre képes, egy upstream blokkal, amely felsorolja a példányokat.
Az nginx nem éri el a mögötte lévő alkalmazást. Ellenőrizd, hogy az alkalmazás fut-e, és a proxy_pass címén és portján figyel-e, a pontos okért pedig olvasd el a /var/log/nginx/error.log fájlt.
Nem, ha az alkalmazás ugyanazon a szerveren fut. Az nginx kezeli a HTTPS-t a látogatók felé, az alkalmazással pedig sima HTTP-n kommunikál a 127.0.0.1 címen, ami sosem hagyja el a gépet.
Adj minden alkalmazásnak saját server blokkot saját server_name értékkel, például app.example.com és api.example.com, mindegyiket egy másik portra mutató proxy_pass sorral.
Igen. Minden konténer portját csak a 127.0.0.1 címen tedd közzé, és irányítsd rá a proxy_pass sort. Így a konténerek nem érhetők el a nyilvános internetről, ami azért fontos, mert a Docker közzétett portjai megkerülik az ufw-t.
Futtasd alkalmazásaidat nginx mögött
A HytHost KVM VPS csomagok teljes root hozzáféréssel, SSD tárhellyel és DDoS védelemmel €2.92/hó-tól indulnak.
Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hoursHasznos volt ez az útmutató?