nginx
sbog/nginx
Эта роль устанавливает и настраивает веб-сервер nginx. Пользователь может задать любые параметры конфигурации http, которые он хочет применить к своему сайту. Можно добавить любое количество сайтов с конфигурациями на ваш выбор.
Требования
Эта роль требует Ansible 2.4 или выше, а требования к платформе указаны в файле метаданных. (Некоторые старые версии роли поддерживают Ansible 1.4) Для FreeBSD требуется рабочая установка pkgng (см. https://www.freebsd.org/doc/handbook/pkgng-intro.html) Установка агента Nginx Amplify поддерживается только на дистрибутивах CentOS, RedHat, Amazon, Debian и Ubuntu.
Установка
ansible-galaxy install sorrowless.nginx
Переменные роли
Переменные, которые могут быть переданы этой роли и их краткое описание следующие. (Для всех переменных посмотрите defaults/main.yml)
# Пользователь для запуска nginx
nginx_user: "www-data"
# Список директив для секции событий.
nginx_events_params:
- worker_connections 512
- debug_connection 127.0.0.1
- use epoll
- multi_accept on
# Список хешей, которые определяют серверы для nginx,
# как и параметры http. Здесь можно задать любые допустимые параметры сервера.
nginx_sites:
default:
- listen 80
- server_name _
- root "/usr/share/nginx/html"
- index index.html
foo:
- listen 8080
- server_name localhost
- root "/tmp/site1"
- location / { try_files $uri $uri/ /index.html; }
- location /images/ { try_files $uri $uri/ /index.html; }
bar:
- listen 9090
- server_name ansible
- root "/tmp/site2"
- location / { try_files $uri $uri/ /index.html; }
- location /images/ {
try_files $uri $uri/ /index.html;
allow 127.0.0.1;
deny all;
}
# Список хешей, которые определяют дополнительную конфигурацию
nginx_configs:
proxy:
- proxy_set_header X-Real-IP $remote_addr
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
upstream:
- upstream foo { server 127.0.0.1:8080 weight=10; }
geo:
- geo $local {
default 0;
127.0.0.1 1;
}
gzip:
- gzip on
- gzip_disable msie6
# Список хешей, которые определяют фрагменты конфигурации
nginx_snippets:
error_pages:
- error_page 500 /http_errors/500.html
- error_page 502 /http_errors/502.html
- error_page 503 /http_errors/503.html
- error_page 504 /http_errors/504.html
# Список хешей, которые определяют файлы пользователя/пароля
nginx_auth_basic_files:
demo:
- foo:$apr1$mEJqnFmy$zioG2q1iDWvRxbHuNepIh0 # foo:demo , сгенерировано: htpasswd -nb foo demo
- bar:$apr1$H2GihkSo$PwBeV8cVWFFQlnAJtvVCQ. # bar:demo , сгенерировано: htpasswd -nb bar demo
# Включить Real IP для запросов CloudFlare
nginx_set_real_ip_from_cloudflare: True
# Включить Nginx Amplify
nginx_amplify: true
nginx_amplify_api_key: "ваш_ключ_api_здесь"
nginx_amplify_update_agent: true
# Определите модули для включения в конфигурацию
#
# Nginx, установленный через EPEL и APT репозитории, также автоматически установит некоторые модули.
# Для использования официального репозитория Nginx вам потребуется установить пакеты модулей вручную.
#
# При использовании с EPEL и APT репозиториями, укажите этот раздел в виде списка файлов конфигурации,
# без расширения .conf.
# При использовании официального репозитория Nginx, укажите этот раздел как список имен файлов модуля,
# без расширения .so.
#
# Доступные конфигурационные файлы модуля в EPEL и APT репозиториях:
# (APT на самом деле имеет несколько дополнительных, см. https://wiki.debian.org/Nginx/)
# - mod-http-geoip
# - mod-http-image-filter
# - mod-http-perl
# - mod-http-xslt-filter
# - mod-mail
# - mod-stream
#
# Доступные имена файлов модулей в официальном репозитории NGINX:
# - ngx_http_geoip_module
# - ngx_http_image_filter_module
# - ngx_http_perl_module
# - ngx_http_xslt_filter_module
# - ngx_http_js_module
#
# Пользовательские скомпилированные модули также допустимы, если .so файл находится в том же месте, что и упакованный модуль:
# - ngx_http_modsecurity_module
#
nginx_module_configs:
- mod-http-geoip
Примеры
1) Установить nginx с выбранными директивами HTTP, но без сконфигурированных сайтов и дополнительной конфигурации:
- hosts: all
roles:
- {role: nginx,
nginx_http_params: ["sendfile on", "access_log /var/log/nginx/access.log"]
}
2) Установить nginx с различными директивами HTTP, чем в предыдущем примере, но без
сайтов и дополнительной конфигурации.
- hosts: all
roles:
- {role: nginx,
nginx_http_params: ["tcp_nodelay on", "error_log /var/log/nginx/error.log"]}
Примечание: Пожалуйста, убедитесь, что переданные директивы HTTP являются действительными, так как эта роль не проверяет их правильность. Смотрите документацию nginx для подробностей.
3) Установить nginx и добавить сайт в конфигурацию.
- hosts: all
roles:
- role: nginx
nginx_http_params:
- sendfile "on"
- access_log "/var/log/nginx/access.log"
nginx_sites:
bar:
- listen 8080
- location / { try_files $uri $uri/ /index.html; }
- location /images/ { try_files $uri $uri/ /index.html; }
nginx_configs:
proxy:
- proxy_set_header X-Real-IP $remote_addr
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
4) Установить nginx и добавить дополнительные переменные в стандартную конфигурацию
- hosts: all
vars:
- my_extra_params:
- client_max_body_size 200M
# сохранить стандартные параметры и добавить дополнительный параметр `client_max_body_size`
roles:
- role: sorrowless.nginx
nginx_http_params: "{{ nginx_http_default_params + my_extra_params }}"
Примечание: Каждый добавленный сайт представлен списком хешей, а сгенерированные конфигурации заполняются в /etc/nginx/site-available/ и ссылаются из /etc/nginx/site-enable/ на /etc/nginx/site-available.
Имя файла для конкретной конфигурации сайта указывается в хеше с ключом "file_name", любые допустимые директивы сервера могут быть добавлены в хеш. Дополнительные конфигурации создаются в /etc/nginx/conf.d/
5) Установить Nginx, добавить 2 сайта (другой метод) и добавить дополнительную конфигурацию
---
- hosts: all
roles:
- role: nginx
nginx_http_params:
- sendfile on
- access_log /var/log/nginx/access.log
nginx_sites:
foo:
- listen 8080
- server_name localhost
- root /tmp/site1
- location / { try_files $uri $uri/ /index.html; }
- location /images/ { try_files $uri $uri/ /index.html; }
bar:
- listen 9090
- server_name ansible
- root /tmp/site2
- location / { try_files $uri $uri/ /index.html; }
- location /images/ { try_files $uri $uri/ /index.html; }
nginx_configs:
proxy:
- proxy_set_header X-Real-IP $remote_addr
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
6) Установить Nginx, добавить 2 сайта, добавить дополнительную конфигурацию и блок конфигурации upstream
---
- hosts: all
roles:
- role: nginx
nginx_error_log_level: info
nginx_http_params:
- sendfile on
- access_log /var/log/nginx/access.log
nginx_sites:
foo:
- listen 8080
- server_name localhost
- root /tmp/site1
- location / { try_files $uri $uri/ /index.html; }
- location /images/ { try_files $uri $uri/ /index.html; }
bar:
- listen 9090
- server_name ansible
- root /tmp/site2
- if ( $host = example.com ) { rewrite ^(.*)$ http://www.example.com$1 permanent; }
- location / {
try_files $uri $uri/ /index.html;
auth_basic "Restricted";
auth_basic_user_file auth_basic/demo;
}
- location /images/ { try_files $uri $uri/ /index.html; }
nginx_configs:
proxy:
- proxy_set_header X-Real-IP $remote_addr
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
upstream:
# В результате будет:
# upstream foo_backend {
# server 127.0.0.1:8080 weight=10;
# }
- upstream foo_backend { server 127.0.0.1:8080 weight=10; }
nginx_auth_basic_files:
demo:
- foo:$apr1$mEJqnFmy$zioG2q1iDWvRxbHuNepIh0 # foo:demo , сгенерировано: htpasswd -nb foo demo
- bar:$apr1$H2GihkSo$PwBeV8cVWFFQlnAJtvVCQ. # bar:demo , сгенерировано: htpasswd -nb bar demo
7) Установить Nginx, добавить сайт и использовать специальный синтаксис yaml для упрощения многострочных блоков location
---
- hosts: all
roles:
- role: nginx
nginx_http_params:
- sendfile on
- access_log /var/log/nginx/access.log
nginx_sites:
foo:
- listen 443 ssl
- server_name foo.example.com
- set $myhost foo.example.com
- |
location / {
proxy_set_header Host foo.example.com;
}
- |
location ~ /v2/users/.+?/organizations {
if ($request_method = PUT) {
set $myhost bar.example.com;
}
if ($request_method = DELETE) {
set $myhost bar.example.com;
}
proxy_set_header Host $myhost;
}
8) Пример использования этой роли с моей ролью ssl-certs для генерации или копирования ssl сертификата (https://galaxy.ansible.com/sorrowless/ssl-certs)
- hosts: all
roles:
- jdauphant.ssl-certs
- role: sorrowless.nginx
nginx_configs:
ssl:
- ssl_certificate_key {{ssl_certs_privkey_path}}
- ssl_certificate {{ssl_certs_cert_path}}
nginx_sites:
default:
- listen 443 ssl
- server_name _
- root "/usr/share/nginx/html"
- index index.html
9) Конфигурация сайта с использованием пользовательского шаблона.
Вместо определения конфигурационного файла сайта с помощью списка атрибутов,
вы можете использовать хеш/словарь, который включает имя файла альтернативного шаблона.
Дополнительные значения доступны в шаблоне через переменную item.value
.
- hosts: all
roles:
- role: nginx
nginx_sites:
custom_bar:
template: custom_bar.conf.j2
server_name: custom_bar.example.com
Пользовательский шаблон: custom_bar.conf.j2:
# {{ ansible_managed }}
upstream backend {
server 10.0.0.101;
}
server {
server_name {{ item.value.server_name }};
location / {
proxy_pass http://backend;
}
}
Использование пользовательского шаблона позволяет неограниченную гибкость в настройке конфигурационного файла сайта. Этот пример демонстрирует общую практику конфигурации блока сервера сайта в том же файле, что и его сопутствующий блок upstream. Если вы используете этот вариант:
- Хеш должен включать значение
template:
, в противном случае задача конфигурации не выполнится. - Эта роль не может проверить правильность вашего пользовательского шаблона. Если вы используете этот метод, форматирование конфигурационного файла, предоставленное этой ролью, недоступно, и вам необходимо предоставить шаблон с допустимым содержанием и форматированием для NGINX.
10) Установить Nginx, добавить 2 сайта и использовать фрагменты для настройки контроля доступа
---
- hosts: all
roles:
- role: nginx
nginx_http_params:
- sendfile on
- access_log /var/log/nginx/access.log
nginx_snippets:
accesslist_devel:
- allow 192.168.0.0/24
- deny all
nginx_sites:
foo:
- listen 8080
- server_name localhost
- root /tmp/site1
- include snippets/accesslist_devel.conf
- location / { try_files $uri $uri/ /index.html; }
- location /images/ { try_files $uri $uri/ /index.html; }
bar:
- listen 9090
- server_name ansible
- root /tmp/site2
- location / { try_files $uri $uri/ /index.html; }
- location /images/ { try_files $uri $uri/ /index.html; }
Зависимости
Нет
Лицензия
BSD
Информация об авторе
- Оригинал : Benno Joy
- Модифицировано : DAUPHANT Julien
- Переработано : Stan Bogatkin
ansible-galaxy install sorrowless/ansible_nginx