Turgon37.apache2

Ansible Rola Apache2

Status Budowy Licencja Rola Ansible

Opis

:grey_exclamation: Zanim skorzystasz z tej roli, pamiętaj, że wszystkie moje role Ansible są napisane i dostosowane do mojej infrastruktury IT. Mimo że są jak najbardziej ogólne, mogą nie spełnić Twoich potrzeb. Zachęcam do dokładnej analizy ich działania i oceny możliwości ich bezpiecznej instalacji na Twoich serwerach.

Ta rola konfiguruje instancję demona Apache2.

Wymagania

Wymaga Ansible >= 2.4

Zależności

Jeśli używasz profilu monitorowania Zabbix, będziesz potrzebować roli ansible-zabbix-agent.

Rodzina systemów operacyjnych

Ta rola jest dostępna dla Debiana.

Funkcje

W tej chwili rola może być używana do:

  • instalacji Apache2
  • konfiguracji głównego pliku serwera
  • tworzenia konfiguracji wirtualnych hostów
  • zarządzania włączonymi modułami
  • nadpisywania niektórych konfiguracji modułów
  • monitorowania elementów dla
    • Zabbix
  • lokalnych faktów

Konfiguracja

Serwer

Wszystkie zmienne, które można nadpisać, są przechowywane w pliku defaults/main.yml oraz w poniższej tabeli. Aby zobaczyć domyślne wartości, zapoznaj się z tym plikiem.

Nazwa Opis
apache2__version Wybierz wersję apache2 do zainstalowania (dostępną w repozytoriach OS) np. 2.4.25-3+deb9u5
apache2__service_enabled Zmienna logiczna, która włącza lub wyłącza usługę apache przy uruchamianiu i w trakcie działania
apache2__service_restartable Jeśli ustawione na prawdę, usługa apache będzie automatycznie restartowana po zmianach konfiguracyjnych (ustawione na fałsz w produkcji)
apache2__server_tokens Konfiguracja szczegółowości tokenu serwera na stronach błędów
apache2__server_signature Wydrukować lub nie podpis serwera na stronach błędów
apache2__trace_enable Konfiguracja metody HTTP TRACE
apache2__ssl_ciphers Lista dostępnych szyfrów SSL, domyślnie skonfigurowany jest tylko zalecany podzbiór
apache2__ssl_protocols Lista włączonych protokołów SSL, domyślnie wszystkie, z wyjątkiem SSL 2/3
apache2__ssl_honorciphers Powiadami informuje serwer, aby preferował swoją kolejność szyfrów zamiast kolejności klienta
apache2__log_formats Słownik zawierający wszystkie dostępne formaty logów w apache.
apache2__listen_http Lista portów/host:port, na których apache będzie nasłuchiwać żądania http
apache2__listen_https Lista portów/host:port, na których apache będzie nasłuchiwać żądania https

Uwaga dotycząca apache2__listen_http(s): na razie te dyrektywy są wypełniane ręcznie, planowałem wygenerować je automatycznie, ale okazuje się, że jest to skomplikowane, ponieważ wirtualne hosty mogą być definiowane z wykorzystaniem include_role.

Poniższe zmienne odnoszą się do serwera i mogą być nadpisywane w każdym wirtualnym hoście:

Nazwa Opis
apache2__serveradmin Opcjonalny adres e-mail administratora
apache2__allow_override_list Dyrektywa AllowOverrideList
apache2__allow_override Dyrektywa AllowOverride
apache2__options Dyrektywa Option

Aby skonfigurować, które moduły są włączone, musisz zadeklarować wszystkie nazwy modułów w jednej z trzech poniższych list:

  • apache2__modules_enabled_global
  • apache2__modules_enabled_group
  • apache2__modules_enabled_host

Domyślnie żaden moduł nie jest włączony, więc warto wiedzieć, że apache nie wystartuje bez włączonego modułu mpm. Każdy wpis w tych listach musi być nazwą modułu. W przypadku kiedy moduł ma pliki '.conf' i '.load', będą one automatycznie dołączane, jeśli to możliwe. Ponadto, jeśli rola zawiera plik szablonu w katalogu templates/modules.conf/(nazwa modułu), zastąpi on wszelkie istniejące pliki konfiguracyjne dystrybucji.

Wirtualne hosty

Każdy wirtualny host musi być zadeklarowany w bloku vhost. Możesz umieścić blok vhost w jednej z trzech dostępnych list:

  • apache2__virtual_hosts_global
  • apache2__virtual_hosts_group
  • apache2__virtual_hosts_host

Domyślnie każdy wirtualny host nasłuchuje na '*' i na domyślnym porcie zgodnie z statusem HTTP(s). Jeśli SSL Engine jest 'WŁĄCZONY', używa portu 443, w przeciwnym razie 80.

Jedynie podzbiór dyrektyw i sekcji apache2 jest zaimplementowany w ansible, dostępny w plikach dyrektywy sekcje. Jeśli potrzebujesz dyrektywy, która nie jest zaimplementowana, możesz użyć pozycji extra_parameters. Jeśli brakuje typu sekcji, musisz to zmodyfikować i zaimplementować w roli.

Każdy blok vhost musi być umieszczony w słowniku, gdzie kluczem będzie nazwa pliku konfiguracji vhost. Każdy vhost musi być słownikiem, który może zawierać następujące zmienne:

Nazwa Typ Opis
hosts ciąg lub tablica ciągów/słowników lista interfejsów, na których vhost będzie nasłuchiwać
hosts[] ciąg jeśli element listy hosts jest łańcuchem, zostanie zinterpretowany jako "IP:PORT" lub "X.X.X.X:X"
hosts[].ip ciąg jeśli element listy hosts jest słownikiem z kluczem 'ip', zostanie zinterpretowany jako "IP"
hosts[].port int jeśli element listy hosts jest słownikiem z kluczem 'port', będzie użyty jako port nasłuchu. Jeśli ten klucz nie jest ustawiony, zostanie wywnioskowany z protokołu HTTP (patrz powyżej)
server_name ciąg host vhost
server_alias ciąg alias nazwy hosta
server_admin ciąg opcjonalny adres e-mail administratora
document_root ciąg Ścieżka do folderu głównego dokumentu. Ten katalog zostanie automatycznie utworzony, ponieważ Apache nie uruchomi się, jeśli go brakuje.
document_root_user ciąg Użytkownik unixowy folderu głównego dokumentu. Stosowane tylko, jeśli zmienna jest zdefiniowana
document_root_group ciąg Grupa unixowa folderu głównego dokumentu. Stosowane tylko, jeśli zmienna jest zdefiniowana
document_root_mode ciąg Tryb unixowy folderu głównego dokumentu. Stosowane tylko, jeśli zmienna jest zdefiniowana. Upewnij się, że apache ma przynajmniej dostęp do tego folderu w trybie tylko do odczytu
error_log ciąg Ścieżka do pliku dziennika błędów. Plik dziennika błędów zostanie utworzony w tym katalogu, upewnij się, że apache ma wystarczające uprawnienia do dostępu
error_log_user ciąg Użytkownik unixowy katalogu dziennika błędów
error_log_group ciąg Grupa unixowa katalogu dziennika błędów
allow_override ciąg Dyrektywa AllowOverride
allow_override_list ciąg Dyrektywa AllowOverrideList
options ciąg Dyrektywa Option
headers tablica Tablica dyrektyw Header
files_match tablica słowników (patrz poniżej) Zawiera definicję FileMatch, każdy z nich musi być słownikiem z następującymi kluczami
files_match[].regexp ciąg Wyrażenie regularne, które uruchamia dopasowanie pliku
files_match[].actions tablica ciągów Lista dyrektyw Apache do wykonania, gdy to dopasowanie pliku zostanie uruchomione
extra_parameters tablica ciągów Dowolne dodatkowe dyrektywy Apache
https słownik Zobacz poniżej dla wszystkich podkluczy https
https.enabled bool Domyślnie prawda, może być użyta do wyłączenia https i zachowania konfiguracji
https.certificate_chain_file ciąg Ścieżka do łańcucha certyfikatów
https.verify_client ciąg Typ weryfikacji certyfikatu klienta do wykonania
https.verify_client_depth int Maksymalna głębokość dla weryfikacji certyfikatu klienta
https.ca_certificate_path ciąg Ścieżka do katalogu certyfikatów CA
https.ca_certificate_file ciąg Ścieżka do pliku certyfikatu CA
https.crl_path ciąg Ścieżka do katalogu CRL
https.crl_file ciąg Ścieżka do pliku CRL

Fakty

Domyślnie lokalne fakty są instalowane i udostępniają następujące zmienne:

  • ansible_local.apache2.version_full
  • ansible_local.apache2.version_major

Przykład

Playbook

Użyj go w playbooku w następujący sposób:

- hosts: all
  roles:
    - turgon37.apache2

Inwentaryzacja

  • Przykład ręcznie załadowanych modułów apache
apache2__modules_enabled_group:
  - access_compat # wsparcie dla starych dyrektyw Allow,Order, które są przestarzałe
  - alias  # zapewnia  Alias
#  - auth_basic  # zapewnia podstawowe uwierzytelnianie HTTP
  - authn_core
#  - authn_file  # uwierzytelnianie oparte na htpasswd
  - authz_core
#  - authz_host  # uwierzytelnianie oparte na ip/hoście
#  - authz_user  # uwierzytelnianie oparte na nazwie użytkownika
#  - autoindex  # wyłączone, indeksy są wyłączone
  - deflate # zapewnia kompresję Gzip
  - dir # zapewnia  DirectoryIndex
  - env  # zapewnia SetEnv
#  - filter  # zapewnia FilterChain
  - headers  # zapewnia RequestHeader
  - mime
  - mpm_prefork
  - negotiation # obsługuje typ zawartości
  - php7.0
#  - proxy
#  - proxy_http
#  - setenvif
  - ssl  # obsługuje SSL
  - socache_shmcb  # wymagany przez mod_ssl
  • Domyślny wirtualny host debian
apache2__host_virtual_hosts:
  000-default:
    server_name: www.example.com
    server_admin: webmaster@localhost
    document_root: /var/www/html
    sections:
      - type: directory
        path: /var/www/html
        directives:
          - require: all granted
    error_log: '{{ apache2__log_directory }}/error.log'
    custom_log: '{{ apache2__log_directory }}/access.log combined'
  • Prosty stały przekierowanie z HTTP do HTTPS
apache2__host_virtual_hosts:
  web-redirect:
    hosts:
      - ip: "10.0.0.1"
    server_name: www.example.net
    server_alias: www2.example.net
    extra_parameters:
      - RedirectPermanent / https://www.example.net/
  • Proxy pass z HTTPS do HTTP
apache2__host_virtual_hosts:
  proxy-https:
    hosts:
      - ip: 10.0.0.1
      - ip: 192.168.56.12
    server_name: www.example.net
    server_alias: www2.example.net
    extra_parameters:
      - 'ProxyRequests Off'
      - 'ProxyPreserveHost On'
      - 'ProxyPass / http://localhost:3001/'
      - 'ProxyPassReverse / https://localhost:3001/'
    https:
      certificate_file: /etc/ssl/apache2/www.example.net.pem
      certificate_key_file: /etc/ssl/apache2/www.example.net.key
  • Wirtualny host HTTP z folderem głównym i aplikacją PHP (Jeedom)
apache2__host_virtual_hosts:
    hosts:
      - 10.0.0.1
      - "127.0.0.1:443"
    server_name: jeedom.example.net
    document_root: /var/www/html
    document_root: '{{ jeedom__install_directory }}'
    document_root_user: '{{ apache2__service_user }}'
    document_root_group: '{{ apache2__service_user }}'
    error_log: '{{ jeedom__install_directory }}/log/http.error'
    error_log_user: '{{ apache2__service_user }}'
    error_log_group: '{{ apache2__service_user }}'
    sections:
      - type: directory
        path: '{{ jeedom__install_directory }}'
        directives:
          - allow_override: All
          - options: -Indexes -ExecCGI -FollowSymLinks
          - require: all granted
      - type: files_match
        regex: '\.(appcache|atom|bbaw|bmp|crx|css|cur|eot|f4[abpv]|flv|geojson|gif|htc|ico|jpe?g|js|json(ld)?|m4[av]|manifest|map|mp4|oex|og[agv]|opus|otf|pdf|png|rdf|rss|safariextz|svgz?|swf|topojson|tt[cf]|txt|vcard|vcf|vtt|webapp|web[mp]|webmanifest|woff2?|xloc|xml|xpi)$'
        directives:
          - header:
              - unset Content-Security-Policy
              - unset X-Frame-Options
              - unset X-XSS-Protection
    directives:
      - header:
          # Polityka bezpieczeństwa treści (CSP)
          #- set Content-Security-Policy "script-src 'self'; object-src 'self'"
          # Zmniejszenie ryzyka związanego z typami MIME
          - set X-Content-Type-Options "nosniff"
          # Clickjacking
          - set X-Frame-Options "DENY"
          # Ochrona przed atakami Cross-Site Scripting (XSS)
          - set X-XSS-Protection "1; mode=block"
          - unset X-Powered-By
  • Wirtualny host HTTPS z folderem głównym i aplikacją PHP (Jeedom)
apache2__host_virtual_hosts:
  jeedom-https:
    hosts:
      - ip: 10.0.0.1
      - ip: 127.0.0.1
        port: 4343
    server_name: jeedom.example.net
    document_root: /var/www/html
    allow_override: All
    options: '-Indexes -ExecCGI -FollowSymLinks'
    headers:
      - set X-Content-Type-Options "nosniff"
      - always set Strict-Transport-Security "max-age=16070400; includeSubDomains"
      - set X-XSS-Protection "1; mode=block"
      - unset X-Powered-By
    files_match:
      - regexp: '\.(appcache|atom|bbaw|bmp|crx|css|cur|eot|f4[abpv]|flv|geojson|gif|htc|ico|jpe?g|js|json(ld)?|m4[av]|manifest|map|mp4|oex|og[agv]|opus|otf|pdf|png|rdf|rss|safariextz|svgz?|swf|topojson|tt[cf]|txt|vcard|vcf|vtt|webapp|web[mp]|webmanifest|woff2?|xloc|xml|xpi)$'
        actions:
          - Header unset Content-Security-Policy
          - Header unset X-Frame-Options
          - Header unset X-XSS-Protection
    https:
      certificate_file: /etc/ssl/apache2/jeedom.www.example.net.pem
      certificate_key_file: /etc/ssl/apache2/jeedom.www.example.net.key
O projekcie

This role install and configure Apache2 webserver

Zainstaluj
ansible-galaxy install Turgon37.apache2
Licencja
mit
Pobrania
3.6k
Właściciel
Ingénieur, Informaticien, curieux de nouvelles technologies. Passionné par le libre et l'esprit de communauté