Shir0kamii.ansible_role_nginx
Rol de Ansible: Nginx
Nota: Por favor, considera usar el rol oficial de NGINX Ansible de NGINX, Inc.
Instala Nginx en servidores RedHat/CentOS, Debian/Ubuntu, Archlinux, FreeBSD o OpenBSD.
Este rol instala y configura la versión más reciente de Nginx desde el repositorio yum de Nginx (en sistemas basados en RedHat), apt (en sistemas basados en Debian), pacman (Archlinux), pkgng (en sistemas FreeBSD) o pkg_add (en sistemas OpenBSD). Probablemente necesitarás hacer trabajo adicional después de que este rol haya instalado Nginx, como agregar tu propio archivo [virtualhost].conf dentro de /etc/nginx/conf.d/
, describiendo la ubicación y las opciones a usar para tu sitio web particular.
Requisitos
Ninguno.
Variables del Rol
Las variables disponibles se enumeran a continuación, junto con sus valores predeterminados (ver defaults/main.yml
):
nginx_vhosts: []
Una lista de definiciones de vhost (bloques de servidor) para los hosts virtuales de Nginx. Cada entrada creará un archivo de configuración separado nombrado por server_name
. Si se deja vacío, necesitarás proporcionar tu propia configuración de host virtual. Consulta el ejemplo comentado en defaults/main.yml
para las opciones de servidor disponibles. Si tienes una gran cantidad de personalizaciones requeridas para tus definiciones de servidor, probablemente sea mejor gestionar el archivo de configuración del vhost tú mismo, dejando esta variable configurada como []
.
nginx_vhosts:
- listen: "443 ssl http2"
server_name: "example.com"
server_name_redirect: "www.example.com"
root: "/var/www/example.com"
index: "index.php index.html index.htm"
error_page: ""
access_log: ""
error_log: ""
state: "present"
template: "{{ nginx_vhost_template }}"
filename: "example.com.conf"
extra_parameters: |
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
Un ejemplo de una entrada completamente poblada de nginx_vhosts, usando un |
para declarar un bloque de sintaxis para los extra_parameters
.
Ten en cuenta la indentación en el bloque anterior. La primera línea debe tener una indentación normal de 2 espacios. Todas las otras líneas deben estar indentadas normalmente en relación a esa línea. En el archivo generado, todo el bloque tendrá una indentación de 4 espacios. Este estilo asegurará que el archivo de configuración tenga la indentación adecuada.
- listen: "80"
server_name: "example.com www.example.com"
return: "301 https://example.com$request_uri"
filename: "example.com.80.conf"
Un ejemplo de un vhost secundario que redirigirá al que se muestra arriba.
Nota: El filename
se establece de forma predeterminada en el primer dominio en server_name
, si tienes dos vhosts con el mismo dominio, por ejemplo, una redirección, necesitas establecer manualmente el filename
para que el segundo no sobrescriba el primero.
nginx_remove_default_vhost: false
Si se debe eliminar la configuración del 'vhost' predeterminado proporcionada por Nginx. Útil si deseas que la URL base /
apunte a uno de tus propios hosts virtuales configurados en un archivo .conf separado.
nginx_upstreams: []
Si estás configurando Nginx como un balanceador de carga, puedes definir uno o más conjuntos upstream utilizando esta variable. Además de definir al menos un upstream, necesitarás configurar uno de tus bloques de servidor para proxyear solicitudes a través del upstream definido (por ejemplo, proxy_pass http://myapp1;
). Consulta el ejemplo comentado en defaults/main.yml
para más información.
nginx_user: "nginx"
El usuario bajo el cual se ejecutará Nginx. Por defecto es nginx
para RedHat, www-data
para Debian y www
en FreeBSD y OpenBSD.
nginx_worker_processes: "{{ ansible_processor_vcpus|default(ansible_processor_count) }}"
nginx_worker_connections: "1024"
nginx_multi_accept: "off"
nginx_worker_processes
debe establecerse en el número de núcleos presentes en tu máquina (si el valor predeterminado es incorrecto, encuentra este número con grep processor /proc/cpuinfo | wc -l
). nginx_worker_connections
es el número de conexiones por proceso. Establece esto más alto para manejar más conexiones simultáneas (y recuerda que una conexión se utilizará durante el tiempo de espera de keepalive para cada cliente). Puedes establecer nginx_multi_accept
en on
si quieres que Nginx acepte todas las conexiones de inmediato.
nginx_error_log: "/var/log/nginx/error.log warn"
nginx_access_log: "/var/log/nginx/access.log main buffer=16k"
Configuración de los registros de error y acceso predeterminados. Establece en off
para desactivar un registro por completo.
nginx_sendfile: "on"
nginx_tcp_nopush: "on"
nginx_tcp_nodelay: "on"
Opciones de conexión TCP. Consulta este blog para más información sobre estas directivas.
nginx_keepalive_timeout: "65"
nginx_keepalive_requests: "100"
Configuraciones de keepalive de Nginx. El tiempo de espera debe establecerse más alto (más de 10s) si tienes más tráfico de tipo polling (especialmente sitios con AJAX), o más bajo (menos de 10s) si tienes un sitio donde la mayoría de los usuarios visitan algunas páginas y no envían más solicitudes.
nginx_server_tokens: "on"
Configuraciones de los tokens del servidor de Nginx. Controla si Nginx responde con su versión en los encabezados HTTP. Establecer en "off"
para deshabilitar.
nginx_client_max_body_size: "64m"
Este valor determina el tamaño máximo de archivo que se puede subir, ya que las subidas pasan a través de Nginx antes de llegar a un backend como php-fpm
. Si recibes un error como client intended to send too large body
, significa que este valor está configurado demasiado bajo.
nginx_server_names_hash_bucket_size: "64"
Si tienes muchos nombres de servidor, o si tienes nombres de servidor muy largos, podrías obtener un error de Nginx al iniciar, requiriendo que este valor se aumente.
nginx_proxy_cache_path: ""
Establecido como la directiva proxy_cache_path
en el archivo nginx.conf
. Por defecto, esto no se configurará (si se deja como una cadena vacía), pero si deseas usar Nginx como un proxy inverso, puedes configurarlo a un valor válido (por ejemplo, "/var/cache/nginx keys_zone=cache:32m"
) para usar la caché de Nginx (más configuraciones de proxy se pueden hacer en configuraciones de servidor individuales).
nginx_extra_http_options: ""
Líneas adicionales para insertar en el bloque http
de nivel superior en nginx.conf
. El valor debe definirse literalmente (como lo insertarías directamente en el nginx.conf
, siguiendo la sintaxis de configuración de Nginx - como ;
para terminar la línea, etc.), por ejemplo:
nginx_extra_http_options: |
proxy_buffering off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
Consulta la plantilla en templates/nginx.conf.j2
para obtener más detalles sobre la ubicación.
nginx_extra_conf_options: ""
Líneas adicionales para insertar en la parte superior de nginx.conf
. El valor debe definirse literalmente (como lo insertarías directamente en el nginx.conf
, siguiendo la sintaxis de configuración de Nginx - como ;
para terminar la línea, etc.), por ejemplo:
nginx_extra_conf_options: |
worker_rlimit_nofile 8192;
Consulta la plantilla en templates/nginx.conf.j2
para obtener más detalles sobre la ubicación.
nginx_log_format: |
'$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
Configura el log_format
de Nginx.
nginx_default_release: ""
(Solo para Debian/Ubuntu) Te permite establecer un repositorio diferente para la instalación de Nginx. Por ejemplo, si estás ejecutando la versión wheezy de Debian y quieres obtener una versión más nueva de Nginx, puedes instalar el repositorio wheezy-backports
y establecer ese valor aquí, y Ansible lo usará como la opción -t
al instalar Nginx.
nginx_ppa_use: false
nginx_ppa_version: stable
(Solo para Ubuntu) Te permite usar el PPA oficial de Nginx en lugar del paquete del sistema. Puedes establecer la versión en stable
o development
.
nginx_yum_repo_enabled: true
(Solo para RedHat/CentOS) Establece esto en false
para desactivar la instalación del repositorio yum de nginx
. Esto podría ser necesario si quieres los paquetes estables predeterminados del SO, o si usas Satellite.
Sobrescribiendo plantillas de configuración
Si no puedes personalizar a través de variables porque una opción no está expuesta, puedes sobrescribir la plantilla utilizada para generar los archivos de configuración de vhost o el archivo nginx.conf
.
nginx_conf_template: "nginx.conf.j2"
nginx_vhost_template: "vhost.j2"
Si es necesario, también puedes establecer la plantilla según cada vhost.
nginx_vhosts:
- listen: "80 default_server"
server_name: "site1.example.com"
root: "/var/www/site1.example.com"
index: "index.php index.html index.htm"
template: "{{ playbook_dir }}/templates/site1.example.com.vhost.j2"
- server_name: "site2.example.com"
root: "/var/www/site2.example.com"
index: "index.php index.html index.htm"
template: "{{ playbook_dir }}/templates/site2.example.com.vhost.j2"
Puedes copiar y modificar la plantilla proporcionada, o extenderla con herencia de plantillas Jinja2 y sobrescribir el bloque de plantilla específico que necesites cambiar.
Ejemplo: Configurar gzip en la configuración de nginx
Establece el nginx_conf_template
para que apunte a un archivo de plantilla en el directorio de tu playbook.
nginx_conf_template: "{{ playbook_dir }}/templates/nginx.conf.j2"
Crea la plantilla hijo en la ruta que configuraste arriba y extiende el archivo de plantilla de geerlingguy.nginx
relativo a tu playbook.yml
.
{% extends 'roles/geerlingguy.nginx/templates/nginx.conf.j2' %}
{% block http_gzip %}
gzip on;
gzip_proxied any;
gzip_static on;
gzip_http_version 1.0;
gzip_disable "MSIE [1-6]\.";
gzip_vary on;
gzip_comp_level 6;
gzip_types
text/plain
text/css
text/xml
text/javascript
application/javascript
application/x-javascript
application/json
application/xml
application/xml+rss
application/xhtml+xml
application/x-font-ttf
application/x-font-opentype
image/svg+xml
image/x-icon;
gzip_buffers 16 8k;
gzip_min_length 512;
{% endblock %}
Dependencias
Ninguna.
Ejemplo de Playbook
- hosts: server
roles:
- { role: geerlingguy.nginx }
Licencia
MIT / BSD
Información del Autor
Este rol fue creado en 2014 por Jeff Geerling, autor de Ansible for DevOps.
Nginx installation for Linux, FreeBSD and OpenBSD.
ansible-galaxy install Shir0kamii.ansible_role_nginx