repleo.nginx
Ansible роль - сервер Nginx
Эта роль устанавливает и настраивает веб-сервер nginx. Пользователь может указать любые параметры конфигурации http, которые он хочет применить к своему сайту. Можно добавить любое количество сайтов с конфигурацией на ваш выбор.
Эта роль поддерживает SSL letsencrypt для легкой установки веб-серверов с https.
Требования
Эта роль требует Ansible версии 1.4 или выше, а требования к платформе указаны в файле метаданных.
Переменные роли
Переменные, которые можно передать в эту роль, и их краткое описание:
# Принудительное создание nginx.conf. Обычно, nginx.conf создается только если он не существует.
# Если этот параметр истинный, он перезапишет текущий nginx.conf
create_nginx_conf: true
# Максимальное количество клиентов
nginx_max_clients: 512
# Хэш параметров http. Обратите внимание, что можно добавить любые
# допустимые параметры http для nginx.
# (см. документацию nginx для подробностей.)
nginx_http_params:
sendfile: "on"
tcp_nopush: "on"
tcp_nodelay: "on"
keepalive_timeout: "65"
access_log: "/var/log/nginx/access.log"
error_log: "/var/log/nginx/error.log"
# Список хэшей, которые определяют серверы для nginx,
# как и с параметрами http. Любые допустимые параметры сервера
# можно определить здесь.
nginx_sites:
- file_name: foo
listen: 8080
server_name: localhost
root: "/tmp/site1"
ssl:
supplier: "local"
local_keystore_dir: "{{ playbook_dir }}/files/"
key: "ssl.key"
certificate: "ssl_chain.pem"
locations:
- name: /
lines:
- "try_files: $uri $uri/ /index.html"
- name: /images/
lines:
- "try_files: $uri $uri/ /index.html"
lines:
- "return 301 https://$http_host$request_uri;"
- file_name: bar
listen: 9090
server_name: ansible
root: "/tmp/site2"
locations:
- name: /
lines:
- "try_files: $uri $uri/ /index.html"
- name: /images/
lines:
- "try_files: $uri $uri/ /index.html"
Примеры
Установить nginx с выбранными HTTP директивами, но без сконфигурированных сайтов:
- hosts: all
roles:
- {role: nginx, create_nginx_conf: true, nginx_http_params: { sendfile: "on", access_log: "/var/log/nginx/access.log"}, nginx_sites: [] }
- hosts: all
roles:
Установить nginx с другими HTTP директивами, чем в предыдущем примере, но без сконфигурированных сайтов.
- hosts: all
roles:
- {role: nginx, create_nginx_conf: true, nginx_http_params: { tcp_nodelay: "on", error_log: "/var/log/nginx/error.log"}, nginx_sites: [] }
- hosts: all
roles:
Примечание: Пожалуйста, убедитесь, что переданные HTTP директивы допустимы, так как эта роль не проверяет их валидность. См. документацию nginx для подробностей.
Установить nginx и добавить сайт в конфигурацию.
hosts: all
roles:
- { role: nginx, create_nginx_conf: true, nginx_http_params: { tcp_nodelay: "on", error_log: "/var/log/nginx/error.log"}, nginx_sites: [ - file_name: bar, server_name: localhost, listen: 8080, locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] ] }
Примечание: Каждый добавленный сайт представлен списком хэшей, а сгенерированные конфигурации расположены в /etc/nginx/sites-available/
и имеют соответствующие символические ссылки в /etc/nginx/sites-enabled/
Имя файла для конкретной конфигурации сайта указывается в хэше с ключом "file_name", любые допустимые директивы сервера можно добавить в хэш.
Установить Nginx и добавить 2 сайта (другой метод)
hosts: all
roles:
- { role: nginx, create_nginx_conf: true, nginx_http_params: { tcp_nodelay: "on", error_log: "/var/log/nginx/error.log"}, nginx_sites: [ - file_name: bar, server_name: localhost, listen: 8080, locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] } - file_name: bar, server_name: ansible, listen: 9090, root: "/tmp/site2", locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] }
Добавить виртуальные хосты в существующую установку Nginx (и при необходимости установить Nginx, если он ещё не установлен)
hosts: all
roles:
- { role: nginx, nginx_sites: [ - file_name: bar, server_name: localhost, listen: 8080, locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] } - file_name: bar, server_name: ansible, listen: 9090, root: "/tmp/site2", locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] ] }
Примечание: без параметра create_nginx_conf: true роль не перезапишет nginx.conf. Эта опция позволяет установить виртуальные хосты в существующую установку nginx на основе этой роли, т.е. скрипты установки для различных сервисов, использующих эту роль.
Пример HTTPS сервера с установкой ключей
hosts: all
roles:
- { role: nginx, nginx_sites: [ - file_name: bar, server_name: localhost, listen: 8080, ssl: { supplier: "local" local_keystore_dir: "{{ playbook_dir }}/files/", key: localhost.key, certificate: localhost_chain.pem }, locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] ] }
Примечание: ssl ключ и сертификат должны быть доступны в проекте, который вызывает эту роль, в директории files.
Пример HTTPS сервера с установкой ключей letsencrypt
hosts: all
roles:
- { role: nginx, nginx_separate_logs_per_site: true, nginx_sites: [ - file_name: bar.ssl, server_name: "example.com www.example.com", listen: 443, ssl: { supplier: "letsencrypt", domains: [ "example.com", "www.example.com" ], generate_redirect: true }, locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] ] }
Обработчики
Роль NGINX предоставляет два обработчика:
- перезагрузить nginx
- перезапустить nginx
Перезагрузка конфигурации nginx позволяет вам обновить веб-сервер без времени простоя. Однако может случиться так, что старые процессы не обновятся. Перезапуск гарантирует, что веб-сервер будет остановлен и запущен снова, что приведет к (короткому) времени простоя.
Пример:
- name: шаблон конфигурационного файла
template: src=template.j2 dest=/etc/foo.conf
notify:
- перезапуск nginx
Зависимости
Нет
Лицензия
BSD
Информация об авторе
Repleo, Амстелвен, Нидерланды -- www.repleo.nl
Jeroen Arnoldus (jeroen@repleo.nl)
Оригинальная версия:
Benno Joy
Ansible role for installing nginx, including support for SSL, letsencrypt and virtual host deployments
ansible-galaxy install repleo.nginx