repleo.nginx

Rôle Ansible - Serveur Nginx

Statut de la construction Ansible Galaxy

Ce rôle installe et configure le serveur web Nginx. L'utilisateur peut spécifier tous les paramètres de configuration http qu'il souhaite appliquer à son site. Un nombre quelconque de sites peut être ajouté avec les configurations de votre choix.

Ce rôle prend en charge SSL letsencrypt pour une installation facile de serveurs web https.

Exigences

Ce rôle nécessite Ansible 1.4 ou supérieur et les exigences de plateforme sont listées dans le fichier de métadonnées.

Variables de rôle

Les variables pouvant être transmises à ce rôle et une brève description d'elles sont les suivantes.

# Forcer la création de nginx.conf. Normalement, nginx.conf n'est écrit que s'il n'existe pas.
# Si ce paramètre est vrai, il écrasera le nginx.conf actuel.
create_nginx_conf: true

# Le nombre maximum de clients autorisés
nginx_max_clients: 512                                

# Un ensemble des paramètres http. Notez que tout
# paramètre http valide de nginx peut être ajouté ici.
# (voir la documentation nginx pour plus de détails.)
nginx_http_params:                                    
  sendfile: "on"                                      
  tcp_nopush: "on"
  tcp_nodelay: "on"
  keepalive_timeout: "65"
  access_log: "/var/log/nginx/access.log"
  error_log: "/var/log/nginx/error.log"

# Une liste d'ensembles qui définissent les serveurs pour nginx,
# tout comme les paramètres http. Tout paramètre de serveur valide
# peut être défini ici.
nginx_sites:
- file_name: foo
  listen: 8080
  server_name: localhost
  root: "/tmp/site1"
  ssl:
    supplier: "local"
    local_keystore_dir: "{{ playbook_dir }}/files/"
    key: "ssl.key"
    certificate: "ssl_chain.pem"
  locations:
    - name: /
      lines:
        - "try_files: $uri $uri/ /index.html"
    - name: /images/
      lines:
        - "try_files: $uri $uri/ /index.html"
  lines:
    - "return 301 https://$http_host$request_uri;"
- file_name: bar
  listen: 9090
  server_name: ansible
  root: "/tmp/site2"
  locations:
    - name: /
      lines:
        - "try_files: $uri $uri/ /index.html"
    - name: /images/
      lines:
        - "try_files: $uri $uri/ /index.html"

Exemples

  1. Installer nginx avec des directives HTTP de choix, mais sans sites configurés :

    • hosts: all roles:
      • {role: nginx, create_nginx_conf: true, nginx_http_params: { sendfile: "on", access_log: "/var/log/nginx/access.log"}, nginx_sites: [] }
  2. Installer nginx avec des directives HTTP différentes de l'exemple précédent, mais sans sites configurés.

    • hosts: all roles:
      • {role: nginx, create_nginx_conf: true, nginx_http_params: { tcp_nodelay: "on", error_log: "/var/log/nginx/error.log"}, nginx_sites: [] }

Remarque : Veuillez vous assurer que les directives HTTP passées sont valides, car ce rôle ne vérifiera pas la validité des directives. Voir la documentation nginx pour plus de détails.

  1. Installer nginx et ajouter un site à la configuration.

    • hosts: all

      roles:

      • { role: nginx, create_nginx_conf: true, nginx_http_params: { tcp_nodelay: "on", error_log: "/var/log/nginx/error.log"}, nginx_sites: [ - file_name: bar, server_name: localhost, listen: 8080, locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] ] }

Remarque : Chaque site ajouté est représenté par une liste d'ensembles, et les configurations sont peuplées dans /etc/nginx/sites-available/ avec des symlinks correspondants dans /etc/nginx/sites-enabled/.

Le nom de fichier pour la configuration d'un site spécifique est spécifié dans l'ensemble avec la clé "file_name", tout directive de serveur valide peut être ajoutée à l'ensemble.

  1. Installer Nginx et ajouter 2 sites (méthode différente)

    • hosts: all

      roles:

      • { role: nginx, create_nginx_conf: true, nginx_http_params: { tcp_nodelay: "on", error_log: "/var/log/nginx/error.log"}, nginx_sites: [ - file_name: bar, server_name: localhost, listen: 8080, locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] } - file_name: bar, server_name: ansible, listen: 9090, root: "/tmp/site2", locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] }
  2. Ajouter des hôtes virtuels à une installation Nginx existante (et installer éventuellement Nginx si ce n'est pas déjà fait)

    • hosts: all

      roles:

      • { role: nginx, nginx_sites: [ - file_name: bar, server_name: localhost, listen: 8080, locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] } - file_name: bar, server_name: ansible, listen: 9090, root: "/tmp/site2", locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] ] }

Remarque : sans le paramètre create_nginx_conf: true, le rôle ne remplacera pas nginx.conf. Cette option permet d'installer des hôtes virtuels sur une installation nginx existante basée sur ce rôle, c'est-à-dire des scripts d'installation pour différents services utilisant ce rôle.

  1. Exemple d'un serveur HTTPS incluant l'installation des clés

    • hosts: all

      roles:

      • { role: nginx, nginx_sites: [ - file_name: bar, server_name: localhost, listen: 8080, ssl: { supplier: "local" local_keystore_dir: "{{ playbook_dir }}/files/", key: localhost.key, certificate: localhost_chain.pem }, locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] ] }

Remarque : la clé et le certificat ssl doivent être disponibles dans le projet appelant dans le répertoire files.

  1. Exemple d'un serveur HTTPS incluant l'installation des clés letsencrypt

    • hosts: all

      roles:

      • { role: nginx, nginx_separate_logs_per_site: true, nginx_sites: [ - file_name: bar.ssl, server_name: "example.com www.example.com", listen: 443, ssl: { supplier: "letsencrypt", domains: [ "example.com", "www.example.com" ], generate_redirect: true }, locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] ] }

Handlers

Le rôle NGINX propose deux gestionnaires :

  • recharger nginx
  • redémarrer nginx

Recharger la configuration nginx vous permet de mettre à jour votre serveur web sans temps d'arrêt. Cependant, il se peut que d'anciens processus ne soient pas mis à jour. Redémarrer garantira que le serveur web est arrêté puis redémarré à nouveau, ce qui entraînera un (court) temps d'arrêt.

Exemple :

- name: fichier de configuration de modèle
  template: src=template.j2 dest=/etc/foo.conf
  notify:
     - redémarrer nginx

Dépendances

Aucune

Licence

BSD

Informations sur l'auteur

Repleo, Amstelveen, Hollande -- www.repleo.nl
Jeroen Arnoldus (jeroen@repleo.nl)

Version originale par :

Benno Joy

À propos du projet

Ansible role for installing nginx, including support for SSL, letsencrypt and virtual host deployments

Installer
ansible-galaxy install repleo.nginx
Licence
bsd-2-clause
Téléchargements
1.5k
Propriétaire
Continuous delivery and software development experts