nginx

Ansible Роль: Nginx

CI

Примечание: Пожалуйста, рассмотрите возможность использования официальной 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_listen_ipv6: true

Настраивает ли Nginx прослушивание IPv6 (применяется ко всем виртуальным хостам, управляемым этой ролью).

nginx_vhosts: []

Список определений виртуальных хостов (блоков серверов) для виртуальных хостов Nginx. Каждая запись создаст отдельный конфигурационный файл, названный по server_name. Если оставить пустым, вам нужно будет предоставить свою конфигурацию виртуального хоста. См. комментируемый пример в defaults/main.yml для доступных параметров сервера. Если вам требуется большое количество настроек для определения вашего сервера, лучше управлять конфигурационным файлом виртуального хоста самостоятельно, оставив эту переменную установленной на [].

Пример полностью заполненной записи 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, вам нужно будет настроить один из ваших блоков серверов на проксирование запросов через определенный 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 flush=2m"

Конфигурация стандартных журналов ошибок и доступа. Установите в 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_zypper_repo_enabled: true

(Только для Suse) Установите это значение в false, чтобы отключить установку репозитория nginx zypper. Это может быть необходимо, если вы хотите использовать стандартные пакеты ОС, или если вы используете Suse Manager.

nginx_service_state: started
nginx_service_enabled: yes

По умолчанию эта роль будет обеспечивать запуск Nginx и его включение при загрузке после настройки Nginx. Вы можете использовать эти переменные, чтобы переопределить это поведение, если устанавливаете в контейнер или требуется больше контроля над состоянием службы.

Переопределение конфигурационных шаблонов

Если вы не можете настроить через переменные, потому что опция не доступна, вы можете переопределить шаблон, используемый для генерации конфигурационных файлов виртуального хоста или файла 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 geerlingguy/ansible-role-nginx
Лицензия
mit
Загрузки
11994675
Владелец
Father, author, developer, maker. Sometimes called "an inflammatory enigma". #stl #drupal #ansible #k8s #raspberrypi #crohns