ansibleguy.infra_nginx
Ansible Rolle - Nginx Webserver
Ansible Rolle, um eine oder mehrere NGINX-Seiten auf einem Linux-Server bereitzustellen.
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.
Role to configure a nginx webserver in one of three basic config modes: proxy, redirect, server
ansible-galaxy install ansibleguy.infra_nginx