apache2

Роль Ansible Apache2

Статус сборки Лицензия Ansible Role

Описание

:grey_exclamation: Прежде чем использовать эту роль, пожалуйста, имейте в виду, что все мои роли Ansible полностью написаны и адаптированы к моей IT-инфраструктуре. Поэтому, даже если они максимально универсальны, они не обязательно удовлетворят ваши нужды. Я рекомендую внимательно проанализировать, что они делают, и оценить их возможность безопасной установки на ваших серверах.

Эта роль настраивает экземпляр демона Apache2.

Требования

Требуется Ansible >= 2.4

Зависимости

Если вы используете профиль мониторинга Zabbix, вам понадобится роль ansible-zabbix-agent

Семейство ОС

Эта роль доступна для Debian

Возможности

На данный момент роль может использоваться для:

  • установки Apache2
  • настройки основного файла сервера
  • создания конфигураций виртуальных хостов
  • управления включенными модулями
  • переопределения конфигураций некоторых модулей
  • мониторинга элементов для
    • Zabbix
  • локальных фактов

Конфигурация

Сервер

Все переменные, которые можно переопределить, хранятся в файле defaults/main.yml, а также в таблице ниже. Для просмотра значений по умолчанию, обращайтесь к этому файлу.

Название Описание
apache2__version Выберите версию apache2 для установки (как доступно в репозиториях ОС) Пример: 2.4.25-3+deb9u5
apache2__service_enabled Логическое значение, включающее или выключающее службу apache при запуске и во время работы
apache2__service_restartable Если true, служба apache будет автоматически перезапущена при изменении конфигурации (в продакшене лучше установить false)
apache2__server_tokens Настройте уровень детализации токена сервера на страницах ошибок
apache2__server_signature Указывать или не указывать подпись сервера на страницах ошибок
apache2__trace_enable Настройка метода HTTP TRACE
apache2__ssl_ciphers Список доступных SSL шифров, по умолчанию только рекомендованный подмножество настроено
apache2__ssl_protocols Список включенных SSL протоколов, по умолчанию все, кроме SSL 2/3
apache2__ssl_honorciphers Сообщает серверу предпочитать свой порядок шифрования вместо клиентского
apache2__log_formats Словарь, содержащий все доступные форматы логов в apache.
apache2__listen_http Список порт/хост:порт, на которых apache будет слушать http-запросы
apache2__listen_https Список порт/хост:порт, на которых apache будет слушать https-запросы

Замечание о apache2__listen_http(s): в данный момент эти директивы заполняются вручную, я планировал сгенерировать их автоматически, но это оказалось сложно, потому что виртуальные хосты можно определять с помощью include_role.

Следующая переменная применяется к серверу и может быть переопределена в каждом виртуальном хосте:

Название Описание
apache2__serveradmin Опциональный адрес электронной почты администратора
apache2__allow_override_list Директива AllowOverrideList
apache2__allow_override Директива AllowOverride
apache2__options Директива Options

Чтобы настроить, какие модули включены, нужно указать все названия модулей в одном из следующих трех списков:

  • apache2__modules_enabled_global
  • apache2__modules_enabled_group
  • apache2__modules_enabled_host

По умолчанию ни один модуль не включен, поэтому имейте в виду, что apache не запустится без включенного модуля mpm. Каждая запись в этих списках должна содержать имя модуля. Если у модуля есть файлы .conf и .load, они будут автоматически включены. Кроме того, если роль содержит файл шаблона в директории templates/modules.conf/(имя модуля), он заменит любой существующий файл конфигурации дистрибутива.

Виртуальные хосты

Каждый виртуальный хост должен быть объявлен с помощью блока vhost. Вы можете поместить блок vhost в любой из трех доступных списков:

  • apache2__virtual_hosts_global
  • apache2__virtual_hosts_group
  • apache2__virtual_hosts_host

По умолчанию каждый виртуальный хост слушает на '*' и на порту по умолчанию, определяемом согласно статусу HTTP(S). Если SSL Engine включен ('ON'), используется порт 443, в противном случае - 80.

Только подмножество директив и секций apache2 реализовано в ansible, доступные из них можно увидеть в файлах directives sections. Если вам нужна директива, которая не реализована, вы можете использовать элемент extra_parameters. Однако, если секция отсутствует, вам нужно создать свою версию и реализовать ее в роли.

Каждый блок vhost должен быть помещен в словарь, где ключ будет именем файла конфигурации vhost. Затем каждый vhost должен быть словарем, который может содержать следующие переменные:

Название Тип Описание
hosts строка или массив строк/слов список интерфейсов, на которых будет слушать виртуальный хост
hosts[] строка если элемент списка hosts является строкой, он будет интерпретироваться как "IP:PORT" или "X.X.X.X:X"
hosts[].ip строка если элемент списка hosts является словарем с ключом 'ip', он будет интерпретироваться как "IP"
hosts[].port целое число если элемент списка hosts является словарем с ключом 'port', он будет использоваться как порт для прослушивания. Если этот ключ не установлен, он будет выведен из HTTP-протокола (см. выше)
server_name строка хост виртуального хоста
server_alias строка псевдоним имени хоста
server_admin строка опциональный адрес электронной почты администратора
document_root строка Путь к корневой папке документов. Эта папка будет автоматически создана, потому что Apache не запустится, если ее не будет.
document_root_user строка Unix-владелец корневой папки документов. Это применяется только если переменная определена
document_root_group строка Unix-группа корневой папки документов. Это применяется только если переменная определена
document_root_mode строка Unix-режим корневой папки документов. Это применяется только если переменная определена. Убедитесь, что apache все еще имеет доступ к этой папке хотя бы в режиме только для чтения
error_log строка Путь к файлу журнала ошибок. Файл журнала ошибок будет создан в этой директории, поэтому убедитесь, что у apache достаточно прав доступа
error_log_user строка Unix-владелец директории журнала ошибок
error_log_group строка Unix-группа директории журнала ошибок
allow_override строка Директива AllowOverride
allow_override_list строка Директива AllowOverrideList
options строка Директива Options
headers массив Массив директив заголовков
files_match массив словарей (см. ниже) Содержит определения FileMatch, каждый из которых должен быть словарем с следующими ключами
files_match[].regexp строка Регулярное выражение, которое вызывает совпадение файла
files_match[].actions массив строк Список директив Apache для выполнения, когда совпадение файла сработает
extra_parameters массив строк Любые дополнительные директивы Apache
https словарь см. ниже для всех подключенных ключей
https.enabled boolean Включен по умолчанию, может использоваться для отключения https и сохранения конфигурационных строк
https.certificate_chain_file строка Путь к цепочке сертификатов
https.verify_client строка Тип проверки сертификатов клиента, который нужно выполнить
https.verify_client_depth целое число Максимальная глубина для проверки сертификатов клиента
https.ca_certificate_path строка Путь к директории сертификатов CA
https.ca_certificate_file строка Путь к файлу сертификата CA
https.crl_path строка Путь к папке CRL
https.crl_file строка Путь к файлу CRL

Факты

По умолчанию локальные факты устанавливаются и показывают следующие переменные:

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

Пример

Плейбук

Используйте его в плейбуке следующим образом:

- hosts: all
  roles:
    - turgon37.apache2

Инвентарь

  • Пример мануально загруженных модулей apache
apache2__modules_enabled_group:
  - access_compat # поддержка устаревших директив Allow, Order
  - alias  # предоставляет Alias
#  - auth_basic  # предоставляет базовую HTTP-аутентификацию
  - authn_core
#  - authn_file  # аутентификация на основе htpasswd
  - authz_core
#  - authz_host  # аутентификация по ip/host
#  - authz_user  # аутентификация по имени пользователя
#  - autoindex  # отключен, индексация отключена
  - deflate # предоставляет Gzip-сжатие
  - dir # предоставляет DirectoryIndex
  - env  # предоставляет SetEnv
#  - filter  # предоставляет FilterChain
  - headers  # предоставляет RequestHeader
  - mime
  - mpm_prefork
  - negotiation # обрабатывает тип контента
  - php7.0
#  - proxy
#  - proxy_http
#  - setenvif
  - ssl  # Обработка SSL
  - socache_shmcb  # требуется для mod_ssl
  • Виртуальный хост по умолчанию для 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'
  • Простой постоянный редирект с HTTP на 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/
  • Проксирование HTTPs на 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
  • HTTP виртуальный хост с корневой папкой и 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:
          # Политика безопасности содержимого (CSP)
          #- set Content-Security-Policy "script-src 'self'; object-src 'self'"
          # Снижение рисков безопасности типов MIME
          - set X-Content-Type-Options "nosniff"
          # Clickjacking
          - set X-Frame-Options "DENY"
          # Отраженные атаки XSS
          - set X-XSS-Protection "1; mode=block"
          - unset X-Powered-By
  • HTTPS виртуальный хост с корневой папкой и 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
О проекте

This role install and configure Apache2 webserver

Установить
ansible-galaxy install Turgon37/ansible-apache2
Лицензия
mit
Загрузки
3537
Владелец
Ingénieur, Informaticien, curieux de nouvelles technologies. Passionné par le libre et l'esprit de communauté