ansibleguy.infra_nginx
Rola Ansible - Serwer WWW Nginx
Rola Ansible do wdrażania jednej lub wielu stron NGINX na serwerze z systemem Linux.
Testowane:
- Debian 11
- Debian 12
Instalacja
# najnowsza wersja
ansible-galaxy role install git+https://github.com/ansibleguy/infra_nginx
# z galaxy
ansible-galaxy install ansibleguy.infra_nginx
# lub do własnej ścieżki roli
ansible-galaxy install ansibleguy.infra_nginx --roles-path ./roles
# instalacja zależności
ansible-galaxy install -r requirements.yml
# jeśli chcesz korzystać z podstawowej autoryzacji: zainstaluj zależności Pythona
python3 -m pip install -r requirements.txt
Użycie
Chcesz prosty interfejs graficzny Ansible? Sprawdź mój Ansible WebUI
Konfiguracja
Zdefiniuj słownik nginx według potrzeb!
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: # domyślny cel proxy to localhost
port: 50000 # cel portu
cache: # cache zawartości upstream
enable: true
ssl:
mode: 'existing' # istniejące certyfikaty do skopiowania na docelowy serwer
security:
# bardzo podstawowe filtrowanie złych botów na podstawie dopasowania 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: # dodaj ustawienia jako pary klucz-wartość
LimitRequestFields: 10
config_additions: # dodaj listę własnych linii konfiguracji
- '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'
Wykonanie
Uruchom plik playbook:
ansible-playbook -K -D -i inventory/hosts.yml playbook.yml
Aby przetworzyć tylko konkretną stronę: (i zaoszczędzić czas)
ansible-playbook -K -D -i inventory/hosts.yml playbook.yml -e only_site=NAZWA_STRONY
# uwaga: wiele oddzielonych przecinkami stron także powinno działać
Dostępne są także przydatne tagi:
- base => tylko skonfiguruj podstawy; strony nie będą modyfikowane
- sites
- config => tylko zaktualizuj konfigurację strony (z wyłączeniem certyfikatów)
- certs
- letsencrypt
- auth
- only_certs (można użyć jako tag pomijający)
Aby debugować błędy - możesz ustawić zmienną 'debug' w czasie wykonywania:
ansible-playbook -K -D -i inventory/hosts.yml playbook.yml -e debug=yes
Funkcjonalność
Instalacja pakietów
- Zależności Ansible (minimalne)
- Nginx
Konfiguracja
Wsparcie dla wielu stron/serwerów
Trzy tryby konfiguracji:
- proxy (domyślny)
- serve
- redirect
Wsparcie dla specyficznych konfiguracji za pomocą parametrów 'config' i 'config_additions'
Opcja filtrowania 'lokacji' za pomocą GeoIP => JUŻ WKRÓTCE (:
Domyślna konfiguracja:
- Wyłączone: <TLS1.2, niezabezpieczone szyfry, autoindex, servertokens
- Nagłówki zabezpieczeń: HSTS, X-Frame, Referrer-Policy, Content-Type nosniff, X-Domain-Policy, XXS-Protection
- Limity zapobiegające DDoS
- Użycie certyfikatu self-signed
- HTTP2 włączone z fallbackiem do HTTP1.1
- Wsparcie dla IPv6 włączone
Tryby SSL (więcej informacji zobacz: CERT ROLE)
- selfsigned => Generuj certyfikaty self-signed
- ca => Generuj minimalny Urząd Certyfikacji i certyfikat przez niego podpisany
- letsencrypt => Używa certbota LetsEncrypt
- existing => Kopiuj pliki certyfikatów lub użyj istniejących
Domyślne opt-in-y:
- Ograniczenie metod do POST/GET/HEAD
- Listener strony statusowej na localhost
- Logowanie do syslog
- http2
Domyślne opt-out-y:
- caching w trybie proxy
- Blokowanie znanych Script-Botów
- Blokowanie znanych Bad-Crawler-Bots
Informacje
Uwaga: ta rola obecnie obsługuje tylko systemy oparte na Debianie
Uwaga: Większość funkcjonalności roli może być aktywowana lub dezaktywowana.
Aby zobaczyć wszystkie dostępne opcje - zapoznaj się z domyślną konfiguracją znajdującą się w głównym pliku konfiguracyjnym!
Informacja: Wiele zmiennych można ustawiać zarówno globalnie, jak i dla poszczególnych stron.
Konfiguracja strony zawsze przysłania tę globalną.
Uwaga: Ta rola zakłada, że niezabezpieczony 'serwer' strony będzie tylko przekierowywał do jej połączenia zabezpieczonego.
Uwaga: Jeśli chcesz, aby wszystkie nazwy domen były 'złapane' przez stronę/serwer, musisz dodać podkreślenie '_' jako alias lub domenę!
Zostanie to również zrobione automatycznie, jeśli nie podano domeny.Ostrzeżenie: Nie każde ustawienie/zmienna, które podasz, będzie sprawdzane pod kątem poprawności. Zła konfiguracja może złamać rolę!
Informacja: Aby wyłączyć domyślne ustawienia i nagłówki => po prostu ustaw ich wartość na: '' (pusty ciąg)
Informacja: Jeśli filtrujesz zapytania internetowe za pomocą filtra GeoIP w zaporze sieciowej => LetsEncrypt będzie działać tylko przy otwarciu portu 80 dla całego świata.
Zapytania inne niż '.well-known/acme-challenge/' są po prostu przekierowywane na 443.
Informacja: Aby odnowienie LetsEncrypt działało, musisz zezwolić na połączenia wychodzące do:
80/tcp, 443/tcp+udp do acme-v02.api.letsencrypt.org, staging-v02.api.letsencrypt.org (tryb debugowania) i r3.o.lencr.org
Informacja: Ta rola wspiera także konfigurację podstawowej autoryzacji.
Dla zaawansowanych przypadków użycia możesz chcieć ustawić auth_request w
site.config_additions_root
, który można wykorzystać do implementacji OAuth-Proxies i tak dalej.Informacja: Możesz ustawić flagę
plain_only
, aby wyłączyć HTTPS. Może to być przydatne, jeśli jesteś za innym serwerem proxy.
Role to configure a nginx webserver in one of three basic config modes: proxy, redirect, server
ansible-galaxy install ansibleguy.infra_nginx