Skip to content
VDS · Sajtovi i veb serveri

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

SimptomUzrok
502 Bad GatewayAplikacija ne radi ili sluša na drugom portu
504 Gateway Time-outAplikaciji treba duže da odgovori nego što je proxy_read_timeout
Beskonačno preusmeravanjeAplikacija ne zna za HTTPS — prosledi X-Forwarded-Proto
Otpremanje fajlova pucaclient_max_body_size je premali; podrazumevano je 1 MB
Ista IP adresa u logovima aplikacijeX-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.1 ne treba enkripcija — nikada ne napuštaju mašinu.