ansibleguy.infra_nginx

Nginx

Rol de Ansible - Servidor Web Nginx

Rol de Ansible para desplegar uno o múltiples sitios NGINX en un servidor Linux.

Invítame un café

Estado de Prueba Molecule Estado de Prueba YamlLint Estado de Prueba PyLint Estado de Prueba Ansible-Lint Ansible Galaxy

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.

Acerca del proyecto

Role to configure a nginx webserver in one of three basic config modes: proxy, redirect, server

Instalar
ansible-galaxy install ansibleguy.infra_nginx
Licencia
other
Descargas
6.1k
Propietario
[email protected] | GPG: https://badges.ansibleguy.net/public.gpg