gortc.nginx
Rôle Ansible : Nginx
Installe Nginx sur les 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 Nginx (sur les systèmes basés sur RedHat), apt (sur les systèmes basés sur Debian), pacman (Archlinux), pkgng (sur les systèmes FreeBSD) ou pkg_add (sur les systèmes OpenBSD). Vous aurez probablement besoin de faire des travaux de configuration supplémentaires après que ce rôle a installé Nginx, comme ajouter votre propre fichier [virtualhost].conf dans /etc/nginx/conf.d/
, décrivant l'emplacement et les options à utiliser pour votre site web particulier.
Exigences
Aucune.
Variables du Rôle
Les variables disponibles sont listées ci-dessous, avec leurs valeurs par défaut (voir defaults/main.yml
):
nginx_vhosts: []
Une liste de définitions de vhosts (blocs de serveur) pour les hôtes virtuels Nginx. Chaque entrée créera un fichier de configuration séparé nommé par server_name
. Si laissé vide, vous devrez fournir votre propre configuration d'hôte virtuel. Consultez l'exemple commenté dans defaults/main.yml
pour les options de serveur disponibles. Si vous avez un grand nombre de personnalisations nécessaires pour vos définitions de serveur, il est probablement mieux de gérer le fichier de configuration vhost vous-même, 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'entrée nginx_vhosts entièrement peuplée, utilisant un |
pour déclarer un bloc de syntaxe pour les extra_parameters
.
Veuillez noter 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 normalement indentées 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 de vhost secondaire qui redirigera vers celui montré ci-dessus.
Remarque : Le filename
par défaut est le premier domaine dans server_name
, si vous avez deux vhosts 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
Indique s'il faut supprimer la configuration de l'hôte virtuel 'default' fournie par Nginx. 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 comme un équilibreur de charge, vous pouvez définir un ou plusieurs groupes upstream à l'aide de cette variable. En plus de définir au moins un upstream, vous devez configurer l'un de vos blocs serveur pour proxy les requêtes à travers l'upstream défini (par exemple, proxy_pass http://myapp1;
). Consultez l'exemple commenté dans defaults/main.yml
pour plus d'informations.
nginx_user: "nginx"
L'utilisateur sous lequel Nginx fonctionnera. Défaut à 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. Réglez-le plus haut pour gérer plus de connexions simultanées (et rappelez-vous qu'une connexion sera utilisée tant que la durée du timeout keepalive pour chaque client !). Vous pouvez régler nginx_multi_accept
sur on
si vous souhaitez 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"
Configuration des logs d'erreurs et d'accès par défaut. Réglez sur off
pour désactiver complètement un log.
nginx_sendfile: "on"
nginx_tcp_nopush: "on"
nginx_tcp_nodelay: "on"
Options de connexion TCP. Consultez cet article de blog pour plus d'informations sur ces directives.
nginx_keepalive_timeout: "65"
nginx_keepalive_requests: "100"
Paramètres keepalive de Nginx. La durée d'attente doit être plus élevée (plus de 10 s) si vous avez un trafic de style polling (surtout les sites alimentés par AJAX), ou plus basse (<10 s) 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 de 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 pouvant être téléchargée, car les téléchargements passent par Nginx avant d'atteindre un backend comme php-fpm
. Si vous recevez 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"
If vous avez de nombreux noms de serveur, ou des noms de serveur très longs, vous pourriez rencontrer une erreur Nginx au démarrage nécessitant d'augmenter cette valeur.
nginx_proxy_cache_path: ""
À régler comme la 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 un proxy inverse, vous pouvez définir ceci sur une valeur valide (par exemple, "/var/cache/nginx keys_zone=cache:32m"
) pour utiliser le cache de Nginx (une configuration de proxy supplémentaire peut être effectuée dans les 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 - comme ;
pour la terminaison de 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 être définie littéralement (comme vous l'inséreriez directement dans le nginx.conf
, en respectant la syntaxe de configuration Nginx - comme ;
pour la terminaison de ligne, etc.), 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 seulement) 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 que vous souhaitez obtenir une version plus récente de Nginx, vous pouvez installer le dépôt wheezy-backports
et définir cette valeur ici, et Ansible l'utilisera comme option -t
lors de l'installation de Nginx.
nginx_ppa_use: false
nginx_ppa_version: stable
(Pour Ubuntu seulement) Vous permet d'utiliser le PPA officiel de Nginx au lieu du package système. Vous pouvez régler la version sur stable
ou development
.
nginx_yum_repo_enabled: true
(Pour RedHat/CentOS seulement) Réglez ceci sur false
pour désactiver l'installation du dépôt nginx
yum. Ceci pourrait être nécessaire si vous souhaitez les packages stables par défaut du système, ou si vous utilisez Satellite.
Remplacer les 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 de l'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 régler le modèle pour chaque 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"
Vous pouvez soit copier et modifier le modèle fourni, soit l'étendre avec l'héritage de modèles Jinja2 et remplacer le bloc de modèle spécifique que vous devez changer.
Exemple : Configurer gzip dans la configuration de nginx
Réglez nginx_conf_template
pour pointer vers un fichier 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 de 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.
Nginx installation for Linux, FreeBSD and OpenBSD.
ansible-galaxy install gortc.nginx