galaxyproject.nginx
nginx
Роль Ansible для установки и управления серверами nginx.
Требования
Эта роль устанавливает nginx через APT на системах Debian, EPEL на Enterprise Linux системах или pkgin на SmartOS. Другие системы и методы установки не поддерживаются.
Переменные роли
Все переменные являются необязательными.
Общая конфигурация
nginx_flavor(по умолчанию:full): пакет nginx для установки (для выбора смотрите метапакетыnginxдля вашей Debian-основанной дистрибуции). В дистрибутивах на основе RedHat это может бытьgalaxy(для "Galaxy nginx", который включает модули загрузки и pam), или любое другое значение для EPEL nginx. Это значение не используется при установках pkgin/SmartOS. Обычно можно использовать TUS, иfullявляется безопасным значением по умолчанию для будущего.nginx_servers: Список шаблоновserver {}(виртуальных хостов) (относительноtemplates/nginx/, к записям файла автоматически добавляется окончание.j2при поиске).nginx_ssl_servers: Похоже наnginx_servers, но устанавливается только если настроен SSL.nginx_conf_http: Настройка произвольных параметров в секцииhttp {}файлаnginx.conf. Это хэш (словарь), где ключи — параметры конфигурации nginx, а значения — значения этих параметров.nginx_default_redirect_uri: При использовании nginx из EPEL включается стандартный виртуальный хост. Эта опция управляет тем, на какой URI должен быть перенаправлен стандартный виртуальный хост. Поддерживаются переменные nginx.nginx_enable_default_server(по умолчанию:true): Включить/отключить стандартный виртуальный хост EPEL.nginx_supervisor: Запуск nginx под супервизором (требуется установка определенных переменных супервизора).nginx_conf_dir(по умолчанию:/etc/nginx): Директория конфигурации nginx.
Конфигурация SSL
Переменные nginx_conf_ssl_certificate* управляют использованием SSL. Если не установлены, SSL не будет включен. См. Пример Playbook для использования.
nginx_conf_ssl_certificate: Имя файла SSL сертификата на удаленном хосте.nginx_conf_ssl_certificate_key: Имя файла закрытого ключа SSL на удаленном хосте.nginx_conf_ssl_ciphers: Опцияssl_ciphersвnginx.conf, это список.nginx_conf_ssl_protocols: Опцияssl_protocolsвnginx.conf, это список.
Внешняя конфигурация SSL
nginx_ssl_role(по умолчанию: не задан): Роль для настройки SSL. Это позволяет использовать (например) usegalaxy_eu.certbot, который обычно должен запускаться после того, как nginx установлен и работает на порту 80, но перед тем как nginx попытается использовать SSL (потому что до запуска certbot сертификаты, ожидаемые nginx, еще не существуют). Установка этой переменной приведет к запуску роли SSL в соответствующий момент. Также см.nginx_ssl_servers.nginx_conf_ssl_certificate: Имя файла SSL сертификата.nginx_conf_ssl_certificate_key: Имя файла закрытого ключа SSL.
В этом режиме переменные nginx_conf_ssl_certificate* должны быть абсолютными путями.
Конфигурация SSL в Playbook
Если nginx_ssl_role не установлен, вы можете использовать эту роль для копирования вашего сертификата и ключа из playbook.
nginx_ssl_conf_dir(по умолчанию:<nginx_conf_dir>/ssl): Куда копировать SSL сертификаты и другие файлы, связанные с SSL.nginx_ssl_src_dir(по умолчанию:files/ssl): Откуда копировать SSL сертификаты.sslkeys: Хэш (словарь), содержащий закрытые ключи. Ключи — имена файлов (без ведущих компонентов пути), соответствующиеnginx_conf_ssl_certificate_key.nginx_conf_ssl_trusted_certificate: Имя файла доверенных сертификатов для OCSP stapling (установка активирует stapling).
В этом режиме переменные nginx_conf_ssl_certificate* должны быть относительными путями. Однако, по историческим причинам, они могут быть абсолютными путями к файлам на удаленном хосте. Если это так, сертификаты ищутся в nginx_ssl_src_dir с обрезанной частью пути к директории. Если путь не абсолютный, он будет относительным к nginx_ssl_src_dir для источника и относительным к nginx_ssl_conf_dir для назначения.
SELinux
Если SELinux находится в режиме принудительного контроля, будут предприняты несколько дополнительных действий:
- Если задано
certbot_well_known_root, оно будет обновлено для разрешения типаhttpd_sys_content_tна всех подкаталогах. nginx_selinux_allow_local_connections(по умолчанию:false): Разрешить nginx соединяться с localhost.
Зависимости
Хотя это не требование, geerlingguy.repo-epel может быть использован для включения EPEL с помощью Ansible.
Пример Playbook
Вот несколько примеров playbook в зависимости от того, откуда вы получаете ваши сертификаты.
Локальные SSL сертификаты
Установите nginx с SSL сертификатами, хранящимися в playbook (сертификат по адресу {{ playbook_dir }}/files/ssl/snakeoil_cert.pem):
- name: Установить и настроить nginx
hosts: webservers
vars:
sslkeys:
snakeoil_privatekey.pem: |
-----BEGIN PRIVATE KEY-----
MIIE...
-----END PRIVATE KEY-----
nginx_conf_ssl_certificate: snakeoil_cert.pem
nginx_conf_ssl_certificate_key: snakeoil_privatekey.pem
nginx_servers:
- vhost1
- vhost2
nginx_conf_http:
client_max_body_size: 1g
roles:
- galaxyproject.nginx
Let's Encrypt
Установите nginx с SSL сертификатами, полученными от Let's Encrypt с Certbot с использованием usegalaxy_eu.certbot:
- name: Установить и настроить nginx
hosts: webservers
vars:
nginx_conf_ssl_certificate: /etc/ssl/certs/fullchain.pem
nginx_conf_ssl_certificate_key: /etc/ssl/private/private.pem
nginx_servers:
- vhost1
- vhost2
nginx_ssl_servers:
- vhost1_ssl
- vhost2_ssl
nginx_conf_http:
client_max_body_size: 1g
nginx_ssl_role: usegalaxy_eu.certbot
certbot_auth_method: --webroot
certbot_domains:
- vhost1.example.org
- vhost2.example.org
certbot_admin_email: [email protected]
certbot_agree_tos: --agree-tos
certbot_well_known_root: /var/www/_well-known_root
certbot_post_renewal: |
systemctl restart nginx || true
roles:
- galaxyproject.nginx
В templates/nginx/vhost1.j2 и templates/nginx/vhost2.j2 обязательно добавьте что-то вроде:
server {
location /.well-known/ {
root {{ certbot_well_known_root }};
}
}
Самоподписанные сертификаты
Установите nginx и используйте сгенерированный самоподписанный SSL сертификат (хороший вариант для тестирования защищенных сервисов за брандмауэром).
- name: Установить и настроить nginx
hosts: webservers
vars:
nginx_servers:
- vhost1
- vhost2
nginx_ssl_servers:
- vhost1_ssl
- vhost2_ssl
nginx_conf_http:
client_max_body_size: 1g
nginx_ssl_role: galaxyproject.self_signed_certs
openssl_domains: # Идентичное поведение к certbot_domains
- vhost1.example.org
- vhost2.example.org
# Эти пути могут быть установлены где угодно, где вы хотите хранить ваши сертификаты и ключи.
nginx_conf_ssl_certificate_key: /etc/ssl/private/{{ openssl_domains[0] }}.pem
nginx_conf_ssl_certificate: /etc/ssl/certs/{{ openssl_domains[0] }}.crt
roles:
- galaxyproject.nginx
Лицензия
Academic Free License ("AFL") v. 3.0
Информация об авторах
ansible-galaxy install galaxyproject.nginx