repleo.nginx
Rol de Ansible - Servidor Nginx
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
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: [] }
- hosts: all
roles:
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: [] }
- hosts: all
roles:
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.
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.
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" ] ] }
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.
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.
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
Ansible role for installing nginx, including support for SSL, letsencrypt and virtual host deployments
ansible-galaxy install repleo.nginx