ansibleguy.infra_nginx

Nginx

Rôle Ansible - Serveur Web Nginx

Rôle Ansible pour déployer un ou plusieurs sites NGINX sur un serveur Linux.

Achetez-moi un café

État du Test Molecule État du Test YamlLint État du Test PyLint État du Test Ansible-Lint Ansible Galaxy

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.

À propos du projet

Role to configure a nginx webserver in one of three basic config modes: proxy, redirect, server

Installer
ansible-galaxy install ansibleguy.infra_nginx
Licence
other
Téléchargements
6.1k
Propriétaire
[email protected] | GPG: https://badges.ansibleguy.net/public.gpg