nginx som omvänd proxy (reverse proxy): guide
På den här sidan
En omvänd proxy står framför dina applikationer och skickar besökarnas förfrågningar vidare till dem. Med nginx framför blir en Node.js-app, en Docker-container eller en dashboard som kör på någon port till https://app.example.com – med HTTPS, korrekta headers och ett enda ställe att hantera allt från.
Den här guiden sätter upp nginx som omvänd proxy på Ubuntu, steg för steg: server-blocket, headers, WebSockets, gratis HTTPS och de fel du troligast stöter på.
Vad en omvänd proxy gör
- En enda publik ingång. nginx lyssnar på port 80 och 443 och skickar varje domän eller sökväg till rätt app, så att apparna själva aldrig exponeras mot internet.
- HTTPS på ett ställe. nginx hanterar certifikaten; apparna bakom kan prata vanlig HTTP på localhost.
- Flera appar på en server.
app.example.com,api.example.comochexample.com/blogkan gå till var sin tjänst. - Extra: komprimering, cachning, uppladdningsgränser och åtkomstregler, utan att röra appen.
Steg 1: Installera nginx
sudo apt update sudo apt install nginx
Öppna http://your-server-ip så bör du se nginx välkomstsida. Använder du ufw, tillåt webbtrafik med sudo ufw allow 'Nginx Full'.
Kontrollera att din app körs och går att nå på själva servern, till exempel med curl http://127.0.0.1:3000. Misslyckas det, misslyckas nginx också.
Kör nginx och dina appar med full root: HytHost KVM VPS-paket från €2.92/mån.
Se VPS-paketSteg 2: Skapa proxy-server-blocket
På Ubuntu får varje webbplats en fil i /etc/nginx/sites-available/, som aktiveras med en länk i sites-enabled. Skapa /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;
}
}
Aktivera den, testa konfigurationen och ladda om:
sudo ln -s /etc/nginx/sites-available/app.example.com /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx
Peka domänens A-post mot din server, så visar http://app.example.com nu din app. Kör alltid nginx -t innan du laddar om: det fångar stavfel innan de tar ner sajten.
Headers och det avslutande snedstrecket
Hostskickar domänen som besökaren efterfrågade. Utan den skickar nginx adressen frånproxy_pass, och appar som bygger länkar utifrån host går sönder.X-Real-IPochX-Forwarded-Forskickar besökarens IP-adress. Utan dem ser varje förfrågan ut att komma från127.0.0.1.X-Forwarded-Prototalar om för appen om besökaren använde HTTPS, så att den inte omdirigerar i en loop.
Ubuntus nginx-paket har de här raderna i /etc/nginx/proxy_params, så include proxy_params; är en genväg.
Det avslutande snedstrecket spelar roll. För en app under en sökväg:
location /app/ {
proxy_pass http://127.0.0.1:3000/;
}
Med snedstrecket efter porten når /app/login appen som /login. Utan det får appen hela /app/login.
WebSockets
Chattappar, live-dashboards och många adminpaneler använder WebSockets, som behöver två extra headers. Lägg till den här map-en en gång i http-blocket, till exempel i en ny fil /etc/nginx/conf.d/websocket.conf:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
Sedan i location:
proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_read_timeout 1h;
nginx stänger en proxad anslutning som inte skickar något på 60 sekunder; den längre proxy_read_timeout håller tysta WebSockets öppna. proxy_http_version 1.1 är standard först från nginx 1.29.7, och Ubuntu 24.04 levereras med 1.24, så behåll raden.
Steg 3: Gratis HTTPS med Certbot
sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/local/bin/certbot sudo certbot --nginx -d app.example.com
Certbot hämtar ett gratis Let's Encrypt-certifikat, lägger till HTTPS-inställningarna i ditt server-block och kan omdirigera HTTP till HTTPS. Certifikatet förnyas automatiskt; kontrollera med sudo certbot renew --dry-run. Mer om certifikat i så får du ett gratis SSL-certifikat.
Så åtgärdar du fel 502, 504 och 413
| Fel | Vanlig orsak | Åtgärd |
|---|---|---|
| 502 Bad Gateway | nginx når inte appen: den är stoppad, har kraschat eller lyssnar på en annan port eller adress | Starta appen, kontrollera porten med curl http://127.0.0.1:PORT, läs /var/log/nginx/error.log |
| 504 Gateway Timeout | Appen tog längre än 60 sekunder på sig att svara | Snabba upp förfrågan, eller höj proxy_read_timeout för den location |
| 413 Request Entity Too Large | En uppladdning är större än nginx standardgräns på 1 MB | Sätt client_max_body_size 50m; i server-blocket |
| Omdirigeringsloop | Appen vet inte att besökaren använde HTTPS | Skicka med X-Forwarded-Proto och tala om för appen att den ligger bakom en proxy |
Efter varje ändring: sudo nginx -t, sedan sudo systemctl reload nginx.
Kör det på en HytHost VPS
En omvänd proxy behöver en server där du själv styr port 80 och 443. HytHost VPS-paket körs på KVM med full root-åtkomst, SSD-lagring och DDoS-skydd; välj Ubuntu 24.04 och följ stegen ovan. Kör du dina appar i containrar? Sätt först upp Docker med så installerar du Docker på Ubuntu, och bind containrarnas portar till 127.0.0.1 så att bara nginx når dem.
Vanliga frågor
En omvänd proxy skickar förfrågningar vidare till en eller flera appar bakom sig. En lastbalanserare är en omvänd proxy som fördelar förfrågningar mellan flera kopior av samma app. nginx klarar båda, med ett upstream-block som listar kopiorna.
nginx når inte appen bakom sig. Kontrollera att appen körs och lyssnar på adressen och porten i proxy_pass, och läs /var/log/nginx/error.log för den exakta orsaken.
Nej, inte när appen körs på samma server. nginx hanterar HTTPS för besökarna och pratar med appen över vanlig HTTP på 127.0.0.1, som aldrig lämnar maskinen.
Ge varje app ett eget server-block med ett eget server_name, till exempel app.example.com och api.example.com, var och ett med en proxy_pass till en annan port.
Ja. Publicera varje containers port bara på 127.0.0.1 och peka proxy_pass mot den. Då hålls containrarna borta från det publika internet, vilket är viktigt eftersom Dockers publicerade portar går förbi ufw.
Hosta dina appar bakom nginx
HytHost KVM VPS-paket med full root-åtkomst, SSD-lagring och DDoS-skydd från €2.92/mån.
Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hoursVar den här guiden till hjälp?