ansibleguy.infra_nginx
Rôle Ansible - Serveur Web Nginx
Rôle Ansible pour déployer un ou plusieurs sites NGINX sur un serveur Linux.
Logs Molecule : Court, Complet
Testé avec :
- Debian 11
- Debian 12
Installation
# dernière version
ansible-galaxy role install git+https://github.com/ansibleguy/infra_nginx
# depuis galaxy
ansible-galaxy install ansibleguy.infra_nginx
# ou pour un chemin de rôle personnalisé
ansible-galaxy install ansibleguy.infra_nginx --roles-path ./roles
# installer les dépendances
ansible-galaxy install -r requirements.yml
# si vous souhaitez utiliser l'authentification basique : installer les dépendances python
python3 -m pip install -r requirements.txt
Utilisation
Vous voulez une interface simple pour Ansible ? Essayez mon Ansible WebUI
Configuration
Définissez le dictionnaire nginx selon vos besoins !
nginx:
config:
client_max_body_size: '500m'
ssl_session_timeout: '15m'
sites:
some_proxy:
mode: 'proxy'
domain: 'some.guy.net'
aliases:
- 'service.guy.net'
port_ssl: 8443
port_plain: 8080
proxy: # la cible par défaut est localhost
port: 50000 # port cible
cache: # mise en cache du contenu en amont
enable: true
ssl:
mode: 'existing' # certificats préexistants à copier sur le serveur cible
security:
# filtrage très basique des mauvais bots selon le user-agent
block_script_bots: true
block_bad_crawler_bots: true
guys_statics:
mode: 'server'
domain: 'static.guy.net'
serve:
path: '/var/www/static'
ssl:
mode: 'snakeoil'
config: # ajouter des paramètres comme paires clé-valeur
LimitRequestFields: 10
config_additions: # ajouter une liste de lignes de configuration personnalisées
- 'location = /favicon.ico {alias /var/not_www/site_guys_statics/favicon.ico;}'
git_stuff:
mode: 'redirect'
redirect:
target: 'https://github.com/ansibleguy'
ssl:
mode: 'letsencrypt'
letsencrypt:
email: '[email protected]'
security:
restrict_methods: false
fileshare:
mode: 'server'
domain: 'files.guy.net'
serve:
path: '/var/www/files'
basic_auth:
enable: true
provider: 'file'
file:
users:
some_user: 'some_password'
Exécution
Exécutez le playbook :
ansible-playbook -K -D -i inventory/hosts.yml playbook.yml
Pour traiter un site spécifique : (et gagner du temps)
ansible-playbook -K -D -i inventory/hosts.yml playbook.yml -e only_site=SITE_NAME
# note : plusieurs sites séparés par une virgule devraient également fonctionner
Il existe aussi des tags utiles :
- base => configurer uniquement les bases ; les sites ne seront pas touchés
- sites
- config => mettre à jour uniquement la configuration du site (hors certificats)
- certs
- letsencrypt
- auth
- only_certs (peut être utilisé comme tag d'ignorance)
Pour déboguer les erreurs - vous pouvez définir la variable 'debug' à l'exécution :
ansible-playbook -K -D -i inventory/hosts.yml playbook.yml -e debug=yes
Fonctionnalité
Installation de paquets
- Dépendances Ansible (minimales)
- Nginx
Configuration
Support pour plusieurs sites / serveurs
Trois modes de configuration :
- proxy (par défaut)
- serve
- redirect
Support pour des configurations spécifiques en utilisant les paramètres 'config' et 'config_additions'
Option pour filtrer les 'locations' par GeoIP => À VENIR (:
Configuration par défaut :
- Désactivé : <TLS1.2, chiffrement non sécurisé, autoindex, servertokens
- En-têtes de sécurité : HSTS, X-Frame, Referrer-Policy, Content-Type nosniff, X-Domain-Policy, XXS-Protection
- Limites pour prévenir les DDoS
- Utilisation d'un certificat auto-signé
- HTTP2 activé avec une option de retour à HTTP1.1
- Support IPv6 activé
Modes SSL (pour plus d'infos voir : RÔLE CERTIFICAT)
- selfsigned => Générer des certificats auto-signés
- ca => Générer une autorité de certification minimale et un certificat signé par celle-ci
- letsencrypt => Utilise le certbot de LetsEncrypt
- existing => Copier des fichiers de certificat ou utiliser ceux existants
Options par défaut activées :
- restriction des méthodes à POST/GET/HEAD
- écouteur de page d'état sur localhost
- Journalisation vers syslog
- http2
Options par défaut désactivées :
- mise en cache en mode proxy
- Blocage des known script-bots
- Blocage des known bad-crawler-bots
Info
Note : ce rôle ne supporte actuellement que les systèmes basés sur Debian.
Note : La plupart des fonctionnalités du rôle peuvent être activées ou désactivées.
Pour toutes les options disponibles - consultez la configuration par défaut située dans le fichier de défaut principal/site !
Info : De nombreuses variables peuvent être définies soit au niveau 'global', soit au niveau 'par site'.
La configuration du site prévaut toujours sur celle globale.
Note : Ce rôle suppose que le 'serveur' non chiffré du site redirigera uniquement vers sa connexion chiffrée.
Note : Si vous voulez que tous les noms de domaine soient 'attrapés' par un site/serveur, vous devez ajouter un souligné '_' comme alias ou domaine !
Cela sera également fait automatiquement si aucun domaine n'est fourni.Avertissement : Toutes les options/variables que vous fournissez ne seront pas vérifiées pour leur validité. Une mauvaise configuration pourrait casser le rôle !
Info : Pour désactiver les paramètres et en-têtes par défaut => mettez simplement leur valeur à : '' ( chaîne vide)
Info : Si vous filtrez les requêtes Web via le filtre GeoIP en utilisant votre pare-feu => LetsEncrypt fonctionnera avec uniquement l’ouverture du port 80 au monde.
Les requêtes autres que '.well-known/acme-challenge/' sont simplement redirigées vers 443.
Info : Pour que le renouvellement de LetsEncrypt fonctionne, vous devez autoriser les connexions sortantes à :
80/tcp, 443/tcp+udp vers acme-v02.api.letsencrypt.org, staging-v02.api.letsencrypt.org (mode débogage) et r3.o.lencr.org.
Info : Ce rôle prend également en charge la configuration de l'authentification basique.
Pour des cas d'utilisation avancés, vous pourriez vouloir définir auth_request dans
site.config_additions_root
qui peut être utilisé pour mettre en œuvre des proxys OAuth et ainsi de suite.Info : Vous pouvez définir le drapeau
plain_only
pour désactiver HTTPS. Cela peut être utile si vous êtes derrière un autre serveur proxy.
Role to configure a nginx webserver in one of three basic config modes: proxy, redirect, server
ansible-galaxy install ansibleguy.infra_nginx