Reverse proxy: više aplikacija na jednoj adresi
Kako da podeliš jednu javnu VDS adresu na više aplikacija po domenima i putanjama, pravilno proslediš zaglavlja i ne pokvariš WebSocket.
Ažurirano 23. avgust 2026.
Jedna mašina ima jednu javnu IPv4 adresu, ali obično pokreće nekoliko aplikacija. Reverse proxy prihvata sve zahteve na portovima 80 i 443 i prosleđuje ih internim servisima prema imenu domena ili putanji. Takođe drži jedan sertifikat i zajedničke logove.
Raspored
Svaka aplikacija sluša na svom lokalnom portu i to samo na 127.0.0.1:
- frontend sajt —
127.0.0.1:3000; - API —
127.0.0.1:8000; - monitoring panel —
127.0.0.1:9090.
Samo je Nginx izložen spolja. Da proveriš da aplikacija nije direktno izložena:
ss -tulpn | grep LISTEN
Linije poput 0.0.0.0:3000 znače da je servis dostupan sa interneta, zaobilazeći proxy i bez enkripcije.
Prema domenu
server {
listen 80;
server_name app.example.ru;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
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;
}
}
server {
listen 80;
server_name api.example.ru;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Bez X-Forwarded-For aplikacija vidi svaki zahtev kao da dolazi sa 127.0.0.1, pa svako ograničenje po IP adresi prestaje da radi.
Prema putanji
location /api/ {
proxy_pass http://127.0.0.1:8000/;
}
Kosa crta na kraju u proxy_pass je ovde važna: sa njom se prefiks /api uklanja i aplikacija dobija /users; bez nje dobija /api/users. Pola svih „misterioznih 404-ki“ na proxyju dolazi upravo od ovoga.
WebSocket i dugi odgovori
location /ws/ {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 3600s;
}
Bez para Upgrade/Connection veza puca odmah posle handshake-a; bez povećanog timeout-a puca posle minut tišine.
Česte greške
| Simptom | Uzrok |
|---|---|
502 Bad Gateway | Aplikacija ne radi ili sluša na drugom portu |
504 Gateway Time-out | Aplikaciji treba duže da odgovori nego što je proxy_read_timeout |
| Beskonačno preusmeravanje | Aplikacija ne zna za HTTPS — prosledi X-Forwarded-Proto |
| Otpremanje fajlova puca | client_max_body_size je premali; podrazumevano je 1 MB |
| Ista IP adresa u logovima aplikacije | X-Forwarded-For se ne prosleđuje |
Dalje: više sajtova, sertifikat, Caddy sa automatskim HTTPS-om.
Jedan sertifikat na proxyju pokriva sve aplikacije iza njega. Internim vezama preko
127.0.0.1ne treba enkripcija — nikada ne napuštaju mašinu.