ansibleguy.infra_nginx

Nginx

Ansible Rolle - Nginx Webserver

Ansible Rolle, um eine oder mehrere NGINX-Seiten auf einem Linux-Server bereitzustellen.

Kauf mir einen Kaffee

Molecule Test Status YamlLint Test Status PyLint Test Status Ansible-Lint Test Status Ansible Galaxy

Molecule Protokolle: Kurz, Voll

Getestet:

  • Debian 11
  • Debian 12

Installation

# neueste Version
ansible-galaxy role install git+https://github.com/ansibleguy/infra_nginx

# von Galaxy
ansible-galaxy install ansibleguy.infra_nginx

# oder zu einem benutzerdefinierten Rollenpfad
ansible-galaxy install ansibleguy.infra_nginx --roles-path ./roles

# Abhängigkeiten installieren
ansible-galaxy install -r requirements.yml

# wenn Sie die Basis-Authentifizierung verwenden möchten: Python-Abhängigkeiten installieren
python3 -m pip install -r requirements.txt

Verwendung

Möchten Sie eine einfache Ansible-GUI? Schauen Sie sich meine Ansible WebUI an.

Konfiguration

Definieren Sie das nginx-Dictionary nach Bedarf!

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:  # Standard-Proxy-Ziel ist localhost
        port: 50000  # Zielport
        
        cache:  # Caching des Upstream-Inhalts
          enable: true

      ssl:
        mode: 'existing'  # bereits vorhandene Zertifikate, die auf den Zielserver kopiert werden

      security:
        # sehr grundlegende Filterung von schlechten Bots basierend auf User-Agent-Übereinstimmungen
        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:  # Einstellungen als Schlüssel-Wert-Paare hinzufügen
        LimitRequestFields: 10
      config_additions:  # Liste von benutzerdefinierten Konfigurationszeilen hinzufügen
        - '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'

Ausführung

Führen Sie das Playbook aus:

ansible-playbook -K -D -i inventory/hosts.yml playbook.yml

Um nur eine bestimmte Seite zu verarbeiten: (und Zeit zu sparen)

ansible-playbook -K -D -i inventory/hosts.yml playbook.yml -e only_site=SITE_NAME
# Hinweis: Mehrere durch Kommas getrennte Seiten sollten ebenfalls funktionieren

Es stehen auch einige nützliche Tags zur Verfügung:

  • base => nur die Grundlagen konfigurieren; Seiten werden nicht berührt
  • sites
  • config => nur die Seitenkonfiguration aktualisieren (außer Zertifikate)
  • certs
  • letsencrypt
  • auth
  • only_certs (kann als Überspringen-Tag verwendet werden)

Um Fehler zu debuggen - Sie können die 'debug'-Variable zur Laufzeit setzen:

ansible-playbook -K -D -i inventory/hosts.yml playbook.yml -e debug=yes

Funktionalität

  • Paketinstallation

    • Ansible-Abhängigkeiten (minimal)
    • Nginx
  • Konfiguration

    • Unterstützung für mehrere Seiten/Server
    • Drei Konfigurationsmodi:
      • proxy (Standard)
      • serve
      • redirect
    • Unterstützung für spezifische Konfigurationen mit den Parametern 'config' und 'config_additions'
    • Option, 'Standorte' über GeoIP zu filtern => KOMMT BALD (:
  • Standardkonfiguration:

    • Deaktiviert: <TLS1.2, unsichere Chiffren, autoindex, servertokens
    • Sicherheitsheader: HSTS, X-Frame, Referrer-Policy, Content-Type nosniff, X-Domain-Policy, XXS-Protection
    • Limits zur DDoS-Prävention
    • Verwendung eines selbstsignierten Zertifikats
    • HTTP2 aktiviert mit Fallback auf HTTP1.1
    • IPv6-Unterstützung aktiviert
  • SSL-Modi (für weitere Informationen siehe: CERT ROLE)

    • selfsigned => Erstellen selbstsignierter Zertifikate
    • ca => Erstellen einer minimalen Zertifizierungsstelle und eines von ihr unterschriebenen Zertifikats
    • letsencrypt => Verwendet das LetsEncrypt certbot
    • existing => Kopiert Zertifikatdateien oder verwendet vorhandene
  • Standard-Opt-Ins:

    • Einschränkung der Methoden auf POST/GET/HEAD
    • Statusseitenhörer auf localhost
    • Protokollierung in syslog
    • http2
  • Standard-Opt-Outs:

    • Caching im Proxy-Modus
    • Blockierung bekannter Script-Bots
    • Blockierung bekannter Bad-Crawler-Bots

Info

  • Hinweis: Diese Rolle unterstützt derzeit nur Debian-basierte Systeme.

  • Hinweis: Viele Funktionen der Rolle können ein- oder ausgeschaltet werden.

    Für alle verfügbaren Optionen - siehe die Standardkonfiguration im Haupt-/Site-Standarddatei!

  • Info: Viele Variablen können entweder auf 'globaler' oder 'pro-site'-Ebene gesetzt werden.

    Die Seitenkonfiguration überschreibt immer die globale.

  • Hinweis: Diese Rolle erwartet, dass der unverschlüsselte 'Server' der Seite nur auf die verschlüsselte Verbindung umleitet.

  • Hinweis: Wenn Sie möchten, dass alle Domainnamen von einer Seite/einem Server 'erfasst' werden, müssen Sie einen Unterstrich '_' als Alias oder Domain hinzufügen!
    Dies wird auch automatisch erfolgen, wenn keine Domain angegeben ist.

  • Warnung: Nicht jede Einstellung/Variable, die Sie bereitstellen, wird auf Gültigkeit überprüft. Falsche Konfiguration könnte die Rolle beschädigen!

  • Info: Um die Standardwerte und Header zu deaktivieren => setzen Sie ihren Wert auf: '' (leerer String)

  • Info: Wenn Sie Webanfragen über einen GeoIP-Filter über Ihre Firewall filtern => funktioniert LetsEncrypt nur, wenn Sie Port 80 für die Welt öffnen.

    Anfragen, die nicht '.well-known/acme-challenge/' sind, werden einfach auf 443 umgeleitet.

  • Info: Damit die Erneuerung von LetsEncrypt funktioniert, müssen Sie ausgehende Verbindungen zu folgendem zulassen:

    80/tcp, 443/tcp+udp zu acme-v02.api.letsencrypt.org, staging-v02.api.letsencrypt.org (Debug-Modus) and r3.o.lencr.org

  • Info: Diese Rolle unterstützt auch die Konfiguration der Basis-Authentifizierung.

    Für erweiterte Anwendungsfälle möchten Sie möglicherweise auth_request in site.config_additions_root setzen, die verwendet werden kann, um OAuth-Proxys usw. zu implementieren.

  • Info: Sie können das plain_only-Flag setzen, um HTTPS zu deaktivieren. Dies könnte praktisch sein, wenn Sie hinter einem anderen Proxy-Server stehen.

Über das Projekt

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

Installieren
ansible-galaxy install ansibleguy.infra_nginx
GitHub Repository
Lizenz
other
Downloads
6.1k
Besitzer
[email protected] | GPG: https://badges.ansibleguy.net/public.gpg