infra_nginx
Ansible Роль - Вебсервер Nginx
Ansible роль для развертывания одного или нескольких сайтов NGINX на Linux сервере.
Логи Molecule: Короткий, Полный
Проверено на:
- Debian 11
- Debian 12
Установка
# последняя версия
ansible-galaxy role install git+https://github.com/ansibleguy/infra_nginx
# из galaxy
ansible-galaxy install ansibleguy.infra_nginx
# или в пользовательский путь ролей
ansible-galaxy install ansibleguy.infra_nginx --roles-path ./roles
# установка зависимостей
ansible-galaxy install -r requirements.yml
# если хотите использовать базовую аутентификацию: установите зависимости Python
python3 -m pip install -r requirements.txt
Использование
Хотите простой интерфейс Ansible? Ознакомьтесь с моим Ansible WebUI
Конфигурация
Определите словарь nginx по мере необходимости!
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: # целевой прокси по умолчанию - localhost
port: 50000 # целевой порт
cache: # кэширование контента upstream
enable: true
ssl:
mode: 'existing' # предустановленные сертификаты будут скопированы на целевой сервер
security:
# очень простая фильтрация плохих ботов по совпадению 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: # добавьте настройки в виде пары ключ-значение
LimitRequestFields: 10
config_additions: # добавьте список дополнительных строк конфигурации
- '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'
Выполнение
Запустите плейбук:
ansible-playbook -K -D -i inventory/hosts.yml playbook.yml
Чтобы обработать только конкретный сайт: (и сэкономить время)
ansible-playbook -K -D -i inventory/hosts.yml playbook.yml -e only_site=SITE_NAME
# примечание: несколько сайтов можно указать через запятую
Также доступны полезные теги:
- base => только базовая конфигурация; сайты не затрагиваются
- sites
- config => обновить конфигурацию сайта (исключая сертификаты)
- certs
- letsencrypt
- auth
- only_certs (можно использовать как тег пропуска)
Для отладки ошибок - вы можете задать переменную 'debug' во время выполнения:
ansible-playbook -K -D -i inventory/hosts.yml playbook.yml -e debug=yes
Функциональность
Установка пакетов
- Зависимости Ansible (минимальные)
- Nginx
Конфигурация
- Поддержка нескольких сайтов/серверов
- Три режима конфигурации:
- proxy (по умолчанию)
- serve
- redirect
- Поддержка специфических конфигураций с использованием параметров 'config' и 'config_additions'
- Опция фильтрации 'локаций' по GeoIP => СКОРО (:
Конфигурация по умолчанию:
- Отключено: <TLS1.2, небезопасные шифры, autoindex, servertokens
- Заголовки безопасности: HSTS, X-Frame, Referrer-Policy, Content-Type nosniff, X-Domain-Policy, XXS-Protection
- Ограничения для предотвращения DDoS
- Использование самоподписанного сертификата
- HTTP2 включен с возможностью отката на HTTP1.1
- Поддержка IPv6 включена
Режимы SSL (для дополнительной информации смотрите: CERT ROLE)
- selfsigned => Создать самоподписанные сертификаты
- ca => Создать минимальный удостоверяющий центр и сертификат, подписанный им
- letsencrypt => Использует certbot от LetsEncrypt
- existing => Копировать файлы сертификатов или использовать существующие
Опции по умолчанию:
- Ограничение методов до POST/GET/HEAD
- Слушатель страницы состояния на localhost
- Логирование в syslog
- http2
Опции по умолчанию, которые отключены:
- Кэширование в режиме прокси
- Блокировка известных сценариев-ботов
- Блокировка известных плохих краулеров
Информация
Примечание: эта роль в настоящее время поддерживает только системы на базе Debian
Примечание: большинство функционала роли можно включить или отключить.
Для всех доступных опций смотрите конфигурацию по умолчанию в главном/файле по умолчанию для сайта!
Информация: Многие переменные могут быть установлены как в 'глобальном', так и в 'пересайтовом' масштабе.
Конфигурация сайта всегда имеет приоритет над глобальной.
Примечание: Эта роль ожидает, что нешифрованный 'сервер' сайта будет только перенаправлять на его зашифрованное соединение.
Примечание: Если вы хотите, чтобы все доменные имена 'ловились' сайтом/сервером, вам нужно добавить нижнее подчеркивание '_' как псевдоним или домен!
Это также будет сделано автоматически, если домен не указан.Предупреждение: Не каждая настройка/переменная, которую вы предоставляете, будет проверяться на корректность. Плохая конфигурация может сломать роль!
Информация: Чтобы отключить настройки и заголовки по умолчанию => просто установите их значение в: '' (пустая строка)
Информация: Если вы фильтруете веб-запросы через GeoIP фильтр с помощью вашего межсетевого экрана => LetsEncrypt будет работать, если открыт только порт 80 для всего мира.
Запросы, кроме '.well-known/acme-challenge/', просто перенаправлены на 443.
Информация: Для обновления LetsEncrypt вам необходимо разрешить исходящие соединения на:
80/tcp, 443/tcp+udp на acme-v02.api.letsencrypt.org, staging-v02.api.letsencrypt.org (режим отладки) и r3.o.lencr.org
Информация: Эта роль также поддерживает настройку базовой аутентификации.
Для более сложных случаев использования вы можете установить auth_request в
site.config_additions_root
, который может быть использован для реализации OAuth-прокси и т.д.Информация: Вы можете установить флаг
plain_only
, чтобы отключить HTTPS. Это может быть удобно, если вы находитесь за другим прокси-сервером.
Role to configure a nginx webserver in one of three basic config modes: proxy, redirect, server
ansible-galaxy install ansibleguy/infra_nginx