infra_nginx

Nginx

Ansible Роль - Вебсервер Nginx

Ansible роль для развертывания одного или нескольких сайтов NGINX на Linux сервере.

Купите мне кофе

Molecule Test Status YamlLint Test Status PyLint Test Status Ansible-Lint Test Status Ansible Galaxy

Логи 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
Лицензия
other
Загрузки
4116
Владелец
[email protected] | GPG: https://badges.ansibleguy.net/public.gpg