Saltar al contenido principal

Guía de reverse proxy

Un reverse proxy permite publicar PlexSub con HTTPS y un dominio propio.

Ejemplos habituales: Nginx Proxy Manager, Traefik, Caddy, SWAG y Cloudflare Tunnel.

Variables importantes

APP_BASE_URL=https://plexsub.tudominio.com
PORT=5000
TRUST_PROXY_LEVEL=1
FORCE_SECURE_COOKIES=1
PLEXSUB_ALLOW_PRIVATE_TARGETS=0

APP_BASE_URL debe coincidir exactamente con la URL pública real.

TRUST_PROXY_LEVEL

Para un proxy inverso normal usa TRUST_PROXY_LEVEL=1. Si no hay proxy de confianza delante, usa TRUST_PROXY_LEVEL=0.

Cookies seguras

Si publicas con HTTPS, usa FORCE_SECURE_COOKIES=1. Si pruebas solo por HTTP local, puedes usar FORCE_SECURE_COOKIES=0 temporalmente.

Cabeceras recomendadas

El proxy debe reenviar:

  • Host.
  • X-Forwarded-For.
  • X-Forwarded-Proto.
  • X-Real-IP si tu proxy lo usa.

Nginx Proxy Manager

  • Domain Names: tu dominio.
  • Scheme: http.
  • Forward Hostname/IP: IP o nombre del host donde está PlexSub.
  • Forward Port: 5000.
  • Websockets Support: activado si está disponible.
  • SSL: certificado válido.
  • Force SSL: activado.

Cloudflare Tunnel

Configura el túnel para apuntar a http://localhost:5000 o a la IP/servicio interno correspondiente.

Mantén APP_BASE_URL con la URL HTTPS pública, TRUST_PROXY_LEVEL=1 y FORCE_SECURE_COOKIES=1.

No expongas PostgreSQL

El proxy debe publicar solo PlexSub. No publiques PostgreSQL, puertos internos innecesarios ni dashboards privados sin protección.

Validación

  • Abre la URL pública.
  • Inicia sesión.
  • Revisa Customer Portal.
  • Comprueba que no hay bucles de redirección.
  • Revisa logs.
  • Prueba desde móvil fuera de tu red.

Problemas comunes

Si hay bucle de login, revisa APP_BASE_URL, HTTPS, cookies, cabeceras proxy y TRUST_PROXY_LEVEL.

Si aparece mixed content, usa APP_BASE_URL=https://... y fuerza HTTPS en el proxy.

Checklist

  • Dominio apunta al proxy.
  • Certificado SSL válido.
  • Proxy apunta a puerto 5000.
  • APP_BASE_URL usa HTTPS.
  • TRUST_PROXY_LEVEL=1.
  • FORCE_SECURE_COOKIES=1.
  • PostgreSQL no está expuesto.