Habilitar configuración dinámica: provider file + directorio dynamic con middlewares
This commit is contained in:
@@ -11,6 +11,7 @@ services:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
- ./traefik.yml:/traefik.yml:ro
|
||||
- ./letsencrypt:/letsencrypt
|
||||
- ./dynamic:/etc/traefik/dynamic:ro
|
||||
environment:
|
||||
TZ: "Europe/Madrid"
|
||||
networks:
|
||||
|
||||
41
dynamic/README.md
Normal file
41
dynamic/README.md
Normal file
@@ -0,0 +1,41 @@
|
||||
# Configuración Dinámica de Traefik
|
||||
|
||||
Este directorio contiene configuración que Traefik recarga automáticamente sin reiniciar el contenedor.
|
||||
|
||||
## Archivos
|
||||
|
||||
- **middlewares.yml**: Middlewares reutilizables (headers seguridad, rate limit, auth, etc.)
|
||||
|
||||
## Uso
|
||||
|
||||
### Aplicar middleware a un servicio
|
||||
|
||||
En el `docker-compose.yaml` de tu servicio:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
mi-servicio:
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.mi-servicio.rule=Host(`app.tudominio.com`)"
|
||||
- "traefik.http.routers.mi-servicio.entrypoints=websecure"
|
||||
- "traefik.http.routers.mi-servicio.tls.certresolver=letsencrypt"
|
||||
- "traefik.http.routers.mi-servicio.middlewares=security-headers@file,rate-limit@file"
|
||||
```
|
||||
|
||||
**Nota:** El sufijo `@file` indica que el middleware viene de configuración dinámica.
|
||||
|
||||
### Cadena de middlewares
|
||||
|
||||
Puedes combinar varios:
|
||||
```yaml
|
||||
- "traefik.http.routers.app.middlewares=security-headers@file,rate-limit@file,ip-whitelist@file"
|
||||
```
|
||||
|
||||
## Recarga automática
|
||||
|
||||
Traefik detecta cambios en este directorio y recarga sin reiniciar. Espera ~10 segundos tras editar.
|
||||
|
||||
## Ejemplos adicionales
|
||||
|
||||
Consulta la wiki: https://git.ictiberia.com/groales/traefik/wiki/Middlewares-Seguridad
|
||||
43
dynamic/middlewares.yml
Normal file
43
dynamic/middlewares.yml
Normal file
@@ -0,0 +1,43 @@
|
||||
http:
|
||||
middlewares:
|
||||
# Headers de seguridad
|
||||
security-headers:
|
||||
headers:
|
||||
stsSeconds: 63072000
|
||||
forceSTSHeader: true
|
||||
stsIncludeSubdomains: true
|
||||
stsPreload: true
|
||||
frameDeny: true
|
||||
contentTypeNosniff: true
|
||||
browserXssFilter: true
|
||||
referrerPolicy: "strict-origin-when-cross-origin"
|
||||
customResponseHeaders:
|
||||
X-Robots-Tag: "none,noarchive,nosnippet,notranslate,noimageindex"
|
||||
|
||||
# Rate limiting
|
||||
rate-limit:
|
||||
rateLimit:
|
||||
average: 100
|
||||
burst: 200
|
||||
period: 1m
|
||||
|
||||
# IP Whitelist (ejemplo - ajusta tus IPs)
|
||||
ip-whitelist:
|
||||
ipWhiteList:
|
||||
sourceRange:
|
||||
- "127.0.0.1/32"
|
||||
- "10.0.0.0/8"
|
||||
- "192.168.0.0/16"
|
||||
|
||||
# Autenticación básica (genera hash con: htpasswd -nb usuario password)
|
||||
# auth-basic:
|
||||
# basicAuth:
|
||||
# users:
|
||||
# - "admin:$apr1$..."
|
||||
|
||||
# Redirect www a root
|
||||
redirect-www:
|
||||
redirectRegex:
|
||||
regex: "^https?://www\\.(.+)"
|
||||
replacement: "https://${1}"
|
||||
permanent: true
|
||||
@@ -19,9 +19,9 @@ providers:
|
||||
endpoint: "unix:///var/run/docker.sock"
|
||||
exposedByDefault: false
|
||||
network: proxy
|
||||
# file:
|
||||
# directory: /etc/traefik/dynamic
|
||||
# watch: true
|
||||
file:
|
||||
directory: /etc/traefik/dynamic
|
||||
watch: true
|
||||
# Certificates from an ACME server
|
||||
certificatesResolvers:
|
||||
letsencrypt:
|
||||
|
||||
Reference in New Issue
Block a user