nginx reverse proxy: vodič
Na ovoj stranici
Reverse proxy stoji ispred vaših aplikacija i prosljeđuje im zahtjeve posjetitelja. Kad je nginx ispred, Node.js aplikacija, Docker kontejner ili nadzorna ploča na nekom portu postaje https://app.example.com, s HTTPS-om, ispravnim zaglavljima i jednim mjestom za upravljanje svime.
Ovaj vodič korak po korak postavlja nginx kao reverse proxy na Ubuntuu: server blok, zaglavlja, WebSockets, besplatni HTTPS i greške na koje ćete najvjerojatnije naići.
Što radi reverse proxy
- Jedna javna ulazna točka. nginx sluša na portovima 80 i 443 i svaku domenu ili putanju prosljeđuje pravoj aplikaciji, pa same aplikacije nikad nisu izložene internetu.
- HTTPS na jednom mjestu. nginx upravlja certifikatima; aplikacije iza njega mogu koristiti obični HTTP na localhostu.
- Više aplikacija na jednom serveru.
app.example.com,api.example.comiexample.com/blogmogu voditi svaka na drugu uslugu. - Dodaci: kompresija, predmemoriranje, ograničenja uploada i pravila pristupa, bez diranja aplikacije.
Korak 1: Instalirajte nginx
sudo apt update sudo apt install nginx
Otvorite http://your-server-ip i trebali biste vidjeti nginx stranicu dobrodošlice. Ako koristite ufw, dopustite web promet naredbom sudo ufw allow 'Nginx Full'.
Provjerite radi li vaša aplikacija i je li dostupna na samom serveru, na primjer s curl http://127.0.0.1:3000. Ako to ne uspije, neće uspjeti ni nginx.
Pokrenite nginx i svoje aplikacije uz puni root pristup: HytHost KVM VPS paketi kreću od €2.92/mj.
Pogledajte VPS paketeKorak 2: Napravite proxy server blok
Na Ubuntuu svaka stranica dobiva datoteku u /etc/nginx/sites-available/, a uključuje se poveznicom u sites-enabled. Napravite /etc/nginx/sites-available/app.example.com:
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;
}
}
Uključite je, testirajte konfiguraciju i ponovno je učitajte:
sudo ln -s /etc/nginx/sites-available/app.example.com /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx
Usmjerite A zapis domene na svoj server i http://app.example.com sada prikazuje vašu aplikaciju. Uvijek pokrenite nginx -t prije ponovnog učitavanja: uhvatit će tipfelere prije nego što sruše stranicu.
Zaglavlja i kosa crta na kraju
Hostprenosi domenu koju je posjetitelj zatražio. Bez njega nginx šalje adresu izproxy_pass, a aplikacije koje grade poveznice iz hosta prestaju raditi.X-Real-IPiX-Forwarded-Forprenose IP adresu posjetitelja. Bez njih svaki zahtjev izgleda kao da dolazi s127.0.0.1.X-Forwarded-Protogovori aplikaciji je li posjetitelj koristio HTTPS, kako ne bi preusmjeravala u petlji.
Ubuntuov nginx paket sadrži te retke u /etc/nginx/proxy_params, pa je include proxy_params; prečac.
Kosa crta na kraju je važna. Za aplikaciju pod putanjom:
location /app/ {
proxy_pass http://127.0.0.1:3000/;
}
S kosom crtom iza porta /app/login stiže do aplikacije kao /login. Bez nje aplikacija prima cijeli /app/login.
WebSockets
Chat aplikacije, nadzorne ploče uživo i mnogi administratorski paneli koriste WebSockets, kojima trebaju dva dodatna zaglavlja. Dodajte ovaj map jednom, unutar bloka http, na primjer u novu datoteku /etc/nginx/conf.d/websocket.conf:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
Zatim u location:
proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_read_timeout 1h;
nginx zatvara proxy vezu koja 60 sekundi ništa ne pošalje; dulji proxy_read_timeout drži tihe WebSocket veze otvorenima. proxy_http_version 1.1 je zadana vrijednost tek od nginxa 1.29.7, a Ubuntu 24.04 dolazi s verzijom 1.24, pa zadržite taj redak.
Korak 3: Besplatni HTTPS uz Certbot
sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/local/bin/certbot sudo certbot --nginx -d app.example.com
Certbot pribavlja besplatni Let's Encrypt certifikat, dodaje HTTPS postavke u vaš server blok i može preusmjeriti HTTP na HTTPS. Certifikat obnavlja automatski; provjerite s sudo certbot renew --dry-run. Više o certifikatima pročitajte u vodiču kako dobiti besplatni SSL certifikat.
Rješavanje grešaka 502, 504 i 413
| Greška | Uobičajeni uzrok | Rješenje |
|---|---|---|
| 502 Bad Gateway | nginx ne može doći do aplikacije: zaustavljena je, srušila se ili sluša na drugom portu ili adresi | Pokrenite aplikaciju, provjerite port s curl http://127.0.0.1:PORT, pročitajte /var/log/nginx/error.log |
| 504 Gateway Timeout | Aplikaciji je za odgovor trebalo više od 60 sekundi | Ubrzajte zahtjev ili povećajte proxy_read_timeout za tu lokaciju |
| 413 Request Entity Too Large | Upload je veći od nginxova zadanog ograničenja od 1 MB | Postavite client_max_body_size 50m; u server bloku |
| Petlja preusmjeravanja | Aplikacija ne zna da je posjetitelj koristio HTTPS | Prenesite X-Forwarded-Proto i recite aplikaciji da je iza proxyja |
Nakon svake promjene: sudo nginx -t, zatim sudo systemctl reload nginx.
Pokrenite ga na HytHost VPS-u
Reverse proxyju treba server na kojem upravljate portovima 80 i 443. HytHost VPS paketi rade na KVM-u s punim root pristupom, SSD pohranom i DDoS zaštitom; odaberite Ubuntu 24.04 i slijedite gornje korake. Pokrećete aplikacije u kontejnerima? Najprije postavite Docker uz vodič kako instalirati Docker na Ubuntu i vežite portove kontejnera na 127.0.0.1 kako bi do njih mogao doći samo nginx.
Česta pitanja
Reverse proxy prosljeđuje zahtjeve jednoj ili više aplikacija iza sebe. Load balancer je reverse proxy koji raspoređuje zahtjeve na više kopija iste aplikacije. nginx može oboje, uz blok upstream koji navodi kopije.
nginx ne može doći do aplikacije iza sebe. Provjerite radi li aplikacija i sluša li na adresi i portu iz proxy_pass te pročitajte /var/log/nginx/error.log za točan razlog.
Ne, kad aplikacija radi na istom serveru. nginx upravlja HTTPS-om za posjetitelje i s aplikacijom komunicira običnim HTTP-om na 127.0.0.1, koji nikad ne napušta stroj.
Dajte svakoj aplikaciji vlastiti server blok s vlastitim server_name, poput app.example.com i api.example.com, svaki s proxy_pass na drugi port.
Da. Objavite port svakog kontejnera samo na 127.0.0.1 i usmjerite proxy_pass na njega. Tako kontejneri ostaju izvan javnog interneta, što je važno jer Dockerovi objavljeni portovi zaobilaze ufw.
Hostajte svoje aplikacije iza nginxa
HytHost KVM VPS paketi s punim root pristupom, SSD pohranom i DDoS zaštitom kreću od €2.92/mj.
Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hoursJe li ti ovaj vodič pomogao?