Reverse Proxy, TLS y Dominios
Reverse proxy, TLS y dominios
Section titled “Reverse proxy, TLS y dominios”No hay configuracion real de Nginx, Caddy, Apache, Docker o load balancer en los repos inspeccionados. Esta pagina define requisitos y un ejemplo de referencia, no una configuracion final.
Dominios recomendados
Section titled “Dominios recomendados”Frontend: https://app.<dominio>API: https://api.<dominio>Docs: https://docs.<dominio> opcionalapp.<dominio> y api.<dominio> son same-site si comparten dominio raiz. En esa topologia, SameSite=Lax es recomendado. Si el frontend y la API viven en dominios raiz distintos, se vuelve cross-site y se necesita SameSite=None; Secure con CSRF y Origin/Referer estrictos.
TLS / HTTPS
Section titled “TLS / HTTPS”Produccion debe cumplir:
- Certificado TLS valido para
app.<dominio>yapi.<dominio>. - Renovacion automatizada y monitoreada.
- Redireccion HTTP -> HTTPS.
AUTH_COOKIE_SECURE=true.- HSTS despues de validar dominios y rollback.
- No mezclar contenido HTTP en el frontend.
- API no expuesta por HTTP publico.
Antes de activar HSTS, confirma que:
- Certificados se renuevan.
- No hay subdominios dependientes de HTTP.
- Rollback DNS/proxy esta documentado.
- Soporte sabe que el navegador recordara HTTPS.
Headers proxy requeridos
Section titled “Headers proxy requeridos”El proxy debe preservar o fijar:
| Header | Motivo |
|---|---|
Host | Ruteo y auditoria. |
X-Forwarded-Host | Diagnostico detras de proxy. |
X-Forwarded-Proto | Saber si la request original fue HTTPS. |
X-Forwarded-For | IP cliente para logs/rate limit. |
X-Real-IP | Alternativa de IP cliente si el proxy la usa. |
Configura EXPRESS_TRUST_PROXY de forma estricta si el backend depende de IP/proto proxy. No uses true amplio sin entender la cadena de proxies.
Reglas de cache
Section titled “Reglas de cache”No cachear:
/api/auth/*- Cualquier endpoint con cookies auth.
- Respuestas con datos clinicos/personales.
- Errores de auth
401,403,429.
Puede cachearse con cuidado:
- Assets estaticos con hash del frontend.
- Docs publicas si no contienen secretos.
Logs proxy
Section titled “Logs proxy”No registrar:
- Header
Cookiecompleto. - Header
Authorization. - Body de login/reset/password.
- CSRF token completo.
- Tokens publicos completos de firma.
Registrar de forma segura:
- Metodo.
- Ruta sanitizada.
- Status.
- Latencia.
- Origin.
- IP normalizada.
- User agent.
- Request ID si existe.
Limites y timeouts
Section titled “Limites y timeouts”| Control | Recomendacion inicial |
|---|---|
| Body size | Alinear con backend; src/index.js usa limites altos (50mb y 90mb). Reducir por ruta si se puede. |
| Request timeout | Definir por tipo: auth corto, uploads mas largo. |
| Keep-alive | Controlado por proxy. |
| Compression | Usar para assets/texto; no comprimir respuestas sensibles si hay riesgo de side channel. |
| Rate limit | Aplicar especialmente a auth, OTP, reset y public signature. |
Ejemplo Nginx conceptual
Section titled “Ejemplo Nginx conceptual”Este ejemplo no fue encontrado en repo. Adaptalo al proveedor real y revisalo antes de usar.
server { listen 80; server_name app.<dominio> api.<dominio>; return 301 https://$host$request_uri;}
server { listen 443 ssl http2; server_name api.<dominio>;
ssl_certificate /etc/letsencrypt/live/api.<dominio>/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/api.<dominio>/privkey.pem;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
location / { proxy_pass http://127.0.0.1:3009; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_read_timeout 60s; proxy_send_timeout 60s; client_max_body_size 50m; }}
server { listen 443 ssl http2; server_name app.<dominio>; root /var/www/medsync-front/dist; index index.html;
location / { try_files $uri $uri/ /index.html; }
location = /index.html { add_header Cache-Control "no-store"; }}Checklist antes de produccion
Section titled “Checklist antes de produccion”- DNS apunta a la infraestructura correcta.
- TLS A/AAAA y SNI funcionan.
- HTTP redirige a HTTPS.
- Certificado cubre nombres reales.
- Proxy no registra cookies completas.
api.<dominio>responde preflight CORS permitido.- Origen no permitido no recibe
Access-Control-Allow-Credentials. app.<dominio>carga assets y fallback SPA.- No hay mixed content.
EXPRESS_TRUST_PROXYcoincide con topologia real.