gortc.nginx

Rol de Ansible: Nginx

Estado de la Construcción

Instala Nginx en servidores RedHat/CentOS, Debian/Ubuntu, Archlinux, FreeBSD u OpenBSD.

Este rol instala y configura la última versión 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 una configuración 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 que usarás para tu sitio web.

Requisitos

Ninguno.

Variables del Rol

Las variables disponibles se enumeran a continuación, junto con sus valores predeterminados (consulta defaults/main.yml):

nginx_vhosts: []

Una lista de definiciones de vhosts (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 ver las opciones del servidor disponibles. Si tienes un gran número de personalizaciones necesarias para tus definiciones de servidor, es probable que sea mejor gestionar el archivo de configuración del vhost tú mismo, dejando esta variable establecida en [].

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 de nginx_vhosts completamente poblada, usando un | para declarar un bloque de sintaxis para los extra_parameters.

Por favor, 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 demás 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 esté indentado correctamente.

  - 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 mostrado arriba.

Nota: El filename se establece de forma predeterminada al primer dominio en server_name. Si tienes dos vhosts con el mismo dominio, por ejemplo, una redirección, debes 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' 'default' suministrada por Nginx. Útil si deseas que la URL base / se dirija 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 de upstream usando esta variable. Además de definir al menos un upstream, necesitarías configurar uno de tus bloques de servidor para que proxy las 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 Nginx se ejecutará. 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 no es correcto, encuentra este número con grep processor /proc/cpuinfo | wc -l). nginx_worker_connections es el número de conexiones por proceso. Aumenta este valor para manejar más conexiones simultáneas (y recuerda que una conexión se usará mientras dure el tiempo de espera de keepalive para cada cliente). Puedes establecer nginx_multi_accept a on si deseas 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 errores y accesos predeterminados. Establecer 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 artículo de 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 (10s+) si tienes un tráfico mayormente de tipo polling (especialmente sitios impulsados por AJAX), o más bajo (<10s) si tienes un sitio donde la mayoría de los usuarios visitan pocas páginas y no envían más solicitudes.

nginx_server_tokens: "on"

Configuraciones de nginx server_tokens. 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 cargas se pasan a través de Nginx antes de llegar a un backend como php-fpm. Si obtienes un error como client intended to send too large body, significa que este valor está establecido demasiado bajo.

nginx_server_names_hash_bucket_size: "64"

Si tienes muchos nombres de servidor, o nombres de servidor muy largos, es posible que obtengas un error de Nginx al iniciar que requiere que este valor se aumente.

nginx_proxy_cache_path: ""

Configurado como la directiva proxy_cache_path en el archivo nginx.conf. Por defecto, no se configurará (si se deja como una cadena vacía), pero si deseas usar Nginx como un proxy inverso, puedes establecer esto en un valor válido (por ejemplo, "/var/cache/nginx keys_zone=cache:32m") para usar la caché de Nginx (configuraciones adicionales de proxy se pueden realizar en configuraciones de servidor individuales).

nginx_extra_http_options: ""

Líneas adicionales que se insertarán en el bloque http de nivel superior en nginx.conf. El valor debe definirse literalmente (como lo insertarías directamente en nginx.conf, cumpliendo con la sintaxis de configuración de Nginx - como ; para finalizar 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 más detalles sobre la colocación.

nginx_extra_conf_options: ""

Líneas adicionales que se insertarán en la parte superior de nginx.conf. El valor debe definirse literalmente (como lo insertarías directamente en nginx.conf, cumpliendo con la sintaxis de configuración de Nginx - como ; para finalizar la línea, etc.), por ejemplo:

nginx_extra_conf_options: |
  worker_rlimit_nofile 8192;

Consulta la plantilla en templates/nginx.conf.j2 para más detalles sobre la colocació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: ""

(Para Debian/Ubuntu solamente) 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 deseas 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 mientras instala Nginx.

nginx_ppa_use: false
nginx_ppa_version: stable

(Para Ubuntu solamente) 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

(Para RedHat/CentOS solamente) Establece esto en false para desactivar la instalación del repositorio yum de nginx. Esto podría ser necesario si deseas los paquetes estables predeterminados del OS, o si usas Satellite.

Sobrescribir plantillas de configuración

Si no puedes personalizar mediante variables porque una opción no está expuesta, puedes sobrescribir la plantilla utilizada para generar los archivos de configuración de los hosts virtuales 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 en función de 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 apuntar a un archivo de plantilla en tu directorio de playbook.

nginx_conf_template: "{{ playbook_dir }}/templates/nginx.conf.j2"

Crea la plantilla hija en la ruta que configuraste anteriormente 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 gortc.nginx
Licencia
mit
Descargas
101
Propietario
Archived, please use @pion (was WebRTC stack in go)