ansibleguy.infra_nginx

Nginx

Rola Ansible - Serwer WWW Nginx

Rola Ansible do wdrażania jednej lub wielu stron NGINX na serwerze z systemem Linux.

Postaw mi kawę

Status testów Molecule Status testów YamlLint Status testów PyLint Status testów Ansible-Lint Ansible Galaxy

Logi Molecule: Krótki, Pełny

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.

O projekcie

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

Zainstaluj
ansible-galaxy install ansibleguy.infra_nginx
Licencja
other
Pobrania
6.1k
Właściciel
[email protected] | GPG: https://badges.ansibleguy.net/public.gpg