geerlingguy.nginx

Rôle Ansible : Nginx

CI

Remarque : Pensez à utiliser le rôle Ansible officiel NGINX de NGINX, Inc.

Installe Nginx sur des serveurs RedHat/CentOS, Debian/Ubuntu, Archlinux, FreeBSD ou OpenBSD.

Ce rôle installe et configure la dernière version de Nginx à partir du dépôt yum de Nginx (sur les systèmes basés sur RedHat), apt (sur les systèmes basés sur Debian), pacman (Archlinux), pkgng (sur FreeBSD) ou pkg_add (sur OpenBSD). Vous aurez probablement besoin de faire des travaux de configuration supplémentaires après l’installation de Nginx, comme ajouter votre propre fichier [virtualhost].conf dans /etc/nginx/conf.d/, décrivant l’emplacement et les options à utiliser pour votre site.

Exigences

Aucune.

Variables de Rôle

Les variables disponibles sont listées ci-dessous, avec leurs valeurs par défaut (voir defaults/main.yml):

nginx_listen_ipv6: true

Détermine si le serveur doit écouter sur IPv6 (appliqué à tous les hôtes virtuels gérés par ce rôle).

nginx_vhosts: []

Une liste de définitions d'hôtes virtuels (blocs de serveur) pour les hôtes virtuels Nginx. Chaque entrée créera un fichier de configuration séparé nommé d'après server_name. Si laissé vide, vous devrez fournir votre propre configuration d'hôte virtuel. Voir l'exemple commenté dans defaults/main.yml pour les options de serveur disponibles. Si vous avez un grand nombre de personnalisations pour vos définitions de serveur, il est probablement mieux de gérer vous-même le fichier de configuration d'hôte virtuel, en laissant cette variable réglée sur [].

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 exemple d'une entrée nginx_vhosts entièrement remplie, utilisant un | pour déclarer un bloc de syntaxe pour les extra_parameters.

Veuillez prêter attention à l'indentation dans le bloc ci-dessus. La première ligne doit avoir une indentation normale de 2 espaces. Toutes les autres lignes doivent être indentées normalement par rapport à cette ligne. Dans le fichier généré, tout le bloc sera indenté de 4 espaces. Ce style garantira que le fichier de configuration est correctement indenté.

  - listen: "80"
    server_name: "example.com www.example.com"
    return: "301 https://example.com$request_uri"
    filename: "example.com.80.conf"

Un exemple d'un second hôte virtuel qui redirigera vers celui montré ci-dessus.

Remarque : Le filename par défaut est le premier domaine dans server_name. Si vous avez deux hôtes virtuels avec le même domaine, par exemple une redirection, vous devez définir manuellement le filename pour que le second ne remplace pas le premier.

nginx_remove_default_vhost: false

Détermine si le fichier de configuration d'hôte virtuel 'default' fourni par Nginx doit être supprimé. Utile si vous souhaitez que l'URL de base / soit dirigée vers l'un de vos propres hôtes virtuels configurés dans un fichier .conf séparé.

nginx_upstreams: []

Si vous configurez Nginx en tant qu'équilibreur de charge, vous pouvez définir un ou plusieurs ensembles de serveurs en amont à l'aide de cette variable. En plus de définir au moins un serveur en amont, vous devrez configurer l'un de vos blocs de serveur pour faire passer les requêtes via l'amont défini (par exemple proxy_pass http://myapp1;). Voir l'exemple commenté dans defaults/main.yml pour plus d'informations.

nginx_user: "nginx"

L'utilisateur sous lequel Nginx fonctionnera. Par défaut, c'est nginx pour RedHat, www-data pour Debian et www sur FreeBSD et OpenBSD.

nginx_worker_processes: "{{ ansible_processor_vcpus|default(ansible_processor_count) }}"
nginx_worker_connections: "1024"
nginx_multi_accept: "off"

nginx_worker_processes doit être réglé sur le nombre de cœurs présents sur votre machine (si la valeur par défaut est incorrecte, trouvez ce nombre avec grep processor /proc/cpuinfo | wc -l). nginx_worker_connections est le nombre de connexions par processus. Augmentez cette valeur pour gérer plus de connexions simultanées (et rappelez-vous qu'une connexion sera utilisée aussi longtemps que la durée du timeout keepalive pour chaque client !). Vous pouvez régler nginx_multi_accept sur on si vous voulez que Nginx accepte toutes les connexions immédiatement.

nginx_error_log: "/var/log/nginx/error.log warn"
nginx_access_log: "/var/log/nginx/access.log main buffer=16k flush=2m"

Configuration des fichiers journaux d'erreur et d'accès par défaut. Réglez sur off pour désactiver complètement un journal.

nginx_sendfile: "on"
nginx_tcp_nopush: "on"
nginx_tcp_nodelay: "on"

Options de connexion TCP. Voir cet article de blog pour plus d'informations sur ces directives.

nginx_keepalive_timeout: "65"
nginx_keepalive_requests: "100"

Paramètres de keepalive de Nginx. Le timeout doit être réglé plus haut (10s+) si vous avez beaucoup de trafic de type polling (les sites basés sur AJAX en particulier), ou plus bas (<10s) si vous avez un site où la plupart des utilisateurs visitent quelques pages et n'envoient pas d'autres requêtes.

nginx_server_tokens: "on"

Paramètres server_tokens de Nginx. Contrôle si Nginx répond avec sa version dans les en-têtes HTTP. Réglez sur "off" pour désactiver.

nginx_client_max_body_size: "64m"

Cette valeur détermine la plus grande taille de fichier téléchargeable, car les téléchargements passent par Nginx avant d'atteindre un backend comme php-fpm. Si vous obtenez une erreur comme client intended to send too large body, cela signifie que cette valeur est trop basse.

nginx_server_names_hash_bucket_size: "64"

Si vous avez de nombreux noms de serveur, ou si vous avez des noms de serveur très longs, vous pourriez avoir une erreur de démarrage Nginx nécessitant d'augmenter cette valeur.

nginx_proxy_cache_path: ""

Définie comme directive proxy_cache_path dans le fichier nginx.conf. Par défaut, cela ne sera pas configuré (si laissé comme une chaîne vide), mais si vous souhaitez utiliser Nginx comme proxy inverse, vous pouvez définir cela à une valeur valide (par exemple "/var/cache/nginx keys_zone=cache:32m") pour utiliser le cache de Nginx (plus de configuration de proxy peut être effectuée dans des configurations de serveur individuelles).

nginx_extra_http_options: ""

Lignes supplémentaires à insérer dans le bloc http de niveau supérieur dans nginx.conf. La valeur doit être définie littéralement (comme vous l’inséreriez directement dans le nginx.conf, en respectant la syntaxe de configuration Nginx - par exemple ; pour terminer une ligne, etc.), par exemple :

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;

Voir le modèle dans templates/nginx.conf.j2 pour plus de détails sur le placement.

nginx_extra_conf_options: ""

Lignes supplémentaires à insérer en haut de nginx.conf. La valeur doit également être définie littéralement, par exemple :

nginx_extra_conf_options: |
  worker_rlimit_nofile 8192;

Voir le modèle dans templates/nginx.conf.j2 pour plus de détails sur le placement.

nginx_log_format: |-
  '$remote_addr - $remote_user [$time_local] "$request" '
  '$status $body_bytes_sent "$http_referer" '
  '"$http_user_agent" "$http_x_forwarded_for"'

Configure le log_format de Nginx.

nginx_default_release: ""

(Pour Debian/Ubuntu uniquement) Vous permet de définir un dépôt différent pour l'installation de Nginx. Par exemple, si vous utilisez la version wheezy de Debian et souhaitez obtenir une version plus récente de Nginx, vous pouvez installer le dépôt wheezy-backports et définir cette valeur ici. Ansible l'utilisera comme option -t lors de l'installation de Nginx.

nginx_ppa_use: false
nginx_ppa_version: stable

(Pour Ubuntu uniquement) Vous permet d'utiliser le PPA officiel de Nginx au lieu du package du système. Vous pouvez définir la version sur stable ou development.

nginx_yum_repo_enabled: true

(Pour RedHat/CentOS uniquement) Réglez ceci sur false pour désactiver l'installation du dépôt yum nginx. Cela pourrait être nécessaire si vous souhaitez les paquets stables par défaut de l'OS, ou si vous utilisez Satellite.

nginx_zypper_repo_enabled: true

(Pour Suse uniquement) Réglez ceci sur false pour désactiver l'installation du dépôt zypper nginx. Cela pourrait être nécessaire si vous souhaitez les paquets stables par défaut de l'OS, ou si vous utilisez Suse Manager.

nginx_service_state: started
nginx_service_enabled: yes

Par défaut, ce rôle s'assurera que Nginx est en cours d'exécution et activé au démarrage après la configuration de Nginx. Vous pouvez utiliser ces variables pour remplacer ce comportement si vous installez dans un conteneur ou que vous avez besoin de contrôler davantage l'état du service.

Remplacement des modèles de configuration

Si vous ne pouvez pas personnaliser via des variables parce qu'une option n'est pas exposée, vous pouvez remplacer le modèle utilisé pour générer les fichiers de configuration d'hôte virtuel ou le fichier nginx.conf.

nginx_conf_template: "nginx.conf.j2"
nginx_vhost_template: "vhost.j2"

Si nécessaire, vous pouvez également définir le modèle sur une base par hôte virtuel.

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"

Vous pouvez soit copier et modifier le modèle fourni, soit l’étendre avec l’héritage de modèle Jinja2 et remplacer le bloc spécifique du modèle que vous devez changer.

Exemple : Configurer gzip dans la configuration nginx

Définissez le nginx_conf_template pour pointer vers un fichier de modèle dans votre répertoire de playbook.

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

Créez le modèle enfant dans le chemin que vous avez configuré ci-dessus et étendez le fichier modèle geerlingguy.nginx par rapport à votre 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 %}

Dépendances

Aucune.

Exemple de Playbook

- hosts: server
  roles:
    - { role: geerlingguy.nginx }

Licence

MIT / BSD

Informations sur l'Auteur

Ce rôle a été créé en 2014 par Jeff Geerling, auteur de Ansible for DevOps.

À propos du projet

Nginx installation for Linux, FreeBSD and OpenBSD.

Installer
ansible-galaxy install geerlingguy.nginx
Licence
mit
Téléchargements
12.8M
Propriétaire
Father, author, developer, maker. Sometimes called "an inflammatory enigma". #stl #drupal #ansible #k8s #raspberrypi #crohns