Configuración de Servidores con Reverse Proxy y SSL

Diagrama de flujo

              INTERNET
                 |
        IP pública: 187.109.104.001
                 |
               pfSense
        (NAT/Port Forward 80 y 443)
                 |
         -----------------------
         |                     |
Servidor principal          Nuevo servidor
(Nginx + SSL + Certbot)    (Node.js + Angular)
  - Subdominios              - Node.js backend (puerto 3000)
  - SSL LetsEncrypt           - Angular build (puerto 4200 Nginx interno)
  - Reverse proxy → LAN

Configuración de subdominios en el Servidor Principal Nginx

1. Node.js backend en nuevo servidor

server {
    listen 443 ssl;
    server_name api.midominio.com;

    ssl_certificate /etc/letsencrypt/live/api.midominio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/api.midominio.com/privkey.pem;

    location / {
        proxy_pass http://IP-PRIVADA:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

2. Angular frontend en nuevo servidor (servido por Nginx interno)

server {
    listen 443 ssl;
    server_name front.midominio.com;

    ssl_certificate /etc/letsencrypt/live/front.midominio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/front.midominio.com/privkey.pem;

    location / {
        proxy_pass http://IP-PRIVADA:4200;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }
}

3. Laravel en servidor viejo

server {
    listen 443 ssl;
    server_name app.midominio.com;

    ssl_certificate /etc/letsencrypt/live/app.midominio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/app.midominio.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
    }
}

Nginx interno en el nuevo servidor (Angular)

server {
    listen 4200;
    server_name front.internal;

    root /var/www/frontend/dist/app-dir/browser;
    index index.html;

    location / {
        try_files $uri /index.html;
    }
}

Node.js backend interno

cd /var/www/backend/dist
node server.js

DNS y pfSense

  1. DNS:

    • api.midominio.com → IP pública 187.109.104.001

    • front.midominio.com → IP pública 187.109.104.001

    • app.midominio.com → IP pública 187.109.104.001

  2. pfSense NAT/Port Forward:

    • Puertos 80 y 443 apuntan al servidor principal

    • Nginx principal hace reverse proxy a los servidores internos según subdominio y puerto.

Ventajas

  • Servidor principal maneja SSL y certificados.

  • Servidores internos usan puertos internos sin exponerlos públicamente.

  • Certbot puede renovar certificados automáticamente.

  • Evita saturación del servidor viejo y conflictos de puerto.


Notas para GitBook: copia todo el contenido en un archivo Markdown (.md) y mantenlo en la carpeta de tu repositorio para que GitBook lo procese automáticamente. También puedes agregar diagramas con mermaid si quieres visualizaciones más avanzadas.

Última actualización