nginx
Ansible Роль: Nginx
Устанавливает 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: []
Список определений виртуальных хостов (серверных блоков) для Nginx. Каждая запись создаст отдельный конфигурационный файл с именем server_name
. Если список пуст, вам нужно будет предоставить свою конфигурацию виртуального хоста. Посмотрите закомментированный пример в defaults/main.yml
для доступных параметров сервера. Если у вас много настроек, требуемых для определения вашего сервера, лучше управлять конфигурацией виртуального хоста самостоятельно, оставив эту переменную установленной на []
.
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"
Пример второго виртуального хоста, который перенаправит на первый.
Примечание: Значение filename
по умолчанию принимает первое доменное имя из server_name
. Если у вас есть два виртуальных хоста с одним и тем же доменом, например, перенаправление, вам необходимо вручную установить filename
, чтобы второй не перекрывал первый.
nginx_remove_default_vhost: false
Удалять ли конфигурацию 'default' виртуального хоста, предустановленную Nginx. Полезно, если вы хотите, чтобы базовый URL /
был направлен на один из ваших собственных виртуальных хостов, настроенных в отдельном .conf файле.
nginx_upstreams: []
Если вы настраиваете Nginx как балансировщик нагрузки, вы можете определить один или несколько наборов 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
- это количество соединений на процесс. Увеличьте значение, чтобы справляться с большим количеством одновременных соединений (учтите, что соединение будет использовано на время, равное максимальному времени ожидания для каждого клиента!). Вы можете установить 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"
Настройки держателя соединения Nginx. Тайм-аут должен быть установлен выше (более 10 секунд), если у вас есть более активный трафик (особенно сайты на AJAX), или ниже (менее 10 секунд), если на вашем сайте пользователи обычно посещают несколько страниц и не отправляют больше запросов.
nginx_server_tokens: "on"
Настройки server_tokens Nginx. Управляет тем, будет ли Nginx отвечать с указанием своей версии в HTTP заголовках. Установите на "off"
, чтобы отключить.
nginx_client_max_body_size: "64m"
Это значение определяет максимальный размер файла, который можно загрузить, так как загрузки проходят через Nginx перед попаданием на бэкенд, такой как php-fpm
. Если вы получаете ошибку вроде клиент намеревался отправить слишком большой объект
, это означает, что это значение установлено слишком низко.
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"
При необходимости вы также можете установить шаблон для каждого виртуального хоста.
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
так, чтобы он указывал на файл шаблона в директории вашего плейбука.
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 for DevOps.
Nginx installation for Linux, FreeBSD and OpenBSD.
ansible-galaxy install gortc/ansible-role-nginx