nginx som omvendt proxy (reverse proxy): guide
På denne siden
En omvendt proxy står foran applikasjonene dine og sender besøkendes forespørsler videre til dem. Med nginx foran blir en Node.js-app, en Docker-container eller et dashbord som kjører på en port, til https://app.example.com – med HTTPS, riktige headere og ett sted å styre alt fra.
Denne guiden setter opp nginx som omvendt proxy på Ubuntu, steg for steg: server-blokken, headerne, WebSockets, gratis HTTPS og feilene du mest sannsynlig møter.
Hva en omvendt proxy gjør
- Ett offentlig inngangspunkt. nginx lytter på port 80 og 443 og sender hvert domene eller hver sti videre til riktig app, så selve appene aldri eksponeres mot internett.
- HTTPS på ett sted. nginx håndterer sertifikatene; appene bak kan snakke vanlig HTTP på localhost.
- Flere apper på én server.
app.example.com,api.example.comogexample.com/blogkan hver gå til sin egen tjeneste. - Ekstra: komprimering, mellomlagring, opplastingsgrenser og tilgangsregler, uten å røre appen.
Steg 1: Installer nginx
sudo apt update sudo apt install nginx
Åpne http://your-server-ip, så skal du se velkomstsiden til nginx. Bruker du ufw, tillat webtrafikk med sudo ufw allow 'Nginx Full'.
Sørg for at appen din kjører og kan nås på selve serveren, for eksempel med curl http://127.0.0.1:3000. Feiler det, feiler nginx også.
Kjør nginx og appene dine med full root: HytHost KVM VPS-pakker fra €2.92/mnd.
Se VPS-pakkerSteg 2: Opprett proxy-server-blokken
På Ubuntu får hvert nettsted en fil i /etc/nginx/sites-available/, som aktiveres med en lenke i sites-enabled. Opprett /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;
}
}
Aktiver den, test konfigurasjonen og last inn på nytt:
sudo ln -s /etc/nginx/sites-available/app.example.com /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx
Pek domenets A-post mot serveren din, så viser http://app.example.com nå appen din. Kjør alltid nginx -t før du laster inn på nytt: den fanger skrivefeil før de tar ned nettstedet.
Headerne, og skråstreken på slutten
Hostsender domenet den besøkende ba om. Uten den sender nginx adressen fraproxy_pass, og apper som bygger lenker fra host, slutter å fungere.X-Real-IPogX-Forwarded-Forsender den besøkendes IP-adresse. Uten dem ser hver forespørsel ut til å komme fra127.0.0.1.X-Forwarded-Protoforteller appen om den besøkende brukte HTTPS, så den ikke omdirigerer i en løkke.
Ubuntus nginx-pakke har disse linjene i /etc/nginx/proxy_params, så include proxy_params; er en snarvei.
Skråstreken på slutten betyr noe. For en app under en sti:
location /app/ {
proxy_pass http://127.0.0.1:3000/;
}
Med skråstreken etter porten når /app/login appen som /login. Uten den mottar appen hele /app/login.
WebSockets
Chatte-apper, live-dashbord og mange adminpaneler bruker WebSockets, som trenger to ekstra headere. Legg til dette map-et én gang inne i http-blokken, for eksempel i en ny fil /etc/nginx/conf.d/websocket.conf:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
Deretter i location:
proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_read_timeout 1h;
nginx lukker en proxy-tilkobling som ikke sender noe på 60 sekunder; den lengre proxy_read_timeout holder stille WebSockets åpne. proxy_http_version 1.1 er standard først fra nginx 1.29.7, og Ubuntu 24.04 leveres med 1.24, så behold linjen.
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 henter et gratis Let's Encrypt-sertifikat, legger HTTPS-innstillingene til server-blokken din og kan omdirigere HTTP til HTTPS. Den fornyer sertifikatet automatisk; sjekk med sudo certbot renew --dry-run. Mer om sertifikater i slik får du et gratis SSL-sertifikat.
Slik fikser du feil 502, 504 og 413
| Feil | Vanlig årsak | Løsning |
|---|---|---|
| 502 Bad Gateway | nginx når ikke appen: den er stoppet, har krasjet eller lytter på en annen port eller adresse | Start appen, sjekk porten med curl http://127.0.0.1:PORT, les /var/log/nginx/error.log |
| 504 Gateway Timeout | Appen brukte mer enn 60 sekunder på å svare | Gjør forespørselen raskere, eller øk proxy_read_timeout for den location-en |
| 413 Request Entity Too Large | En opplasting er større enn standardgrensen i nginx på 1 MB | Sett client_max_body_size 50m; i server-blokken |
| Omdirigeringsløkke | Appen vet ikke at den besøkende brukte HTTPS | Send med X-Forwarded-Proto og fortell appen at den står bak en proxy |
Etter hver endring: sudo nginx -t, deretter sudo systemctl reload nginx.
Kjør det på en HytHost VPS
En omvendt proxy trenger en server der du selv styrer port 80 og 443. HytHost VPS-pakker kjører på KVM med full root-tilgang, SSD-lagring og DDoS-beskyttelse; velg Ubuntu 24.04 og følg stegene over. Kjører du appene i containere? Sett først opp Docker med slik installerer du Docker på Ubuntu, og bind portene til containerne til 127.0.0.1 så bare nginx når dem.
Ofte stilte spørsmål
En omvendt proxy sender forespørsler videre til én eller flere apper bak seg. En lastbalanserer er en omvendt proxy som fordeler forespørsler mellom flere kopier av samme app. nginx kan begge deler, med en upstream-blokk som lister kopiene.
nginx når ikke appen bak seg. Sjekk at appen kjører og lytter på adressen og porten i proxy_pass, og les /var/log/nginx/error.log for den nøyaktige årsaken.
Nei, ikke når appen kjører på samme server. nginx håndterer HTTPS for de besøkende og snakker med appen over vanlig HTTP på 127.0.0.1, som aldri forlater maskinen.
Gi hver app sin egen server-blokk med sitt eget server_name, for eksempel app.example.com og api.example.com, hver med en proxy_pass til en annen port.
Ja. Publiser porten til hver container bare på 127.0.0.1, og pek proxy_pass mot den. Da holdes containerne unna det offentlige internettet, noe som er viktig fordi publiserte porter i Docker går utenom ufw.
Host appene dine bak nginx
HytHost KVM VPS-pakker med full root-tilgang, SSD-lagring og DDoS-beskyttelse fra €2.92/mnd.
Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hoursVar denne guiden til hjelp?