sorrowless.nginx

sbog/nginx

Estado de Compilación Rol de Ansible Puntuación de Calidad de Ansible Rol de Ansible GitHub

Este rol instala y configura el servidor web nginx. El usuario puede especificar cualquier parámetro de configuración http que desee para su sitio. Se pueden agregar cualquier número de sitios con las configuraciones que elija.

Requisitos

Este rol requiere Ansible 2.4 o superior y los requisitos de plataforma están listados en el archivo de metadatos. (Algunas versiones anteriores del rol admiten Ansible 1.4) Para FreeBSD se requiere una configuración funcional de pkgng (ver: https://www.freebsd.org/doc/handbook/pkgng-intro.html) La instalación del agente de Nginx Amplify solo se admite en distribuciones de CentOS, RedHat, Amazon, Debian y Ubuntu.

Instalación

ansible-galaxy install sorrowless.nginx

Variables del Rol

Las variables que se pueden pasar a este rol y una breve descripción de ellas son las siguientes. (Para todas las variables, eche un vistazo a defaults/main.yml)

# El usuario que ejecuta nginx
nginx_user: "www-data"

# Una lista de directivas para la sección de eventos.
nginx_events_params:
 - worker_connections 512
 - debug_connection 127.0.0.1
 - use epoll
 - multi_accept on

# Una lista de hashes que definen los servidores para nginx,
# así como parámetros http. Se pueden definir aquí cualquier parámetro de servidor válido.
nginx_sites:
 default:
     - listen 80
     - server_name _
     - root "/usr/share/nginx/html"
     - index index.html
 foo:
     - listen 8080
     - server_name localhost
     - root "/tmp/site1"
     - location / { try_files $uri $uri/ /index.html; }
     - location /images/ { try_files $uri $uri/ /index.html; }
 bar:
     - listen 9090
     - server_name ansible
     - root "/tmp/site2"
     - location / { try_files $uri $uri/ /index.html; }
     - location /images/ {
         try_files $uri $uri/ /index.html;
         allow 127.0.0.1;
         deny all;
       }

# Una lista de hashes que definen configuraciones adicionales
nginx_configs:
  proxy:
      - proxy_set_header X-Real-IP  $remote_addr
      - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
  upstream:
      - upstream foo { server 127.0.0.1:8080 weight=10; }
  geo:
      - geo $local {
          default 0;
          127.0.0.1 1;
        }
  gzip:
      - gzip on
      - gzip_disable msie6

# Una lista de hashes que definen fragmentos de configuración
nginx_snippets:
  error_pages:
    - error_page 500 /http_errors/500.html
    - error_page 502 /http_errors/502.html
    - error_page 503 /http_errors/503.html
    - error_page 504 /http_errors/504.html

# Una lista de hashes que definen archivos de usuario/contraseña
nginx_auth_basic_files:
   demo:
     - foo:$apr1$mEJqnFmy$zioG2q1iDWvRxbHuNepIh0 # foo:demo , generado por : htpasswd -nb foo demo
     - bar:$apr1$H2GihkSo$PwBeV8cVWFFQlnAJtvVCQ. # bar:demo , generado por : htpasswd -nb bar demo

# Habilitar IP real para solicitudes de CloudFlare
nginx_set_real_ip_from_cloudflare: True

# Habilitar Nginx Amplify
nginx_amplify: true
nginx_amplify_api_key: "tu_clave_api_aqui"
nginx_amplify_update_agent: true

# Definir módulos para habilitar en la configuración
#
# Nginx instalado a través de EPEL y repositorios APT también instalará algunos módulos automáticamente.
# Para el uso del repositorio oficial de Nginx necesitarás instalar los paquetes de módulo manualmente.
#
# Al usar EPEL y repositorios APT, especifique esta sección como una lista de archivo de configuración
# con la extensión .conf eliminada.

# Al usar el repositorio oficial de Nginx, especifique esta sección como una lista de nombres de archivos de módulo
# con la extensión .so eliminada.
#
# Archivos de configuración de módulo disponibles en repositorios EPEL y APT
# (APT en realidad tiene varios más, vea https://wiki.debian.org/Nginx/)
# - mod-http-geoip
# - mod-http-image-filter
# - mod-http-perl
# - mod-http-xslt-filter
# - mod-mail
# - mod-stream
#
# Nombres de archivo de módulo disponibles en el repositorio oficial de NGINX:
# - ngx_http_geoip_module
# - ngx_http_image_filter_module
# - ngx_http_perl_module
# - ngx_http_xslt_filter_module
# - ngx_http_js_module
#
# Módulos compilados personalizados también están bien si el archivo .so existe en la misma ubicación que un módulo empaquetado:
# - ngx_http_modsecurity_module
#
nginx_module_configs:
  - mod-http-geoip

Ejemplos

1) Instalar nginx con directivas HTTP de elección, pero sin sitios configurados y sin configuración adicional:

- hosts: all
  roles:
  - {role: nginx,
     nginx_http_params: ["sendfile on", "access_log /var/log/nginx/access.log"]
                          }

2) Instalar nginx con diferentes directivas HTTP que en el ejemplo anterior, pero sin

sitios configurados y sin configuración adicional.

- hosts: all
  roles:
  - {role: nginx,
     nginx_http_params: ["tcp_nodelay on", "error_log /var/log/nginx/error.log"]}

Nota: Asegúrate de que las directivas HTTP pasadas sean válidas, ya que este rol no verificará la validez de las directivas. Consulta la documentación de nginx para más detalles.

3) Instalar nginx y agregar un sitio a la configuración.

- hosts: all

  roles:
  - role: nginx
    nginx_http_params:
      - sendfile "on"
      - access_log "/var/log/nginx/access.log"
    nginx_sites:
      bar:
        - listen 8080
        - location / { try_files $uri $uri/ /index.html; }
        - location /images/ { try_files $uri $uri/ /index.html; }
    nginx_configs:
      proxy:
        - proxy_set_header X-Real-IP  $remote_addr
        - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for

4) Instalar nginx y agregar variables adicionales a la configuración predeterminada

- hosts: all
  vars:
    - my_extra_params:
      - client_max_body_size 200M
# conservar los valores predeterminados y agregar el parámetro adicional `client_max_body_size`
  roles:
    - role: sorrowless.nginx
      nginx_http_params: "{{ nginx_http_default_params + my_extra_params }}"

Nota: Cada sitio agregado se representa mediante una lista de hashes, y las configuraciones generadas se llenan en /etc/nginx/site-available/ y se vinculan desde /etc/nginx/site-enable/ a /etc/nginx/site-available.

El nombre del archivo para la configuración de un sitio específico se especifica en el hash con la clave "file_name", se pueden agregar cualquier directiva de servidor válida al hash. Se crean configuraciones adicionales en /etc/nginx/conf.d/

5) Instalar Nginx, agregar 2 sitios (método diferente) y agregar configuración adicional.

---
- hosts: all
  roles:
    - role: nginx
      nginx_http_params:
        - sendfile on
        - access_log /var/log/nginx/access.log
      nginx_sites:
         foo:
           - listen 8080
           - server_name localhost
           - root /tmp/site1
           - location / { try_files $uri $uri/ /index.html; }
           - location /images/ { try_files $uri $uri/ /index.html; }
         bar:
           - listen 9090
           - server_name ansible
           - root /tmp/site2
           - location / { try_files $uri $uri/ /index.html; }
           - location /images/ { try_files $uri $uri/ /index.html; }
      nginx_configs:
         proxy:
            - proxy_set_header X-Real-IP  $remote_addr
            - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for

6) Instalar Nginx, agregar 2 sitios, agregar configuración adicional y un bloque de configuración upstream.

---
- hosts: all
  roles:
    - role: nginx
      nginx_error_log_level: info
      nginx_http_params:
        - sendfile on
        - access_log /var/log/nginx/access.log
      nginx_sites:
        foo:
           - listen 8080
           - server_name localhost
           - root /tmp/site1
           - location / { try_files $uri $uri/ /index.html; }
           - location /images/ { try_files $uri $uri/ /index.html; }
        bar:
           - listen 9090
           - server_name ansible
           - root /tmp/site2
           - if ( $host = example.com ) { rewrite ^(.*)$ http://www.example.com$1 permanent; }
           - location / {
             try_files $uri $uri/ /index.html;
             auth_basic            "Restringido";
             auth_basic_user_file  auth_basic/demo;
           }
           - location /images/ { try_files $uri $uri/ /index.html; }
      nginx_configs:
        proxy:
            - proxy_set_header X-Real-IP  $remote_addr
            - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
        upstream:
            # Resulta en:
            # upstream foo_backend {
            #   server 127.0.0.1:8080 weight=10;
            # }
            - upstream foo_backend { server 127.0.0.1:8080 weight=10; }
      nginx_auth_basic_files:
        demo:
           - foo:$apr1$mEJqnFmy$zioG2q1iDWvRxbHuNepIh0 # foo:demo , generado por : htpasswd -nb foo demo
           - bar:$apr1$H2GihkSo$PwBeV8cVWFFQlnAJtvVCQ. # bar:demo , generado por : htpasswd -nb bar demo

7) Instalar Nginx, agregar un sitio y usar una sintaxis yaml especial para hacer bloques de ubicación de varias líneas para mayor claridad.

---
- hosts: all
  roles:
    - role: nginx
      nginx_http_params:
        - sendfile on
        - access_log /var/log/nginx/access.log
      nginx_sites:
        foo:
           - listen 443 ssl
           - server_name foo.example.com
           - set $myhost foo.example.com
           - |
             location / {
               proxy_set_header Host foo.example.com;
             }
           - |
             location ~ /v2/users/.+?/organizations {
               if ($request_method = PUT) {
                 set $myhost bar.example.com;
               }
               if ($request_method = DELETE) {
                 set $myhost bar.example.com;
               }
               proxy_set_header Host $myhost;
             }

8) Ejemplo de usar este rol con mi rol de ssl-certs para generar o copiar certificado ssl ( https://galaxy.ansible.com/sorrowless/ssl-certs )

 - hosts: all
   roles:
     - jdauphant.ssl-certs
     - role: sorrowless.nginx
       nginx_configs:
          ssl:
               - ssl_certificate_key {{ssl_certs_privkey_path}}
               - ssl_certificate     {{ssl_certs_cert_path}}
       nginx_sites:
          default:
               - listen 443 ssl
               - server_name _
               - root "/usr/share/nginx/html"
               - index index.html

9) Configuración del sitio usando una plantilla personalizada.

En lugar de definir un archivo de configuración de sitio usando una lista de atributos, puedes usar un hash/diccionario que incluya el nombre del archivo de una plantilla alternativa. Valores adicionales son accesibles dentro de la plantilla a través de la variable item.value.

- hosts: all

  roles:
  - role: nginx
    nginx_sites:
      custom_bar:
        template: custom_bar.conf.j2
        server_name: custom_bar.example.com

Plantilla personalizada: custom_bar.conf.j2:

# {{ ansible_managed }}
upstream backend {
  server 10.0.0.101;
}
server {
  server_name {{ item.value.server_name }};
  location / {
    proxy_pass http://backend;
  }
}

Usar una plantilla personalizada permite una flexibilidad ilimitada en la configuración del archivo de configuración del sitio. Este ejemplo demuestra la práctica común de configurar un bloque de servidor del sitio en el mismo archivo que su bloque upstream complementario. Si usas esta opción:

  • El hash debe incluir un valor template:, o la tarea de configuración fallará.
  • Este rol no puede verificar la validez de tu plantilla personalizada. Si usas este método, el formato del archivo conf proporcionado por este rol no está disponible, y depende de ti proporcionar una plantilla con contenido y formato válidos para NGINX.

10) Instalar Nginx, agregar 2 sitios, usar fragmentos para configurar los controles de acceso.

---
- hosts: all
  roles:
    - role: nginx
      nginx_http_params:
        - sendfile on
        - access_log /var/log/nginx/access.log
      nginx_snippets:
        accesslist_devel:
          - allow 192.168.0.0/24
          - deny all
      nginx_sites:
        foo:
           - listen 8080
           - server_name localhost
           - root /tmp/site1
           - include snippets/accesslist_devel.conf
           - location / { try_files $uri $uri/ /index.html; }
           - location /images/ { try_files $uri $uri/ /index.html; }
        bar:
           - listen 9090
           - server_name ansible
           - root /tmp/site2
           - location / { try_files $uri $uri/ /index.html; }
           - location /images/ { try_files $uri $uri/ /index.html; }

Dependencias

Ninguna

Licencia

BSD

Información del Autor

  • Original: Benno Joy
  • Modificado por: DAUPHANT Julien
  • Reescrito por: Stan Bogatkin
Acerca del proyecto

Ansible role to install Nginx.

Instalar
ansible-galaxy install sorrowless.nginx
Licencia
bsd-2-clause
Descargas
9.2k
Propietario
Barocco-style deployment engineer