criecm.nginx

nginx

Веб-сервер nginx с поддержкой множества сайтов для FreeBSD 11, 12 и Debian 9, 10

  • Готовая директория conf.d/
  • Динамические модули в modules.d/*.conf
  • Список сетей proxified_by будет считаться доверенным в качестве обратного прокси
    • Поддержка HTTPS для fastcgi

Возможности

  • nginx на FreeBSD и Debian
  • Дефолтный сервер
  • Мониторинг (по адресу /nginx_status для IP-адресов {monitoring_from})
  • Поддержка syslog при желании

Примеры

Минимальный пример:

- hosts: webhost1
  roles:
    - nginx
  vars:
    sites:
      # создаст пустой сайт, размещенный в /home/mysite/mysite:
      - { id: mysite, name: website.example.org }
      # другой сайт, размещенный в /usr/local/www/other:
      - { id: myothersite, name: othersite.example.org, rootdir: /usr/local/www/other }

Отдельный обратный прокси:

# бэкенд
---
# Конечно, может потребоваться criecm.node, criecm.tomcat, criecm.php-fpm и т.д.
# и содержать много хостов
- hosts: backends
  roles:
    - criecm.nginx
  vars:
    sites:
      - id: myfirstbackend
        name: mfb.example.org
        nginx_includes: 
          - files/mysite/myconf.conf.j2
          - "files/generic/genconf.conf.j2 localname.inc"

# Обратный прокси
- hosts: relays
  roles:
    - criecm.nginx
  vars:
    # хосты для мониторинга (разрешенные для доступа к /nginx_status)
    monitoring_from:
      - 198.51.100.3
      - 2001:DB8:ad31::b0b0:c001

    # будет регистрировать HTTPS от обратного прокси
    proxified_by:
      - 2001:DB8:1ee7::654:3/128
      - 203.0.113.8/32

    sites:
      # этот будет выполнять обратное проксирование, HTTPS и балансировку нагрузки
      # между бэкендами
      - id: mfb-proxy
        name: mfb.example.org
        tls_cert: files/tls/mycert.crt
        tls_key: files/tls/private/mycert.key
        # хотим, чтобы весь http перенаправлялся на https:
        tls_redir: True
        # активировать stapling
        x509_stapling_chain: files/tls/stapling.pem
        # это будет балансировать нагрузку, с поддержкой устойчивых сессий по умолчанию (site.conf.j2)
        backends:
          - http://backend01.example.org
          - http://backend02.example.org
          - http://backend03.example.org
      # этот локальный, http И https
      - id: http_and_https
        name: mfc.example.org
        tls_cert: files/tls/mycert.crt
        tls_key: files/tls/private/mycert.key
        x509_stapling_chain: files/tls/stapling.pem
        # слушать 80 (http) и 443 (https)
        tls_only: no
        rootdir: /home/mfc/site
        index: index.html index.txt

Переменные роли

Глобальные (значения по умолчанию)

  • nginx_processes (1) как в nginx.conf
  • error_loglevel (info)
  • www_default_root (в зависимости от платформы)
  • nginx_log_dir (/var/log/nginx)
  • sites ([]) список словарей сайтов (см. ниже)
  • nginx_status_path ('/nginx_status')
  • monitoring_from ([127.0.0.1])
  • admin_from ([]) IP-адреса/сети, разрешенные для доступа к страницам мониторинга
  • nginx_includes ([]) список шаблонов (или файлов), которые будут включены в http блок (conf.d/)
  • nginx_files ([]) список шаблонов (или файлов) для копирования в директорию конфигурации nginx (для включения в других местах)
  • nginx_modules ([]) модули nginx для явной загрузки (например: ["ngx_http_auth_pam_module","ngx_http_geoip_module"])
  • nginx_mods_includes ([]) список шаблонов для включения перед http блоком (modules.d/)
  • backends ([]) список строк бэкендов для upstream
  • backend ('') если указано, criecm.nginx пропустит это (позвольте другой роли дополнить перед вызовом vhost.yml сама — см. ниже)
  • nginx_debian_package (nginx) Debian пакет для nginx (nginx-full, nginx-lite и т.д.)
  • syslog_server ('') nginx будет записывать ошибки туда
  • syslog_facility (local5):
  • do_local_log (True): сохранить логи локально
  • do_local_access_log (do_local_log): сохраняет журнал доступа локально
  • do_http2 (False) активировать http2 при использовании tls
  • mysite (''): если указано, будет обрабатываться только этот site.id (используйте ansible-playbook ... -e mysite=thisone, где thisone — это id вашего сайта)
  • nginx_default_site ('default') установите в '' чтобы предотвратить установку сайта по умолчанию
  • nginx_aio (off) использовать aio (асинхронный ввод-вывод файлов (AIO) на FreeBSD и Linux) - для больших файлов
  • nginx_sendfile (on) использовать sendfile (mmap файлы)
  • nginx_tcp_nopush (on) использовать tcp_nopush (вы хотите это с sendfile для нулевого копирования)
  • nginx_tcp_nodelay (on) использовать tcp_nodelay (не дожидаться заполнения tcp пакетов)
  • nginx_create_rootdir (True) Может быть установлено в False, если нужно создать rootdir в другом месте
  • nginx_resolvers ({{ ansible_dns.nameservers }}) Список DNS_resolver'ов

Если за обратным прокси

  • proxified_by ([]) список сетей, которым доверяют в качестве обратных прокси:
    • HTTPS ускоритель включен через заголовок X-Forwarded-Proto
    • оригинальный клиентский IP сохранен через модуль realip Может быть переопределено для каждого сайта

Переменные для сайта (site.X)

Обязательные (не будут работать без...)

  • id (нет значения по умолчанию) уникальное (для хоста) короткое имя, используемое повсеместно
  • name (нет значения по умолчанию) DNS-имя

Дополнительные (значения по умолчанию могут подойти)

  • rootdir (/home/{{id}}/{{id}}) корневая директория сайта (код)
  • webroot (rootdir) альтернативная корневая директория, если требуется
  • listen ([80|443]) список портов или ip:port для прослушивания
  • default_index ('index.html index.htm')

Дополнительные (без значения по умолчанию)

  • aliases ([]) серверные алиасы
  • nginx_lines ([]) конфигурационные фрагменты для добавления в конфигурацию сайта
  • nginx_includes файлы или шаблоны, включенные в блок server {} если есть пробел, первая часть - это источник шаблона, а вторая - имя назначения смотрите Места файлов / Шаблонов для пути
  • upstream позволяет исправить имя upstrem (для повторного использования в шаблоне/префиксах)
TLS / HTTP2
  • hsts (31536000 если x509_cert, иначе 0) если > 0, добавить заголовок Strict-Transport-Security
  • tls_redir (False) если True, перенаправить все http запросы на https
  • tls_only (True, если определен tls_key) если установлено в False, прослушивать http И https
  • tls_cert (NODEFAULT) x509 сертификат (с промежуточными сертификатами)
  • tls_key (NODEFAULT) приватный ключ для tls/http2
  • x509_stapling_chain ('') полный CA цепь для stapling (используйте глобальную переменную x509_stapling_chain, если она существует) (от корневого CA до последнего промежуточного)
  • http2 (do_http2) активировать http2 при использовании tls

Места файлов / Шаблонов

Все файлы, соответствующие playbooks/files/{{id}}/nginx/conf.d/*.conf, будут скопированы в директорию conf.d nginx и включены в контекст 'http {}'

Первый файл, найденный в этом списке, будет использован в качестве конфигурации сайта (по каждому сайту)

  • playbooks/templates/{{id}}/site.conf.j2
  • playbooks/files/{{id}}/site.conf
  • playbooks/templates/{{inventory_hostname без последней цифры}}/{{id}}.conf.j2
  • playbooks/files/{{inventory_hostname без последней цифры}}/{{id}}.conf
  • roles/nginx/templates/site.conf.j2

Для файлов includes они будут искаться в (первый совпадение выигрывает):

  • playbooks/templates/{{id}}/nginx/
  • playbooks/files/{{id}}/nginx/
  • playbooks/files/{{inventory_hostname без последней цифры}}/nginx/
  • playbooks/files/{{inventory_hostname без последней цифры}}/nginx/

другие относительные пути (x509_cert и т.д.) будут искать "обычным" образом (https://github.com/ansible/ansible/issues/14341#issuecomment-234559431)

Использование из другой роли

Вы можете напрямую вызвать site.yml следующим образом:

    - include_role:
        name: criecm.nginx
        tasks_from: vhost.yml
      vars:
        vhost: '{{ site }}'

Это уже интегрировано с criecm.php-fpm, если что ;)

О проекте

nginx webserver and sites

Установить
ansible-galaxy install criecm.nginx
Лицензия
Unknown
Загрузки
120
Владелец
Direction des Systèmes d'Information