repleo.nginx

Rol de Ansible - Servidor Nginx

Estado de Construcción Ansible Galaxy

Esta 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 añadir cualquier número de sitios con configuraciones a elección.

Esta rol soporta SSL de letsencrypt para una fácil instalación de servidores web https.

Requisitos

Esta rol requiere Ansible 1.4 o superior y los requisitos de plataforma están listados en el archivo de metadata.

Variables de Rol

Las variables que se pueden pasar a esta rol y una breve descripción de ellas son las siguientes.

# Fuerza la creación de nginx.conf. Normalmente, nginx.conf solo se escribe si no existe.
# Si este parámetro es verdadero, sobrescribirá el nginx.conf actual.
create_nginx_conf: true

# El número máximo de clientes permitidos.
nginx_max_clients: 512                                

# Un conjunto de parámetros HTTP. Nota que cualquier
# parámetro HTTP válido de nginx puede ser añadido aquí.
# (ver la documentación de nginx para más detalles.)
nginx_http_params:                                    
  sendfile: "on"                                      
  tcp_nopush: "on"
  tcp_nodelay: "on"
  keepalive_timeout: "65"
  access_log: "/var/log/nginx/access.log"
  error_log: "/var/log/nginx/error.log"

# Una lista de hashes que definen los servidores para nginx,
# al igual que los parámetros HTTP. Cualquier parámetro 
# de servidor válido puede definirse aquí.
nginx_sites:
- file_name: foo
  listen: 8080
  server_name: localhost
  root: "/tmp/site1"
  ssl:
    supplier: "local"
    local_keystore_dir: "{{ playbook_dir }}/files/"
    key: "ssl.key"
    certificate: "ssl_chain.pem"
  locations:
    - name: /
      lines:
        - "try_files: $uri $uri/ /index.html"
    - name: /images/
      lines:
        - "try_files: $uri $uri/ /index.html"
  lines:
    - "return 301 https://$http_host$request_uri;"
- file_name: bar
  listen: 9090
  server_name: ansible
  root: "/tmp/site2"
  locations:
    - name: /
      lines:
        - "try_files: $uri $uri/ /index.html"
    - name: /images/
      lines:
        - "try_files: $uri $uri/ /index.html"

Ejemplos

  1. Instalar nginx con directrices HTTP a elección, pero sin sitios configurados:

    • hosts: all roles:
      • {role: nginx, create_nginx_conf: true, nginx_http_params: { sendfile: "on", access_log: "/var/log/nginx/access.log"}, nginx_sites: [] }
  2. Instalar nginx con diferentes directrices HTTP que el ejemplo anterior, pero sin sitios configurados.

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

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

  1. Instalar nginx y añadir un sitio a la configuración.

    • hosts: all

      roles:

      • { role: nginx, create_nginx_conf: true, nginx_http_params: { tcp_nodelay: "on", error_log: "/var/log/nginx/error.log"}, nginx_sites: [ - file_name: bar, server_name: localhost, listen: 8080, locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] ] }

Nota: Cada sitio añadido se representa con una lista de hashes, y las configuraciones generadas se almacenan en /etc/nginx/sites-available/ y tienen enlaces simbólicos correspondientes desde /etc/nginx/sites-enabled/.

El nombre del archivo para la configuración del sitio específico se especifica en el hash con la clave "file_name", se pueden añadir directrices de servidor válidas al hash.

  1. Instalar Nginx y añadir 2 sitios (método diferente)

    • hosts: all

      roles:

      • { role: nginx, create_nginx_conf: true, nginx_http_params: { tcp_nodelay: "on", error_log: "/var/log/nginx/error.log"}, nginx_sites: [ - file_name: bar, server_name: localhost, listen: 8080, locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] } - file_name: bar, server_name: ansible, listen: 9090, root: "/tmp/site2", locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] }
  2. Añadir hosts virtuales a la instalación existente de Nginx (y opcionalmente instalar Nginx si aún no está instalado)

    • hosts: all

      roles:

      • { role: nginx, nginx_sites: [ - file_name: bar, server_name: localhost, listen: 8080, locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] } - file_name: bar, server_name: ansible, listen: 9090, root: "/tmp/site2", locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] ] }

Nota: Sin el parámetro create_nginx_conf: true, la rol no sobrescribirá nginx.conf. Esta opción permite instalar hosts virtuales en una instalación existente de nginx basada en esta rol, es decir, scripts de instalación para diferentes servicios que usan esta rol.

  1. Ejemplo de un servidor HTTPS incluyendo la instalación de claves.

    • hosts: all

      roles:

      • { role: nginx, nginx_sites: [ - file_name: bar, server_name: localhost, listen: 8080, ssl: { supplier: "local" local_keystore_dir: "{{ playbook_dir }}/files/", key: localhost.key, certificate: localhost_chain.pem }, locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] ] }

Nota: la clave y el certificado ssl deben estar disponibles en el proyecto que llama en el directorio files.

  1. Ejemplo de un servidor HTTPS incluyendo la instalación de claves letsencrypt.

    • hosts: all

      roles:

      • { role: nginx, nginx_separate_logs_per_site: true, nginx_sites: [ - file_name: bar.ssl, server_name: "example.com www.example.com", listen: 443, ssl: { supplier: "letsencrypt", domains: [ "example.com", "www.example.com" ], generate_redirect: true }, locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] ] }

Manejadores

La rol NGINX proporciona dos manejadores:

  • recargar nginx
  • reiniciar nginx

Recargar la configuración de nginx te permite actualizar tu servidor web sin tiempo de inactividad. Sin embargo, puede ocurrir que algunos procesos antiguos no se actualicen. Reiniciar asegurará que el servidor web se cierre y se reinicie, lo que causará un (corto) tiempo de inactividad.

Ejemplo:

- nombre: plantilla del archivo de configuración
  template: src=template.j2 dest=/etc/foo.conf
  notify:
     - reiniciar nginx

Dependencias

Ninguna

Licencia

BSD

Información del Autor

Repleo, Amstelveen, Holanda -- www.repleo.nl
Jeroen Arnoldus (jeroen@repleo.nl)

Versión original por:

Benno Joy

Acerca del proyecto

Ansible role for installing nginx, including support for SSL, letsencrypt and virtual host deployments

Instalar
ansible-galaxy install repleo.nginx
Licencia
bsd-2-clause
Descargas
1.5k
Propietario
Continuous delivery and software development experts