NginxReverse ProxyProxy7 min de lectura

Configurar reverse proxy con Nginx

Configurá Nginx como reverse proxy para redirigir tráfico a aplicaciones internas por puerto o dominio.


Un reverse proxy permite exponer aplicaciones internas (Node.js, Python, etc.) a través de Nginx con un dominio, SSL y headers de seguridad.

Caso de uso

Tu aplicación corre en localhost:3000 y querés que sea accesible en https://midominio.com.

Paso 1 — Crear la configuración de Nginx

bash
sudo nano /etc/nginx/sites-available/midominio.com

Contenido:

nginx
server {
    listen 80;
    listen [::]:80;
    server_name midominio.com www.midominio.com;

    location / {
        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_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;
        proxy_cache_bypass $http_upgrade;
    }
}

Paso 2 — Activar y verificar

bash
sudo ln -s /etc/nginx/sites-available/midominio.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Paso 3 — Agregar SSL con Certbot

bash
sudo certbot --nginx -d midominio.com -d www.midominio.com

Certbot modifica automáticamente la configuración para HTTPS.

Paso 4 — Headers de seguridad (opcional)

Agregá dentro del bloque server:

nginx
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;

Paso 5 — WebSocket support

Si tu app usa WebSockets, la configuración de Upgrade y Connection ya lo soporta. Para rutas específicas:

nginx
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";
}

Múltiples aplicaciones

Podés servir varias apps desde el mismo servidor usando diferentes dominios o paths:

nginx
location /api {
    proxy_pass http://127.0.0.1:4000;
}

location /app {
    proxy_pass http://127.0.0.1:5000;
}

Verificar

bash
sudo nginx -t && sudo systemctl reload nginx
curl -I https://midominio.com

¿Te resultó útil esta guía?