~/docs /Nginx y Caddy reverse proxy

Nginx y Caddy reverse proxy

Nginx y Caddy reverse proxy

Imported from Notion: Nginx y Caddy reverse proxy

updated:: 2026.07.10

Que resuelve

Guia rapida para publicar servicios internos mediante reverse proxy con Nginx o Caddy, gestionar TLS, cabeceras y errores comunes.

Cuando usarlo

  • Exponer una app local en HTTP/HTTPS.

  • Terminar TLS en el proxy.

  • Enrutar varios dominios al mismo servidor.

  • Anadir logs y controles basicos delante de una app.

Nginx: sitio minimo

Crear server block

server {
    listen 80;
    server_name {DOMAIN};

    location / {
        proxy_pass http://127.0.0.1:{APP_PORT};
        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;
    }
}

Activar sitio

sudo ln -s /etc/nginx/sites-available/{SITE} /etc/nginx/sites-enabled/{SITE}

Validar configuracion

sudo nginx -t

Recargar sin cortar conexiones

sudo systemctl reload nginx

Nginx: WebSocket

location / {
    proxy_pass http://127.0.0.1:{APP_PORT};
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
}

Nginx: logs utiles

Ver errores

sudo tail -f /var/log/nginx/error.log

Ver accesos

sudo tail -f /var/log/nginx/access.log

Logs de un sitio

access_log /var/log/nginx/{SITE}.access.log;
error_log /var/log/nginx/{SITE}.error.log;

Caddy: sitio minimo

{DOMAIN} {
    reverse_proxy 127.0.0.1:{APP_PORT}
}

Caddy gestiona HTTPS automaticamente si el dominio apunta al servidor y los puertos 80/443 estan accesibles.

Caddy: validar y recargar

Validar

caddy validate --config /etc/caddy/Caddyfile

Recargar

sudo systemctl reload caddy

Ver logs

journalctl -u caddy -f

Cabeceras recomendadas

Nginx

add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;

Caddy

header {
    X-Content-Type-Options "nosniff"
    X-Frame-Options "SAMEORIGIN"
    Referrer-Policy "strict-origin-when-cross-origin"
}

Diagnostico

Probar desde el servidor

curl -i http://127.0.0.1:{APP_PORT}

Probar dominio

curl -I https://{DOMAIN}

Ver puertos

ss -tulpen | grep -E ':80|:443|:{APP_PORT}'

Variables

VariableDescripcion
{DOMAIN}Dominio publico o interno
{APP_PORT}Puerto donde escucha la app
{SITE}Nombre del sitio

Errores comunes

SintomaCausa probableSolucion
502 Bad GatewayApp apagada o puerto incorrectoPrueba curl 127.0.0.1:{APP_PORT}
Certificado no saleDNS o puertos 80/443Revisa DNS, firewall y logs
WebSocket fallaFaltan headers UpgradeUsa bloque WebSocket
Cambios no aplicanNo recargaste servicionginx -t y reload

Checklist final

  • La app responde en local.

  • DNS apunta al servidor.

  • Firewall permite 80/443.

  • Config valida antes de recargar.

  • Logs separados si hay varios sitios.

- EOF -