С помощью существующего протокола единого входа OpenID Connect 8 страница
}
После осушения всех подключений используйте API NGINX Plus, что-
бы полностью удалить сервер из восходящего пула:
$ curl -X DELETE \ 'http://nginx.local/api/3/http/upstreams/backend/servers/0'
[]
Команда curl выполняет запрос с методом DELETE на тот же URI, кото- рый использовался для обновления состояния серверов. Метод DELETE дает команду NGINX удалить сервер. Этот API-вызов возвращает все серверы и их идентификаторы, которые по-прежнему остаются в пуле. Поскольку мы начали с пустого пула, добавили только один сервер че- рез API, осушили его и затем удалили, теперь у нас снова есть пустой пул.
5.2. Хранилище типа ключ / значение v 63
Обсуждение
|
См. также:
|
5.2. Хранилище типа ключ/значение
Задача
Вам нужен NGINX Plus для принятия динамических решений по управлению трафиком на основе входных данных из приложений.
|
|
Решение
Настройте хранилище типа ключ/значение, поддерживающее клас- теры и API, а затем добавьте ключи и значения:
keyval_zone zone=blacklist:1M;
keyval $remote_addr $num_failures zone=blacklist;
server {
# ...
location / {
if ($num_failures) {
return 403 'Forbidden';
}
return 200 'OK';
}
}
server {
# ...
# Директивы, ограничивающие доступ к API
64 v Глава 5. Программируемость и автоматизация
# См. главу 6
location /api { api write=on;
}
}
|
keyval отображает значение ключа, соответствующего первому парамет-
|
После запуска сервера NGINX Plus с этой конфигурацией вы можете использовать команду curl и ожидать ответа 200 OK.
$ curl 'http://127.0.0.1/' OK
Теперь добавьте IP-адрес локального компьютера в хранилище типа ключ/значение со значением 1:
$ curl -X POST -d '{"127.0.0.1":"1"}' \
'http://127.0.0.1/api/3/http/keyvals/blacklist'
|
|
Команда curl отправляет запрос с использованием метода POST по протоколу HTTP с объектом JSON, содержащим объект ключ/значение для отправки в зону общей памяти черного списка. URI API-интерфейса хранилища типа ключ/значение форматируется как показано ниже:
/api/{version}/http/keyvals/{httpKeyvalZoneName}
IP-адрес локального компьютера теперь добавлен в зону ключ/значе- ние с именем blacklist со значением 1. В следующем запросе NGINX Plus ищет $remote_addr в зоне ключ/значение, находит запись и отображает значение в переменную $num_failures. Эта переменная затем оценива- ется в операторе if. Когда у переменной есть значение, if оценивается как True, а NGINX Plus возвращает ошибку 403 Forbidden:
$ curl 'http://127.0.0.1/' Forbidden
Вы можете обновить или удалить ключ, сделав запрос с методом PATCH:
5.3. Установка с использованием приложения Puppet v 65
$ curl -X PATCH -d '{"127.0.0.1":null}' \ 'http://127.0.0.1/api/3/http/keyvals/blacklist'
|
Обсуждение
|
|
|
См. также:
https://www.nginx.com/blog/dynamic-bandwidth-limits-nginx-plus-key-value- store/
5.3. Установка с использованием приложения Puppet
Задача
Вам нужно установить и настроить NGINX с использованием Puppet, чтобы управлять конфигурацией NGINX в виде кода и соответствовать остальным конфигурациям Puppet.
Решение
Создайте модуль, который устанавливает NGINX, управляет файла- ми, которые вам нужны, и гарантирует, что NGINX работает:
class nginx {
package {"nginx": ensure => 'installed',}
service {"nginx": ensure => 'true',
hasrestart => 'true',
|
restart => '/etc/init.d/nginx reload',
}
file { "nginx.conf":
path => '/etc/nginx/nginx.conf', require => Package['nginx'], notify => Service['nginx'],
content => template('nginx/templates/nginx.conf.erb'), user=>'root',
group=>'root', mode='0644';
}
}
|
|
|
Обсуждение
Puppet – это инструмент управления конфигурацией на базе языке программирования Ruby. Модули встроены в предметно-ориентиро- ванный язык и вызываются через файл манифеста, который определяет конфигурацию для данного сервера. Puppet может быть запущен в кон- фигурации «ведущий–ведомый» или без ведущего. С Puppet манифест запускается на ведущем устройстве, а затем отправляется на ведомое устройство. Это важно, потому что это гарантирует, что ведомое устрой- ство поставляется только с той конфигурацией, которая предназначена для него, и без дополнительных настроек, предназначенных для дру- гих серверов. Существует множество чрезвычайно развитых общедо- ступных модулей для Puppet. Эти модули помогут вам начать работу с
5.4. Установка с использованием системы Chef v 67
вашей конфигурацией. Общедоступный модуль NGINX из voxpupuli на
|
См. также:
https://puppet.com/docshttps://puppet.com/docs/puppet/latest/types/package.htmlhttps://puppet.com/docs/puppet/latest/types/service.htmlhttps://puppet.com/docs/puppet/latest/types/ fi le.htmlhttps://puppet.com/docs/puppet/latest/lang_template.htmlhttps://github.com/voxpupuli/puppet-nginx
5.4. Установка с использованием системы Chef
Задача
Вам нужно установить и настроить NGINX, используя Chef, чтобы управлять конфигурациями NGINX в виде кода и соответствовать осталь- ным конфигурациям Chef.
Решение
Создайте кулинарную книгу с рецептом установки NGINX, настрой- те файлы конфигурации через шаблоны и обеспечьте перезагрузку NGINX, после того как конфигурация будет введена в действие. Ниже приводится пример рецепта:
package 'nginx' do action :install
end
service 'nginx' do
supports :status => true, :restart => true, :reload => true action [ :start, :enable ]
end
template 'nginx.conf' do path "/etc/nginx.conf" source "nginx.conf.erb" owner 'root'
68 v Глава 5. Программируемость и автоматизация
group 'root' mode '0644'
|
Блок package устанавливает NGINX. Блок service гарантирует, что NGINX запускается и включается при загрузке, а затем объявляет остальной части Chef, что служба nginx будет поддерживать примени- тельно к действиям. Блок template формирует файл ERB и помещает его в /etc/nginx.conf с владельцем и группой root, а также устанавливает значение mode на 644 и уведомляет службу nginx о перезагрузке, но ждет конца запуска Chef, объявляемое оператором :delayed. Шаблонный файл конфигурации не включен. Тем не менее файл конфигурации NGINX по умолчанию установить просто, либо это может быть очень сложно, если использовать циклы языков шаблонов ERB или EPP и под- становку переменных.
Обсуждение
Chef – это система управления конфигурациями на базе языка Ruby. Она может работать в режиме «ведущий–ведомый» или в ре- жиме соло, ныне известном как Chef Zero. У Chef есть огромное со- общество с большим количеством общедоступных книг с рецептами, которое именуется Supermarket. Эти сборники рецептов можно уста- навливать и поддерживать с помощью утилиты командной строки Berkshelf. Chef чрезвычайно мощная система, и то, что мы проде- монстрировали, является лишь небольшим примером. Общедоступ- ная книга с рецептами NGINX в Supermarket чрезвычайно гибкая и предоставляет варианты простой установки NGINX из диспетчера пакетов или из исходного кода, а также возможность компилировать и устанавливать множество различных модулей, создавать шаблоны основных конфигураций.
См. также:
https://docs.chef.iohttps://docs.chef.io/resource_package.htmlhttps://docs.chef.io/resource_service.htmlhttps://docs.chef.io/resource_template.htmlhttps://supermarket.chef.io/cookbooks/nginx
5.5. Установка с использованием системы Ansible v 69
5.5. Установка с использованием
системы Ansible
Задача
Вам необходимо установить и настроить NGINX, используя Ansible, чтобы управлять конфигурациями NGINX в виде кода и соответство- вать остальным конфигурациям Ansible.
Решение
Создайте плейбук Ansible для установки NGINX и управления файлом nginx.conf. Ниже приведен пример файла задачи для плейбука, чтобы установить NGINX. Убедитесь, что он работает и создает шаблон файла конфигурации:
-
|
- name: NGINX | Starting NGINX service:
name: nginx state: started enabled: yes
- name: Copy nginx configuration in place. template:
src: nginx.conf.j2
dest: "/etc/nginx/nginx.conf" owner: root
group: root mode: 0644
notify:
- reload nginx
Блок package устанавливает NGINX. Блок service гарантирует, что NGINX запущен и включен при загрузке. Блок template устанавливает файл шаблона Jinja2 и помещает результат в /etc/nginx.conf с root в качестве владельца и группы, а также устанавливает значение mode в 644 и уведомляет службу nginx о перезагрузке. Шаблонный файл кон- фигурации не включен. Тем не менее файл конфигурации NGINX по
70 v Глава 5. Программируемость и автоматизация
умолчанию установить просто, либо это может быть очень сложно, если использовать циклы языка шаблонов Jinja2 и подстановку пере- менных.
Обсуждение
Ansible – это широко распространенное и мощное средство управ- ления конфигурациями, написанное на языке Python. Конфигурация задач идет в формате YAML, а язык шаблонов Jinja2 используется для файлов шаблонов. Ansible предлагает графический интерфейс для управления и мониторинга работы Ansible Tower по подписке. Тем не менее обычно он используется с локальных компьютеров или для соз- дания серверов непосредственно к клиенту или в модели без ведомого устройства. Ansible отправляет SSH-пакеты на свои серверы и запускает конфигурации. Как и у других систем управления конфигурациями, у Ansible существует большое сообщество под названием Ansible Galaxy, где можно найти очень сложные роли для использования в своих плей- буках.
См. также:
|
5.6. Установка с использованием SaltStack
Задача
Вам необходимо установить и настроить NGINX с использованием системы SaltStack, чтобы управлять конфигурациями NGINX в виде кода и соответствовать остальным конфигурациям SaltStack.
Решение
Установите NGINX через модуль управления пакетами и управляйте файлами конфигураций, которые вам нужны. Ниже приводится пример файла состояния (sls), который установит пакет nginx и гарантирует, что служба работает, включается при загрузке и перезагружается, если в файл конфигурации внесены изменения:
|
nginx:
pkg:
- installed service:
- name: nginx
- running
- enable: True
- reload: True
- watch:
- file: /etc/nginx/nginx.conf
/etc/nginx/nginx.conf: file:
- managed
- source: salt://path/to/nginx.conf
- user: root
- group: root
- template: jinja
- mode: 644
- require:
- pkg: nginx
|
Обсуждение
SaltStack – это мощный инструмент управления конфигурациями, который определяет состояния сервера в YAML. Модули для SaltStack
Дата добавления: 2021-01-21; просмотров: 119; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!