nginx
Ansible Роль: Nginx
Примечание: Пожалуйста, подумайте о том, чтобы использовать официальную Ansible роль NGINX от компании NGINX, Inc.
Устанавливает Nginx на серверы RedHat/CentOS, Debian/Ubuntu, Archlinux, FreeBSD или OpenBSD.
Эта роль устанавливает и настраивает последнюю версию Nginx из yum репозитория Nginx (на системах на базе RedHat), apt (на системах на базе Debian), pacman (Archlinux), pkgng (на системах FreeBSD) или pkg_add (на системах OpenBSD). Вероятно, вам будет нужно сделать дополнительную настройку после установки Nginx, например, добавить свой собственный файл [virtualhost].conf в папку /etc/nginx/conf.d/
, в котором будет описано местоположение и параметры, которые нужно использовать для вашего конкретного веб-сайта.
Требования
Отсутствуют.
Переменные роли
Доступные переменные перечислены ниже, вместе со значениями по умолчанию (см. defaults/main.yml
):
nginx_listen_ipv6: true
Указывает, следует ли слушать на IPv6 (применяется ко всем виртуальным хостам, управляемым этой ролью).
nginx_selfsigned_certificate_directory: /etc/nginx/ssl
nginx_selfsigned_certificate_privkey: "{{ nginx_selfsigned_certificate_directory }}/privkey.pem"
nginx_selfsigned_certificate_fullchain: "{{ nginx_selfsigned_certificate_directory }}/fullchain.pem"
nginx_selfsigned_certificate_csr: "{{ nginx_selfsigned_certificate_directory }}/cert.csr"
Переменные, которые определяют, где должен быть создан самоподписанный сертификат. Он будет использоваться в catchall-vhost
и в качестве замены для отсутствующих сертификатов в конфигурации nginx-vhost
.
nginx_copy_missing_certs: yes
Указывает, должна ли роль копировать самоподписанные сертификаты для виртуальных хостов.
nginx_vhosts: []
Список определений виртуальных хостов (серверных блоков) для виртуальных хостов Nginx. Каждая запись создаст отдельный конфигурационный файл с именем, указанным в name
. Если оставить пустым, вам нужно будет предоставить собственную конфигурацию виртуального хоста. См. закомментированный пример в defaults/main.yml
для доступных параметров сервера. Если у вас есть много пользовательских настроек для ваших определений серверов, вам лучше управлять файлом конфигурации виртуального хоста самостоятельно, оставив эту переменную установленной на []
. Поскольку я в основном пишу на Django, я создал шаблон django-vhost.j2
с возможностью его расширения с помощью механизма сниппетов.
nginx_vhosts:
- name: localhost-django
server_names:
- "localhost"
upstreams:
- name: local
server: localhost:8000
template: django-vhost.j2
extra_static_roots:
- location: "/www/"
root: /var/
snippets:
- location: "~* /static/(.*\\.)(js|css)"
expiries: 365d
alias: "/var/www/static/$1$2"
template: cache.j2
- location: "/"
upstream: "local"
template: "proxy.j2"
enable_https: true
static_root: /var/www/static/
media_root: /var/www/media/
certificate: /etc/letsencrypt/live/localhost/fullchain.pem
private_key: /etc/letsencrypt/live/localhost/privkey.pem
В этом примере, если отсутствует сертификат по указанному пути, он будет скопирован из nginx_selfsigned_certificate_directory
. Это обеспечит правильный запуск Nginx, но вам, вероятно, нужно будет предоставить действительный сертификат самостоятельно.
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
, чтобы отключить установку yum репозитория nginx
. Это может быть необходимо, если вы хотите стабильные пакеты ОС по умолчанию или если вы используете Satellite.
nginx_service_state: started
nginx_service_enabled: yes
По умолчанию эта роль будет гарантировать, что Nginx работает и включен при загрузке после его настройки. Вы можете использовать эти переменные, чтобы переопределить это поведение, если устанавливаете в контейнере или если требуется более строгий контроль состояния службы.
Переопределение конфигурационных шаблонов
Если вы не можете настроить через переменные, так как опция не открыта, вы можете переопределить шаблон, используемый для генерации файлов конфигурации виртуального хоста или файла nginx.conf
.
nginx_conf_template: "nginx.conf.j2"
nginx_catchall_template: "default-catchall.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
, чтобы указать файл шаблона в вашей папке playbook.
nginx_conf_template: "{{ playbook_dir }}/templates/nginx.conf.j2"
Создайте дочерний шаблон по пути, который вы указали выше, и расширьте файл шаблона nekeal.nginx
относительно вашего playbook.yml
.
{% extends 'roles/nekeal.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: nekeal.nginx }
Лицензия
MIT / BSD
Информация об авторе
Эта роль была создана в 2014 году Джеффом Гирлингом, автором Ansible for DevOps.
Nginx installation for Linux, FreeBSD and OpenBSD.
ansible-galaxy install nekeal/ansible-role-nginx