sorrowless.nginx
sbog/nginx
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 illimité de sites peut être ajouté avec les configurations de votre choix.
Exigences
Ce rôle nécessite Ansible 2.4 ou supérieur et les exigences de la plateforme sont listées dans le fichier de métadonnées. (Certaines anciennes versions du rôle supportent Ansible 1.4) Pour FreeBSD, une installation fonctionnelle de pkgng est requise (voir : https://www.freebsd.org/doc/handbook/pkgng-intro.html ) L'installation de l'agent Nginx Amplify est seulement supportée sur les distributions CentOS, RedHat, Amazon, Debian et Ubuntu.
Installation
ansible-galaxy install sorrowless.nginx
Variables du rôle
Les variables qui peuvent être passées à ce rôle et une brève description à leur sujet sont les suivantes. (Pour toutes les variables, consultez defaults/main.yml)
# L'utilisateur pour exécuter nginx
nginx_user: "www-data"
# Une liste de directives pour la section events.
nginx_events_params:
- worker_connections 512
- debug_connection 127.0.0.1
- use epoll
- multi_accept on
# Une liste de hachages qui définissent les serveurs pour nginx,
# avec les paramètres http. Tous les paramètres serveur valides
# peuvent être définis ici.
nginx_sites:
default:
- listen 80
- server_name _
- root "/usr/share/nginx/html"
- index index.html
foo:
- listen 8080
- server_name localhost
- root "/tmp/site1"
- location / { try_files $uri $uri/ /index.html; }
- location /images/ { try_files $uri $uri/ /index.html; }
bar:
- listen 9090
- server_name ansible
- root "/tmp/site2"
- location / { try_files $uri $uri/ /index.html; }
- location /images/ {
try_files $uri $uri/ /index.html;
allow 127.0.0.1;
deny all;
}
# Une liste de hachages qui définissent des configurations supplémentaires
nginx_configs:
proxy:
- proxy_set_header X-Real-IP $remote_addr
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
upstream:
- upstream foo { server 127.0.0.1:8080 weight=10; }
geo:
- geo $local {
default 0;
127.0.0.1 1;
}
gzip:
- gzip on
- gzip_disable msie6
# Une liste de hachages qui définissent des snippets de configuration
nginx_snippets:
error_pages:
- error_page 500 /http_errors/500.html
- error_page 502 /http_errors/502.html
- error_page 503 /http_errors/503.html
- error_page 504 /http_errors/504.html
# Une liste de hachages qui définissent des fichiers utilisateur/mot de passe
nginx_auth_basic_files:
demo:
- foo:$apr1$mEJqnFmy$zioG2q1iDWvRxbHuNepIh0 # foo:demo , généré par : htpasswd -nb foo demo
- bar:$apr1$H2GihkSo$PwBeV8cVWFFQlnAJtvVCQ. # bar:demo , généré par : htpasswd -nb bar demo
# Activer Real IP pour les requêtes CloudFlare
nginx_set_real_ip_from_cloudflare: True
# Activer Nginx Amplify
nginx_amplify: true
nginx_amplify_api_key: "votre_clé_api_ici"
nginx_amplify_update_agent: true
# Définir les modules à activer dans la configuration
#
# Nginx installé via des dépôts EPEL et APT installera également certains modules automatiquement.
# Pour l'utilisation du dépôt officiel Nginx, vous devrez installer les paquets de modules manuellement.
#
# Lors de l'utilisation avec les dépôts EPEL et APT, spécifiez cette section comme une liste de noms de fichiers de configuration,
# sans l'extension .conf.
# Lors de l'utilisation du dépôt officiel Nginx, spécifiez cette section comme une liste de noms de fichiers de modules,
# sans l'extension .so.
#
# Fichiers de configuration de module disponibles dans les dépôts EPEL et APT:
# (APT a en fait plusieurs de plus, voir https://wiki.debian.org/Nginx/)
# - mod-http-geoip
# - mod-http-image-filter
# - mod-http-perl
# - mod-http-xslt-filter
# - mod-mail
# - mod-stream
#
# Noms de fichiers de module disponibles dans le dépôt officiel NGINX:
# - ngx_http_geoip_module
# - ngx_http_image_filter_module
# - ngx_http_perl_module
# - ngx_http_xslt_filter_module
# - ngx_http_js_module
#
# Les modules compilés sur mesure sont également acceptés si le fichier .so existe dans le même emplacement qu'un module empaqueté:
# - ngx_http_modsecurity_module
#
nginx_module_configs:
- mod-http-geoip
Exemples
1) Installer nginx avec les directives HTTP de votre choix, mais sans sites configurés et sans configuration supplémentaire :
- hosts: all
roles:
- {role: nginx,
nginx_http_params: ["sendfile on", "access_log /var/log/nginx/access.log"]
}
2) Installer nginx avec des directives HTTP différentes de l'exemple précédent, mais sans
sites configurés et sans configuration supplémentaire.
- hosts: all
roles:
- {role: nginx,
nginx_http_params: ["tcp_nodelay on", "error_log /var/log/nginx/error.log"]}
Remarque : Veuillez vous assurer que les directives HTTP passées sont valides, car ce rôle ne vérifiera pas la validité des directives. Consultez la documentation de nginx pour plus de détails.
3) Installer nginx et ajouter un site à la configuration.
- hosts: all
roles:
- role: nginx
nginx_http_params:
- sendfile "on"
- access_log "/var/log/nginx/access.log"
nginx_sites:
bar:
- listen 8080
- location / { try_files $uri $uri/ /index.html; }
- location /images/ { try_files $uri $uri/ /index.html; }
nginx_configs:
proxy:
- proxy_set_header X-Real-IP $remote_addr
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
4) Installer nginx et ajouter des variables supplémentaires à la configuration par défaut
- hosts: all
vars:
- my_extra_params:
- client_max_body_size 200M
# conserver les valeurs par défaut et ajouter un paramètre additionnel `client_max_body_size`
roles:
- role: sorrowless.nginx
nginx_http_params: "{{ nginx_http_default_params + my_extra_params }}"
Remarque : Chaque site ajouté est représenté par une liste de hachages, et les configurations générées sont peuplées dans /etc/nginx/site-available/ et liées depuis /etc/nginx/site-enable/ vers /etc/nginx/site-available.
Le nom de fichier pour la configuration du site spécifique est spécifié dans le hachage avec la clé "file_name", tous les directives serveur valides peuvent être ajoutées au hachage. Des configurations supplémentaires sont créées dans /etc/nginx/conf.d/
5) Installer Nginx, ajouter 2 sites (méthode différente) et ajouter une configuration supplémentaire
---
- hosts: all
roles:
- role: nginx
nginx_http_params:
- sendfile on
- access_log /var/log/nginx/access.log
nginx_sites:
foo:
- listen 8080
- server_name localhost
- root /tmp/site1
- location / { try_files $uri $uri/ /index.html; }
- location /images/ { try_files $uri $uri/ /index.html; }
bar:
- listen 9090
- server_name ansible
- root /tmp/site2
- location / { try_files $uri $uri/ /index.html; }
- location /images/ { try_files $uri $uri/ /index.html; }
nginx_configs:
proxy:
- proxy_set_header X-Real-IP $remote_addr
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
6) Installer Nginx, ajouter 2 sites, ajouter une configuration supplémentaire et un bloc de configuration upstream
---
- hosts: all
roles:
- role: nginx
nginx_error_log_level: info
nginx_http_params:
- sendfile on
- access_log /var/log/nginx/access.log
nginx_sites:
foo:
- listen 8080
- server_name localhost
- root /tmp/site1
- location / { try_files $uri $uri/ /index.html; }
- location /images/ { try_files $uri $uri/ /index.html; }
bar:
- listen 9090
- server_name ansible
- root /tmp/site2
- if ( $host = example.com ) { rewrite ^(.*)$ http://www.example.com$1 permanent; }
- location / {
try_files $uri $uri/ /index.html;
auth_basic "Restreint";
auth_basic_user_file auth_basic/demo;
}
- location /images/ { try_files $uri $uri/ /index.html; }
nginx_configs:
proxy:
- proxy_set_header X-Real-IP $remote_addr
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
upstream:
# Résultat:
# upstream foo_backend {
# server 127.0.0.1:8080 weight=10;
# }
- upstream foo_backend { server 127.0.0.1:8080 weight=10; }
nginx_auth_basic_files:
demo:
- foo:$apr1$mEJqnFmy$zioG2q1iDWvRxbHuNepIh0 # foo:demo , généré par : htpasswd -nb foo demo
- bar:$apr1$H2GihkSo$PwBeV8cVWFFQlnAJtvVCQ. # bar:demo , généré par : htpasswd -nb bar demo
7) Installer Nginx, ajouter un site et utiliser une syntaxe yaml spéciale pour rendre les blocs de location multiligne pour plus de clarté
---
- hosts: all
roles:
- role: nginx
nginx_http_params:
- sendfile on
- access_log /var/log/nginx/access.log
nginx_sites:
foo:
- listen 443 ssl
- server_name foo.example.com
- set $myhost foo.example.com
- |
location / {
proxy_set_header Host foo.example.com;
}
- |
location ~ /v2/users/.+?/organizations {
if ($request_method = PUT) {
set $myhost bar.example.com;
}
if ($request_method = DELETE) {
set $myhost bar.example.com;
}
proxy_set_header Host $myhost;
}
8) Exemple d'utilisation de ce rôle avec mon rôle ssl-certs pour générer ou copier un certificat ssl ( https://galaxy.ansible.com/sorrowless/ssl-certs )
- hosts: all
roles:
- jdauphant.ssl-certs
- role: sorrowless.nginx
nginx_configs:
ssl:
- ssl_certificate_key {{ssl_certs_privkey_path}}
- ssl_certificate {{ssl_certs_cert_path}}
nginx_sites:
default:
- listen 443 ssl
- server_name _
- root "/usr/share/nginx/html"
- index index.html
9) Configuration de site utilisant un modèle personnalisé.
Au lieu de définir un fichier de configuration de site en utilisant une liste d'attributs,
vous pouvez utiliser un hachage/dictionnaire qui inclut le nom de fichier d'un modèle alternatif.
Des valeurs supplémentaires sont accessibles dans le modèle via la variable item.value
.
- hosts: all
roles:
- role: nginx
nginx_sites:
custom_bar:
template: custom_bar.conf.j2
server_name: custom_bar.example.com
Modèle personnalisé: custom_bar.conf.j2:
# {{ ansible_managed }}
upstream backend {
server 10.0.0.101;
}
server {
server_name {{ item.value.server_name }};
location / {
proxy_pass http://backend;
}
}
Utiliser un modèle personnalisé permet une flexibilité illimitée dans la configuration du fichier de configuration du site. Cet exemple démontre la pratique courante de configurer un bloc serveur de site dans le même fichier que son bloc upstream complémentaire. Si vous utilisez cette option :
- Le hachage doit inclure une valeur
template:
, sinon la tâche de configuration échouera. - Ce rôle ne peut pas vérifier la validité de votre modèle personnalisé. Si vous utilisez cette méthode, le formatage de fichier conf fourni par ce rôle n’est pas disponible, et il vous appartient de fournir un modèle avec un contenu et un format valides pour NGINX.
10) Installer Nginx, ajouter 2 sites, utiliser des snippets pour configurer les contrôles d'accès
---
- hosts: all
roles:
- role: nginx
nginx_http_params:
- sendfile on
- access_log /var/log/nginx/access.log
nginx_snippets:
accesslist_devel:
- allow 192.168.0.0/24
- deny all
nginx_sites:
foo:
- listen 8080
- server_name localhost
- root /tmp/site1
- include snippets/accesslist_devel.conf
- location / { try_files $uri $uri/ /index.html; }
- location /images/ { try_files $uri $uri/ /index.html; }
bar:
- listen 9090
- server_name ansible
- root /tmp/site2
- location / { try_files $uri $uri/ /index.html; }
- location /images/ { try_files $uri $uri/ /index.html; }
Dépendances
Aucune
Licence
BSD
Informations sur l'auteur
- Original : Benno Joy
- Modifié par : DAUPHANT Julien
- Retravaillé par : Stan Bogatkin
ansible-galaxy install sorrowless.nginx