ansible_role_nginx
Ansible Роль: Nginx
Примечание: Рекомендуем использовать официальную Ansible роль NGINX от NGINX, Inc.
Устанавливает Nginx на серверах RedHat/CentOS, Debian/Ubuntu, Archlinux, FreeBSD или OpenBSD.
Эта роль устанавливает и настраивает последнюю версию Nginx из репозитория Nginx yum (на системах на основе RedHat), apt (на системах на основе Debian), pacman (Archlinux), pkgng (на системах FreeBSD) или pkg_add (на системах OpenBSD). Вам, вероятно, потребуется выполнить дополнительную настройку после установки Nginx, например, добавить свой файл [virtualhost].conf в /etc/nginx/conf.d/
, описывающий местоположение и параметры для вашего конкретного сайта.
Требования
Нет.
Переменные роли
Доступные переменные перечислены ниже вместе с значениями по умолчанию (см. defaults/main.yml
):
nginx_vhosts: []
Список определений vhost (серверных блоков) для виртуальных хостов Nginx. Каждый элемент создаст отдельный конфигурационный файл с именем server_name
. Если оставить пустым, вам потребуется предоставить свою конфигурацию виртуального хоста. Ознакомьтесь с закомментированным примером в defaults/main.yml
для доступных параметров сервера. Если требуется большое количество настроек для ваших определений сервера, вам, вероятно, лучше управлять конфигурационным файлом vhost самостоятельно, оставив эту переменную равной []
.
nginx_vhosts:
- listen: "443 ssl http2"
server_name: "example.com"
server_name_redirect: "www.example.com"
root: "/var/www/example.com"
index: "index.php index.html index.htm"
error_page: ""
access_log: ""
error_log: ""
state: "present"
template: "{{ nginx_vhost_template }}"
filename: "example.com.conf"
extra_parameters: |
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
Пример полностью заполненной записи nginx_vhosts с использованием |
для объявления блока синтаксиса для extra_parameters
.
Обратите внимание на отступы в приведенном выше блоке. Первая строка должна иметь обычный отступ в 2 пробела. Все остальные строки должны быть отступлены относительно этой строки. В сгенерированном файле весь блок будет иметь отступ в 4 пробела. Этот стиль обеспечит правильный отступ конфигурационного файла.
- listen: "80"
server_name: "example.com www.example.com"
return: "301 https://example.com$request_uri"
filename: "example.com.80.conf"
Пример вторичного vhost, который будет перенаправлять на уже показанный выше.
Примечание: значение filename
по умолчанию устанавливается в первое доменное имя в server_name
. Если у вас есть два vhosts с одним и тем же доменом, например перенаправление, вам нужно вручную установить filename
, чтобы второй не переопределял первый.
nginx_remove_default_vhost: false
Указывает, нужно ли удалять конфигурацию 'default' виртуального хоста, предоставляемую Nginx. Это полезно, если вы хотите, чтобы основной URL /
вел на один из ваших собственных виртуальных хостов, настроенных в отдельном .conf файле.
nginx_upstreams: []
Если вы настраиваете Nginx как балансировщик нагрузки, вы можете определить один или несколько наборов upstream с помощью этой переменной. В дополнение к определению как минимум одного upstream, вам нужно будет сконфигурировать один из ваших серверных блоков для проксирования запросов через определенный upstream (например, proxy_pass http://myapp1;
). См. закомментированный пример в defaults/main.yml
для получения дополнительной информации.
nginx_user: "nginx"
Пользователь, под которым будет работать Nginx. По умолчанию nginx
для RedHat, www-data
для Debian и www
для FreeBSD и OpenBSD.
nginx_worker_processes: "{{ ansible_processor_vcpus|default(ansible_processor_count) }}"
nginx_worker_connections: "1024"
nginx_multi_accept: "off"
nginx_worker_processes
должен быть установлен в количество ядер на вашем компьютере (если значение по умолчанию неверно, найдите это число с помощью grep processor /proc/cpuinfo | wc -l
). nginx_worker_connections
— это количество соединений на процесс. Установите это значение выше, чтобы обрабатывать больше одновременных соединений (и помните, что соединение будет использоваться в течение времени ожидания keepalive для каждого клиента!). Вы можете установить nginx_multi_accept
в on
, если хотите, чтобы Nginx принимал все соединения немедленно.
nginx_error_log: "/var/log/nginx/error.log warn"
nginx_access_log: "/var/log/nginx/access.log main buffer=16k"
Настройка стандартных журналов ошибок и доступа. Установите в off
, чтобы полностью отключить журнал.
nginx_sendfile: "on"
nginx_tcp_nopush: "on"
nginx_tcp_nodelay: "on"
Опции соединения TCP. См. этот блог для получения дополнительной информации по этим директивам.
nginx_keepalive_timeout: "65"
nginx_keepalive_requests: "100"
Настройки keepalive Nginx. Тайм-аут должен быть установлен выше (10 секунд и более), если у вас больше трафика в стиле опроса (особенно сайты с AJAX), или ниже (менее 10 секунд), если у вас сайт, где большинство пользователей посещают несколько страниц и не отправляют дальнейшие запросы.
nginx_server_tokens: "on"
Настройки server_tokens Nginx. Управляет тем, отвечает ли Nginx с своей версией в HTTP заголовках. Установите в "off"
, чтобы отключить.
nginx_client_max_body_size: "64m"
Это значение определяет максимальный размер загрузки файла, так как загрузки проходят через Nginx перед попаданием на бэкенд, такой как php-fpm
. Если вы получаете ошибку client intended to send too large body
, это значит, что это значение установлено слишком низко.
nginx_server_names_hash_bucket_size: "64"
Если у вас много имен серверов или очень длинные имена серверов, вы можете получить ошибку Nginx при запуске, требующую увеличения этого значения.
nginx_proxy_cache_path: ""
Устанавливается как директива proxy_cache_path
в файле nginx.conf
. По умолчанию это не будет настроено (если оставить пустой строкой), но если вы хотите использовать Nginx как обратный прокси, вы можете установить это в допустимое значение (например, "/var/cache/nginx keys_zone=cache:32m"
), чтобы использовать кэш Nginx (дальнейшая конфигурация прокси может быть выполнена в индивидуальных серверных конфигурациях).
nginx_extra_http_options: ""
Дополнительные строки, которые будут вставлены в верхнем уровне блока http
в nginx.conf
. Значение должно быть определено буквально (как вы бы вставили его напрямую в nginx.conf
, соблюдая синтаксис конфигурации Nginx - такие как ;
для завершения строки и т. д.), например:
nginx_extra_http_options: |
proxy_buffering off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
См. шаблон в templates/nginx.conf.j2
для более подробной информации о размещении.
nginx_extra_conf_options: ""
Дополнительные строки, которые будут вставлены в верхней части nginx.conf
. Значение должно быть определено буквально (как вы бы вставили его напрямую в nginx.conf
, соблюдая синтаксис конфигурации Nginx - такие как ;
для завершения строки и т. д.), например:
nginx_extra_conf_options: |
worker_rlimit_nofile 8192;
См. шаблон в templates/nginx.conf.j2
для более подробной информации о размещении.
nginx_log_format: |
'$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
Настройка log_format
Nginx.
nginx_default_release: ""
(Только для Debian/Ubuntu) Позволяет установить другой репозиторий для установки Nginx. Например, если вы используете выпуск Debian wheezy и хотите получить более новую версию Nginx, вы можете установить репозиторий wheezy-backports
и установить это значение здесь, и Ansible будет использовать его в качестве опции -t
при установке Nginx.
nginx_ppa_use: false
nginx_ppa_version: stable
(Только для Ubuntu) Позволяет использовать официальный PPA Nginx вместо системного пакета. Вы можете установить версию на stable
или development
.
nginx_yum_repo_enabled: true
(Только для RedHat/CentOS) Установите это значение в false
, чтобы отключить установку репозитория nginx
yum. Это может быть необходимо, если вы хотите использовать стандартные стабильные пакеты ОС, или если вы используете Satellite.
Переопределение шаблонов конфигурации
Если вы не можете настроить с помощью переменных, потому что опция не доступна, вы можете переопределить шаблон, используемый для генерации конфигурационных файлов виртуальных хостов или файла nginx.conf
.
nginx_conf_template: "nginx.conf.j2"
nginx_vhost_template: "vhost.j2"
При необходимости вы также можете установить шаблон для каждого vhost индивидуально.
nginx_vhosts:
- listen: "80 default_server"
server_name: "site1.example.com"
root: "/var/www/site1.example.com"
index: "index.php index.html index.htm"
template: "{{ playbook_dir }}/templates/site1.example.com.vhost.j2"
- server_name: "site2.example.com"
root: "/var/www/site2.example.com"
index: "index.php index.html index.htm"
template: "{{ playbook_dir }}/templates/site2.example.com.vhost.j2"
Вы можете либо скопировать и изменить предоставленный шаблон, либо расширить его с помощью наследования шаблонов Jinja2 и переопределить конкретный блок шаблона, который вам нужно изменить.
Пример: Настройка gzip в конфигурации nginx
Установите nginx_conf_template
, чтобы указать файл шаблона в вашей директории playbook.
nginx_conf_template: "{{ playbook_dir }}/templates/nginx.conf.j2"
Создайте дочерний шаблон по указанному пути и расширьте файл шаблона geerlingguy.nginx
, относительный к вашему playbook.yml
.
{% extends 'roles/geerlingguy.nginx/templates/nginx.conf.j2' %}
{% block http_gzip %}
gzip on;
gzip_proxied any;
gzip_static on;
gzip_http_version 1.0;
gzip_disable "MSIE [1-6]\.";
gzip_vary on;
gzip_comp_level 6;
gzip_types
text/plain
text/css
text/xml
text/javascript
application/javascript
application/x-javascript
application/json
application/xml
application/xml+rss
application/xhtml+xml
application/x-font-ttf
application/x-font-opentype
image/svg+xml
image/x-icon;
gzip_buffers 16 8k;
gzip_min_length 512;
{% endblock %}
Зависимости
Нет.
Пример плейбука
- hosts: server
roles:
- { role: geerlingguy.nginx }
Лицензия
MIT / BSD
Информация об авторе
Эта роль была создана в 2014 году Джеффом Гирлингом, автором Ansible для DevOps.
Nginx installation for Linux, FreeBSD and OpenBSD.
ansible-galaxy install Shir0kamii/ansible-role-nginx