Guia de nginx com a proxy invers
En aquesta pàgina
Un proxy invers (reverse proxy) se situa davant de les teves aplicacions i els passa les peticions dels visitants. Amb nginx al davant, una aplicació Node.js, un contenidor Docker o un panell que s'executa en algun port es converteix en https://app.example.com, amb HTTPS, les capçaleres correctes i un sol lloc per gestionar-ho tot.
Aquesta guia configura nginx com a proxy invers a Ubuntu, pas a pas: el server block, les capçaleres, els WebSockets, l'HTTPS gratuït i els errors que és més probable que et trobis.
Què fa un proxy invers
- Un únic punt d'entrada públic. nginx escolta als ports 80 i 443 i envia cada domini o ruta a l'aplicació adequada, de manera que les aplicacions mateixes mai no queden exposades a internet.
- HTTPS en un sol lloc. nginx gestiona els certificats; les aplicacions del darrere poden parlar HTTP pla a localhost.
- Diverses aplicacions en un servidor.
app.example.com,api.example.comiexample.com/blogpoden anar cadascun a un servei diferent. - Extres: compressió, memòria cau, límits de pujada i regles d'accés, sense tocar l'aplicació.
Pas 1: Instal·la nginx
sudo apt update sudo apt install nginx
Obre http://your-server-ip i hauries de veure la pàgina de benvinguda de nginx. Si fas servir ufw, permet el trànsit web amb sudo ufw allow 'Nginx Full'.
Assegura't que la teva aplicació s'està executant i és accessible des del mateix servidor, per exemple amb curl http://127.0.0.1:3000. Si això falla, nginx també fallarà.
Executa nginx i les teves aplicacions amb accés root complet: els plans VPS KVM d'HytHost comencen a €2.92/mes.
Veure plans VPSPas 2: Crea el server block del proxy
A Ubuntu, cada lloc té un fitxer a /etc/nginx/sites-available/, que s'activa amb un enllaç a sites-enabled. Crea /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;
}
}
Activa'l, prova la configuració i recarrega:
sudo ln -s /etc/nginx/sites-available/app.example.com /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx
Apunta el registre A del domini al teu servidor i http://app.example.com ja mostrarà la teva aplicació. Executa sempre nginx -t abans de recarregar: detecta les errades abans que facin caure el lloc.
Les capçaleres i la barra final
Hostpassa el domini que ha demanat el visitant. Sense ella, nginx envia l'adreça deproxy_pass, i les aplicacions que construeixen enllaços a partir del host deixen de funcionar.X-Real-IPiX-Forwarded-Forpassen l'adreça IP del visitant. Sense elles, totes les peticions semblen venir de127.0.0.1.X-Forwarded-Protoindica a l'aplicació si el visitant ha fet servir HTTPS, perquè no redirigeixi en bucle.
El paquet nginx d'Ubuntu inclou aquestes línies a /etc/nginx/proxy_params, així que include proxy_params; és una drecera.
La barra final importa. Per a una aplicació sota una ruta:
location /app/ {
proxy_pass http://127.0.0.1:3000/;
}
Amb la barra després del port, /app/login arriba a l'aplicació com a /login. Sense ella, l'aplicació rep el /app/login sencer.
WebSockets
Les aplicacions de xat, els panells en directe i molts panells d'administració fan servir WebSockets, que necessiten dues capçaleres addicionals. Afegeix aquest map una sola vegada, dins del bloc http, per exemple en un fitxer nou /etc/nginx/conf.d/websocket.conf:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
Després, dins del location:
proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_read_timeout 1h;
nginx tanca una connexió amb proxy que no envia res durant 60 segons; un proxy_read_timeout més llarg manté oberts els WebSockets silenciosos. proxy_http_version 1.1 només és el valor per defecte a partir de nginx 1.29.7, i Ubuntu 24.04 porta la 1.24, així que conserva la línia.
Pas 3: HTTPS gratuït amb Certbot
sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/local/bin/certbot sudo certbot --nginx -d app.example.com
Certbot obté un certificat gratuït de Let's Encrypt, afegeix la configuració HTTPS al teu server block i pot redirigir HTTP cap a HTTPS. Renova el certificat automàticament; comprova-ho amb sudo certbot renew --dry-run. Més informació sobre certificats a com obtenir un certificat SSL gratuït.
Com solucionar els errors 502, 504 i 413
| Error | Causa habitual | Solució |
|---|---|---|
| 502 Bad Gateway | nginx no pot arribar a l'aplicació: està aturada, s'ha bloquejat o escolta en un altre port o adreça | Inicia l'aplicació, comprova el port amb curl http://127.0.0.1:PORT, llegeix /var/log/nginx/error.log |
| 504 Gateway Timeout | L'aplicació ha trigat més de 60 segons a respondre | Accelera la petició o augmenta proxy_read_timeout per a aquell location |
| 413 Request Entity Too Large | Una pujada supera el límit per defecte de nginx d'1 MB | Posa client_max_body_size 50m; al server block |
| Bucle de redireccions | L'aplicació no sap que el visitant ha fet servir HTTPS | Passa X-Forwarded-Proto i indica a l'aplicació que és darrere d'un proxy |
Després de cada canvi: sudo nginx -t i, a continuació, sudo systemctl reload nginx.
Executa-ho en un VPS d'HytHost
Un proxy invers necessita un servidor on controlis els ports 80 i 443. Els plans VPS d'HytHost funcionen sobre KVM amb accés root complet, emmagatzematge SSD i protecció DDoS; tria Ubuntu 24.04 i segueix els passos anteriors. Executes les teves aplicacions en contenidors? Configura primer Docker amb com instal·lar Docker a Ubuntu i vincula els ports dels contenidors a 127.0.0.1 perquè només nginx hi pugui arribar.
Preguntes freqüents
Un proxy invers reenvia les peticions a una o més aplicacions que té al darrere. Un balancejador de càrrega és un proxy invers que reparteix les peticions entre diverses còpies de la mateixa aplicació. nginx pot fer totes dues coses, amb un bloc upstream que llista les còpies.
nginx no pot arribar a l'aplicació que té al darrere. Comprova que l'aplicació s'està executant i escolta a l'adreça i el port de proxy_pass, i llegeix /var/log/nginx/error.log per saber-ne el motiu exacte.
No, si l'aplicació s'executa al mateix servidor. nginx gestiona l'HTTPS per als visitants i parla amb l'aplicació per HTTP pla a 127.0.0.1, que mai no surt de la màquina.
Dona a cada aplicació el seu propi server block amb el seu propi server_name, com ara app.example.com i api.example.com, cadascun amb un proxy_pass cap a un port diferent.
Sí. Publica el port de cada contenidor només a 127.0.0.1 i apunta-hi proxy_pass. Així els contenidors queden fora de l'internet públic, cosa important perquè els ports publicats de Docker se salten ufw.
Allotja les teves aplicacions darrere de nginx
Els plans VPS KVM d'HytHost amb accés root complet, emmagatzematge SSD i protecció DDoS comencen a €2.92/mes.
Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hoursT'ha estat útil aquesta guia?