Shir0kamii.ansible_role_nginx

Rol de Ansible: Nginx

Estado de Construcción

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.

Acerca del proyecto

Nginx installation for Linux, FreeBSD and OpenBSD.

Instalar
ansible-galaxy install Shir0kamii.ansible_role_nginx
Licencia
mit
Descargas
76
Propietario