sorrowless.nginx
sbog/nginx
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
ansible-galaxy install sorrowless.nginx