nginx som reverse proxy: guide
På denne side
En reverse proxy står foran dine applikationer og sender besøgendes forespørgsler videre til dem. Med nginx foran bliver en Node.js-app, en Docker-container eller et dashboard, der kører på en port, til https://app.example.com – med HTTPS, korrekte headers og ét sted at styre det hele fra.
Denne guide sætter nginx op som reverse proxy på Ubuntu, trin for trin: server-blokken, headers, WebSockets, gratis HTTPS og de fejl, du højst sandsynligt møder.
Hvad en reverse proxy gør
- Ét offentligt indgangspunkt. nginx lytter på port 80 og 443 og sender hvert domæne eller hver sti videre til den rigtige app, så selve apps aldrig står direkte ud mod internettet.
- HTTPS ét sted. nginx håndterer certifikaterne; apps bag den kan tale almindelig HTTP på localhost.
- Flere apps på én server.
app.example.com,api.example.comogexample.com/blogkan hver gå til sin egen tjeneste. - Ekstra: komprimering, caching, upload-grænser og adgangsregler, uden at røre appen.
Trin 1: Installer nginx
sudo apt update sudo apt install nginx
Åbn http://your-server-ip, og du bør se nginx' velkomstside. Bruger du ufw, så tillad webtrafik med sudo ufw allow 'Nginx Full'.
Sørg for, at din app kører og kan nås på selve serveren, for eksempel med curl http://127.0.0.1:3000. Fejler det, fejler nginx også.
Kør nginx og dine apps med fuld root: HytHost KVM VPS-pakker fra €2.92/md.
Se VPS-pakkerTrin 2: Opret proxy-server-blokken
På Ubuntu får hvert site en fil i /etc/nginx/sites-available/, som aktiveres med et link i sites-enabled. Opret /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;
}
}
Aktivér den, test konfigurationen og genindlæs:
sudo ln -s /etc/nginx/sites-available/app.example.com /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx
Peg domænets A-record på din server, så viser http://app.example.com nu din app. Kør altid nginx -t før en genindlæsning: den fanger tastefejl, før de lægger sitet ned.
Headers og den afsluttende skråstreg
Hostsender det domæne, den besøgende bad om. Uden den sender nginx adressen fraproxy_pass, og apps, der bygger links ud fra host, går i stykker.X-Real-IPogX-Forwarded-Forsender den besøgendes IP-adresse. Uden dem ser hver forespørgsel ud til at komme fra127.0.0.1.X-Forwarded-Protofortæller appen, om den besøgende brugte HTTPS, så den ikke omdirigerer i ring.
Ubuntus nginx-pakke har disse linjer i /etc/nginx/proxy_params, så include proxy_params; er en genvej.
Den afsluttende skråstreg betyder noget. For en app under en sti:
location /app/ {
proxy_pass http://127.0.0.1:3000/;
}
Med skråstregen efter porten når /app/login frem til appen som /login. Uden den modtager appen hele /app/login.
WebSockets
Chat-apps, live-dashboards og mange admin-paneler bruger WebSockets, som kræver to ekstra headers. Tilføj dette map én gang inde i http-blokken, for eksempel i en ny fil /etc/nginx/conf.d/websocket.conf:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
Derefter 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-forbindelse, der ikke sender noget i 60 sekunder; den længere proxy_read_timeout holder stille WebSockets åbne. proxy_http_version 1.1 er først standard fra nginx 1.29.7, og Ubuntu 24.04 leveres med 1.24, så behold linjen.
Trin 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-certifikat, tilføjer HTTPS-indstillingerne til din server-blok og kan omdirigere HTTP til HTTPS. Den fornyer certifikatet automatisk; tjek det med sudo certbot renew --dry-run. Mere om certifikater i sådan får du et gratis SSL-certifikat.
Sådan løser du fejl 502, 504 og 413
| Fejl | Typisk årsag | Løsning |
|---|---|---|
| 502 Bad Gateway | nginx kan ikke nå appen: den er stoppet, gået ned eller lytter på en anden port eller adresse | Start appen, tjek porten med curl http://127.0.0.1:PORT, læs /var/log/nginx/error.log |
| 504 Gateway Timeout | Appen var længere end 60 sekunder om at svare | Gør forespørgslen hurtigere, eller hæv proxy_read_timeout for den location |
| 413 Request Entity Too Large | En upload er større end nginx' standardgrænse på 1 MB | Sæt client_max_body_size 50m; i server-blokken |
| Omdirigeringsløkke | Appen ved ikke, at den besøgende brugte HTTPS | Send X-Forwarded-Proto med, og fortæl appen, at den står bag en proxy |
Efter hver ændring: sudo nginx -t, derefter sudo systemctl reload nginx.
Kør det på en HytHost VPS
En reverse proxy kræver en server, hvor du selv styrer port 80 og 443. HytHost VPS-pakker kører på KVM med fuld root-adgang, SSD-lager og DDoS-beskyttelse; vælg Ubuntu 24.04 og følg trinene ovenfor. Kører dine apps i containere? Sæt først Docker op med sådan installerer du Docker på Ubuntu, og bind containernes porte til 127.0.0.1, så kun nginx kan nå dem.
Ofte stillede spørgsmål
En reverse proxy sender forespørgsler videre til én eller flere apps bag sig. En load balancer er en reverse proxy, der fordeler forespørgsler mellem flere kopier af den samme app. nginx kan begge dele, med en upstream-blok, der lister kopierne.
nginx kan ikke nå appen bag sig. Tjek, at appen kører og lytter på adressen og porten i proxy_pass, og læs /var/log/nginx/error.log for den præcise årsag.
Nej, ikke når appen kører på samme server. nginx håndterer HTTPS for de besøgende og taler med appen over almindelig HTTP på 127.0.0.1, som aldrig forlader maskinen.
Giv hver app sin egen server-blok med sit eget server_name, for eksempel app.example.com og api.example.com, hver med en proxy_pass til en anden port.
Ja. Udgiv hver containers port kun på 127.0.0.1, og peg proxy_pass på den. Så holdes containerne væk fra det offentlige internet, hvilket er vigtigt, fordi Dockers udgivne porte går uden om ufw.
Host dine apps bag nginx
HytHost KVM VPS-pakker med fuld root-adgang, SSD-lager og DDoS-beskyttelse fra €2.92/md.
Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hoursVar denne guide en hjælp?