Saltar al contenido

Traefik Reverse Proxy

Traefik es un moderno proxy HTTP inverso y equilibrador de carga que facilita el despliegue de microservicios. Traefik se integra con los componentes de su infraestructura existente (Docker, Swarm mode, Kubernetes, Marathon, Consul, Etcd, Rancher, Amazon ECS, …) y se configura de forma automática y dinámica. Apuntar a Traefik en su orquestador debería ser el único paso de configuración que necesita. Esta configuración es A+. Prueba tu configuración aquí en SSLlabs.

Crear docker-compose.yml, traefik.toml y acme.json en el mismo directorio o cambiar sus rutas en la sección de volumen.

Traefik Reverse ProxyTraefik Reverse Proxy
Nota

Asegúrate de activar la protección básica de Auth para Traefik o desactivar su Dashboard. De lo contrario, su Dashboard será accesible desde Internet.

$ sudo apt install apache2-utils$ echo $(htpasswd -nb username mystrongpassword) | sed -e s/\N$/N-$/g

Este comando escapa automáticamente todos los $ dentro de la contraseña del archivo YML. Si se usa un archivo de entorno, no necesita que se escape el $ ya que no será interpretado por el shell.

docker-compose.yml

versión: $00273.5$0027servicios: traefik: nombre_contenedor: imagen traefik: redes traefik:v1.7: - puertos traefik: - 80:80 - 443:443 volúmenes: - /var/run/docker.sock:/var/run/docker.sock - ./traefik.toml:/traefik.toml - ./acme.json:/acme.json etiquetas: traefik.enable: "true" traefik.backend: traefik traefik.docker.network: traefik traefik.port: 8080 traefik.frontend.rule: Host:traefik.example.com, traefik.frontend.entryPoints: https traefik.frontend.passHostHeader: "true" traefik.frontend.headers.SSLForceHost: "true" traefik.frontend.headers.SSLHost: traefik.example.com traefik.frontend.headers.SSLRedirect: "true" traefik.frontend.headers.browserXSSFilter: "true" traefik.frontend.headers.contentTypeNosniff: "true" traefik.frontend.headers.forceSTSHeader: "true" traefik.frontend.headers.STSSegundos: 315360000 cabeceras.del.frontend.traefik.STSIncludeSubdominios: "true" traefik.frontend.headers.STSPreload: "true" traefik.frontend.headers.customResponseHeaders: X-Robots-Tag:noindex,nofollow,nosnippet,noarchive,notranslate,noimageindex traefik.frontend.headers.frameDeny: "true" traefik.frontend.headers.customFrameOptionsValue: $0027allow-from https://example.com$0027 restart: unless-stop jellyfin: image: jellyfin/jellyfin nombre_contenedor: jellyfin modo_red: volúmenes "host": - /path/to/config:/config - /path/to/cache:/cache - /path/to/media:/media restart: unless-stoppednetworks: traefik: name: traefik

Este archivo TOML no puede soportar variables de entorno, así que no intente usar variables.

Advertencia

Debido a un fallo en Traefik, no se puede enrutar dinámicamente a los contenedores cuando network_mode=host, por lo que hemos creado una ruta estática al host del docker (172.17.0.1:8096) en traefik.toml. El uso de redes de host (o macvlan) es necesario para utilizar la DLNA o un HdHomeRun ya que soporta redes multicast.

traefik.toml

logLevel = "WARN "defaultPuntos de entrada = ["http", "https"] [entryPoints] [entryPoints.http] dirección = ":80" [entryPoints.http.redirect] entryPoint = "https" [entryPoints.https] dirección = ":443" [entryPoints.https. tls] minVersion = "VersionTLS12" cipherSuites = [ "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305", "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305", "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256" ][reintento][api][acme]acmeLogging = trueemail = "user@example.com "storage = "acme.json "entryPoint = "https" [acme.dnsChallenge] provider = "provider" delayBeforeCheck = "60"[[acme.domains]] main = "*.example.com"[docker]domain = "example.com "network = "traefik "exposedbydefault = false[file][backends] [backends. backend-jellyfin] [backends.backend-jellyfin.servidores] [backends.backend-jellyfin.servidores.servidor-1] url = "http://172.17.0.1:8096"[frontends] [frontends.jellyfin] backend = "backend-jellyfin" passHostHeader = true [frontends.jellyfin.rutas] [frontends.jellyfin.rutas.route-jellyfin-ext] rule = "Host:jellyfin.example.com" [frontends.jellyfin.headers] SSLRedirect = true SSLHost = "jellyfin.example.com" SSLForceHost = true STSSeconds = 315360000 STSIncludeSubdomains = true STSPreload = true forceSTSHeader = true frameDeny = true contentTypeNosniff = true browserXSSFilter = true customResponseHeaders = "X-Robots-Tag:noindex,nofollow,nosnippet,noarchive,notranslate,noimageindex" customFrameOptionsValue = "allow-from https://example.com"

Finalmente, crea un archivo acme.json vacío para manejar el certificado.

$ touch acme.json$ chmod 600 acme.json
Advertencia

Cambie example.com por su nombre de dominio y actualice el archivo acme.json con su dirección de correo electrónico. Let$0027s Encrypt no requiere un correo electrónico válido pero example.com será marcado como falso.

Lanza los servicios de Traefik y Jellyfin.

$ docker-componer -d

Felicitaciones, tu pila con Traefik y Jellyfin está corriendo!

Ve al dominio que usaste antes en el archivo de configuración y tu servidor Jellyfin se ejecutará con HTTPS (AES 256) activado.