ansibleguy.infra_nginx
Rol de Ansible - Servidor Web Nginx
Rol de Ansible para desplegar uno o múltiples sitios NGINX en un servidor Linux.
Registros de Molécula: Corto, Completo
Probado en:
- Debian 11
- Debian 12
Instalación
# última versión
ansible-galaxy role install git+https://github.com/ansibleguy/infra_nginx
# desde galaxy
ansible-galaxy install ansibleguy.infra_nginx
# o para una ruta de roles personalizada
ansible-galaxy install ansibleguy.infra_nginx --roles-path ./roles
# instalar dependencias
ansible-galaxy install -r requirements.yml
# si deseas usar autenticación básica: instala dependencias de Python
python3 -m pip install -r requirements.txt
Uso
¿Quieres una interfaz gráfica sencilla para Ansible? Revisa mi Ansible WebUI
Configuración
¡Define el diccionario de nginx como lo necesites!
nginx:
config:
client_max_body_size: '500m'
ssl_session_timeout: '15m'
sites:
some_proxy:
mode: 'proxy'
domain: 'some.guy.net'
aliases:
- 'service.guy.net'
port_ssl: 8443
port_plain: 8080
proxy: # el objetivo por defecto es localhost
port: 50000 # puerto objetivo
cache: # caché de contenido externo
enable: true
ssl:
mode: 'existing' # certificados preexistentes que se copiarán al servidor objetivo
security:
# filtrado muy básico de bots malos basándose en la coincidencia del user-agent
block_script_bots: true
block_bad_crawler_bots: true
guys_statics:
mode: 'server'
domain: 'static.guy.net'
serve:
path: '/var/www/static'
ssl:
mode: 'snakeoil'
config: # añadir configuraciones como pares clave-valor
LimitRequestFields: 10
config_additions: # añadir una lista de líneas de configuración personalizadas
- 'location = /favicon.ico {alias /var/not_www/site_guys_statics/favicon.ico;}'
git_stuff:
mode: 'redirect'
redirect:
target: 'https://github.com/ansibleguy'
ssl:
mode: 'letsencrypt'
letsencrypt:
email: '[email protected]'
security:
restrict_methods: false
fileshare:
mode: 'server'
domain: 'files.guy.net'
serve:
path: '/var/www/files'
basic_auth:
enable: true
provider: 'file'
file:
users:
some_user: 'some_password'
Ejecución
Ejecuta el playbook:
ansible-playbook -K -D -i inventory/hosts.yml playbook.yml
Para procesar solo un sitio específico: (y ahorrar tiempo)
ansible-playbook -K -D -i inventory/hosts.yml playbook.yml -e only_site=SITE_NAME
# nota: varios sitios separados por comas también deberían funcionar
También hay algunas etiquetas útiles disponibles:
- base => solo configurar lo básico; los sitios no se tocarán
- sites
- config => solo actualizar la configuración del sitio (excluyendo certificados)
- certs
- letsencrypt
- auth
- only_certs (se puede usar como etiqueta de omisión)
Para depurar errores, puedes establecer la variable 'debug' en tiempo de ejecución:
ansible-playbook -K -D -i inventory/hosts.yml playbook.yml -e debug=yes
Funcionalidad
Instalación de paquetes
- Dependencias de Ansible (mínimas)
- Nginx
Configuración
Soporte para múltiples sitios/servidores
Tres modos de configuración:
- proxy (por defecto)
- serve
- redirect
Soporte para configuraciones específicas utilizando los parámetros 'config' y 'config_additions'
Opción de filtrar 'locations' por GeoIP => PRÓXIMAMENTE (:
Configuración por defecto:
- Desactivado: <TLS1.2, cifrados inseguros, autoindex, servertokens
- Encabezados de seguridad: HSTS, X-Frame, Referrer-Policy, Content-Type nosniff, X-Domain-Policy, XXS-Protection
- Límites para prevenir DDoS
- Usando un certificado autofirmado
- HTTP2 habilitado con retroceso a HTTP1.1
- Soporte para IPv6 habilitado
Modos SSL (para más información consulta: ROL DE CERTIFICADOS)
- selfsigned => Generar certificados autofirmados
- ca => Generar una Autoridad Certificadora mínima y un certificado firmado por ella
- letsencrypt => Usa el certbot de LetsEncrypt
- existing => Copiar archivos de certificados o usar los existentes
Opciones por defecto:
- restringir métodos a POST/GET/HEAD
- listener de página de estado en localhost
- Registro en syslog
- http2
Opciones por defecto para desactivar:
- caché en modo proxy
- Bloqueo de bots de scripts conocidos
- Bloqueo de bots de rastreo malos conocidos
Información
Nota: este rol actualmente solo soporta sistemas basados en Debian
Nota: La mayoría de las funciones del rol pueden ser activadas o desactivadas.
Para todas las opciones disponibles - consulta la configuración por defecto ubicada en el archivo principal/datos del sitio.
Información: Muchas variables pueden ser configuradas en ámbitos 'globales' o 'por sitio'.
La configuración del sitio siempre sobrepasa la global.
Nota: Este rol espera que el 'servidor' no encriptado del sitio solo redirija a su conexión encriptada.
Nota: Si deseas que todos los nombres de dominio sean 'atrapados' por un sitio/servidor, necesitas añadir un guion bajo '_' como alias o dominio!
Esto también se hará automáticamente si no se suministra un dominio.Advertencia: No todas las configuraciones/variables que proporciones serán verificadas por validez. Una mala configuración podría romper el rol!
Información: Para desactivar configuraciones y encabezados por defecto => simplemente establece su valor a: '' (cadena vacía)
Información: Si estás filtrando solicitudes web a través de un filtro GeoIP usando tu firewall => LetsEncrypt funcionará solo abriendo el puerto 80 al público.
Solicitudes que no sean '.well-known/acme-challenge/' serán simplemente redirigidas a 443.
Información: Para que la renovación de LetsEncrypt funcione, debes permitir conexiones salientes a:
80/tcp, 443/tcp+udp a acme-v02.api.letsencrypt.org, staging-v02.api.letsencrypt.org (modo de depuración) y r3.o.lencr.org
Información: Este rol también soporta la configuración de autenticación básica.
Para casos de uso avanzados, es posible que desees establecer auth_request en
site.config_additions_root
, que se puede usar para implementar proxys de OAuth y más.Información: Puedes establecer la bandera
plain_only
para desactivar HTTPS. Esto podría ser útil si estás detrás de otro servidor proxy.
Role to configure a nginx webserver in one of three basic config modes: proxy, redirect, server
ansible-galaxy install ansibleguy.infra_nginx