С помощью существующего протокола единого входа OpenID Connect 5 страница



Решение

Для протокола HTTP используйте директиву health_check в блоке loca- tion:

http {

server {

...

location / {

proxy_pass http://backend; health_check interval=2s

 
fails=2 passes=5 uri=/

match=welcome;

}

}

# status is 200, content type is "text/html", # and body contains "Welcome to nginx!"

match welcome { status 200;

header Content-Type = text/html; body ~ "Welcome to nginx!";

}

}

В этой конфигурации проверки работоспособности для HTTP-серве-

ров мы проверяем работоспособность вышестоящих серверов, отправ-


 

                                                  2.10. Активные проверки работоспособности v 35

 
ляя HTTP-запрос в URI '/' каждые две секунды. Вышестоящие серверы должны пройти пять последовательных проверок работоспособности, чтобы считаться исправными. Если они не проходят две последова- тельные проверки, то считаются неисправными. Ответ, полученный от вышестоящего сервера, должен соответствовать определенному блоку match, который определяет код состояния как 200, значение заголовка Content-Type как 'text/html' и строку "Welcome to nginx!" в теле ответа. У блока match есть три директивы: статус, заголовок и тело. У всех этих директив также есть флаги сравнения.

Проверка работоспособности для служб TCP/UDP очень похожа:

 

stream {

...

server {

 
listen 1234;

proxy_pass stream_backend; health_check interval=10s

passes=2 fails=3;

health_check_timeout 5s;

}

...

}

 

В данном примере сервер TCP настроен на прослушивание порта 1234 и выполнение посредничества к некоему набору серверов восходяще- го потока, для которого он и выполняет активные проверки жизнеспо- собности. Соответствующая директива health_check получает все те же параметры, что и HTTP, за исключением uri, а значение версии потока имеет параметр для переключения протокола проверки на udp. В дан- ном примере значение интервала установлено на 10 с, требуются два прохода, для того чтобы он рассматривался как работоспособный, и три отказа, чтобы принимать его неработоспособным. Такая активная проверка потока также способна удостоверять получаемый отклик от своего сервера верхнего уровня. Тем не менее соответствующий блок match для серверов потока имеет только два параметра: send и expect. Значением директивы send являются подлежащие отправке сырые дан- ные, в то время как expect представляет собой точный отклик или некое регулярное выражение для проверки соответствия.


 

36 v Глава 2. Высокопроизводительная балансировка нагрузки                                  

Обсуждение

 
При активных проверках работоспособности в NGINX Plus постоянно отправляются запросы к исходным серверам, чтобы проверить их ра- ботоспособность. Эти проверки могут измерять больше, чем просто код ответа. В NGINX Plus, активный мониторинг работоспособности HTTP осуществляется на основе ряда критериев приемлемости ответа от вы- шестоящего сервера. Можно настроить активную проверку работоспо- собности для определения частоты проверки вышестоящих серверов, того, сколько раз сервер должен пройти эту проверку, чтобы считаться исправным, сколько раз он мог потерпеть неудачу, перед тем как счи- таться неисправным, и каким должен быть ожидаемый результат. Па- раметр match указывает на блок match, который определяет критерии приемлемости для ответа. Он также определяет данные для отправки на вышестоящий сервер при использовании в контексте потока для TCP/UDP. Эти функции позволяют NGINX постоянно обеспечивать ра- ботоспособность вышестоящих серверов.

2.11.

 
Медленный запуск

Задача

Ваше приложение нуждается в прогреве перед полной эксплуатаци- онной нагрузкой.

Решение

Используйте параметр slow_start  в директиве server, чтобы посте- пенно увеличивать количество подключений за указанное время, когда сервер повторно вводится в восходящий пул балансировки на- грузки:

upstream {

zone backend 64k;

server server1.example.com slow_start=20s; server server2.example.com slow_start=15s;

}

 

Данная настройка директивы server будет медленно прогревать тра- фик к вышестоящим серверам после их представления в пуле. server1 будет плавно наращивать количество подключений в течение 20 с, а server2 – в течение 15 с.


 

                                                          2.12. Проверки работоспособности TCP v 37

 
Обсуждение

Медленный запуск – это концепция постепенного увеличения количе- ства запросов, передаваемых на сервер в течение определенного пери- ода времени. Медленный запуск позволяет прогревать приложение, за- полняя кеши, инициируя соединения с базами данных без перегрузки соединениями, как только он запускается. Это свойство вступает в силу, когда сервер, который не прошел проверку работоспособности, снова начинает проходить ее и возвращается в пул балансировки нагрузки.

2.12. Проверки работоспособности TCP

Задача

Вам необходимо проверить работоспособность вышестоящего TCP-

сервера и удалить неисправные серверы из пула.

Решение

Используйте директиву health_check в блоке server для активной про- верки работоспособности:

stream {

 
server {

listen           3306; proxy_pass                     read_backend;

health_check interval=10 passes=2 fails=3;

}

}

 

В этом примере активно отслеживаются вышестоящие серверы. Вышестоящий сервер будет считаться неисправным, если не сможет ответить на три или более TCP-соединения, инициированных NGINX. NGINX выполняет проверку каждые 10 с. Сервер будет считаться ис- правным только после двух проверок работоспособности.

Обсуждение

Работоспособность TCP можно проверить с помощью NGINX Plus как пассивно, так и активно. Пассивный мониторинг работоспособности осуществляется путем регистрации обмена данными между клиен- том и вышестоящим сервером. Если вышестоящий сервер приводит к тайм-ауту или отклоняет подключения, пассивная проверка работоспо-


 

38 v Глава 2. Высокопроизводительная балансировка нагрузки                                        

 
собности сочтет этот сервер неисправным. Активные проверки рабо- тоспособности инициируют собственные настраиваемые проверки для определения работоспособности; они не только проверяют соединение с вышестоящим сервером, но и могут ожидать определенного ответа.

 

 


 


Глава 3


 

Управление трафиком


3.0. Введение

 
NGINX и NGINX Plus также классифицируются как контроллеры веб-тра- фика. Можно использовать NGINX для интеллектуальной маршрути- зации трафика и управления потоком на базе множества атрибутов. В этой главе рассматривается способность NGINX разделять клиентские запросы на основе процентов, использовать географическое располо- жение клиентов и контролировать поток трафика в виде ограничения скорости, соединения и пропускной способности. Читая эту главу, пом- ните, что можно смешивать и сочетать эти функции, чтобы получить неисчерпаемые возможности.

3.1. A/B-тестирование

Задача

Вам нужно разделить клиентов между двумя или более версиями файла или приложения для проверки приемлемости.

Решение

Используйте модуль split_clients, чтобы направить процент своих клиентов в другой восходящий пул:

split_clients "${remote_addr}AAA" $variant { 20.0%             "backendv2";

*           "backendv1";

}

 

Директива split_clients хеширует строку, которую вы предоставили в качестве первого параметра, и делит этот хеш на предоставленные про- центы, чтобы отобразить значение переменной, которая приводится в


 

40 v Глава 3. Управление трафиком                                                                             

 
качестве второго параметра. Третий параметр – это объект, содержащий пары ключ/значение, где ключ – это процентный вес, а значение – это величина, которая должна быть назначена. Ключ может быть обозначен либо в процентах, либо в виде звездочки. Звездочка обозначает оста- ток целого, после того как приняты все проценты. Значение перемен- ной $variant будет составлять backendv2 для 20 % клиентских IP-адресов и backendv1 для оставшихся 80 %.

В этом примере backendv1 и backendv2 обозначают пулы вышестоящих

серверов и могут использоваться с директивой proxy_pass:

location / {

proxy_pass http://$variant

}

 

При использовании переменной $variant наш трафик будет раcще- плен между двумя различными пулами серверов.

 
Обсуждение

Данный тип A/B-тестирования полезен при тестировании различных типов функций маркетинга и внешнего интерфейса для показателей конверсии на сайтах электронной коммерции. Обычно приложения ис- пользуют тип развертывания под названием canary release. В этом типе развертывания трафик медленно переключается на новую версию. Раз- деление клиентов между различными версиями своего приложения мо- жет быть полезно при развертывании новых версий кода, чтобы ограни- чить радиус взрыва в случае ошибки. Независимо отпричины разделения клиентов между двумя различными наборами приложений NGINX упро- щает этот процесс благодаря использованию модуля split_clients.

См. также:

Документация по split_clients (http://nginx.org/en/docs/http/ngx_http_split_ clients_module . html)

3.2. Использование модуля GeoIP

И базы данных

Задача

Вам необходимо установить базу данных GeoIP и активировать ее встраиваемые переменные в NGINX для регистрации и указания ваше- му приложению местоположения ваших клиентов.


 

                                            3.2. Использование модуля GeoIP и базы данных v 41

Решение

 
Официальный репозиторий пакетов NGINX с открытым исходным кодом, который мы настраивали в главе 1 при установке NGINX, пре- доставляет пакет nginx-module-geoip. При использовании репозитория пакетов NGINX Plus этот пакет называется nginx-plus-modulegeoip. Эти пакеты устанавливают динамическую версию модуля GeoIP.

RHEL/CentOS NGINX с открытым исходным кодом:

# yum install nginx-module-geoip

Debian/Ubuntu NGINX с открытым исходным кодом:

# apt-get install nginx-module-geoip

RHEL/CentOS NGINX Plus:

# yum install nginx-plus-module-geoip

Debian/Ubuntu NGINX Plus:

# apt-get install nginx-plus-module-geoip

 

Скачайте базы данных GeoIP стран и городов и распакуйте их:

 
# mkdir /etc/nginx/geoip # cd /etc/nginx/geoip

# wget "http://geolite.maxmind.com/\ download/geoip/database/GeoLiteCountry/GeoIP.dat.gz" # gunzip GeoIP.dat.gz

# wget "http://geolite.maxmind.com/\ download/geoip/database/GeoLiteCity.dat.gz" # gunzip GeoLiteCity.dat.gz

С помощью этого набора команд мы создаем каталог geoip в каталоге

/etc/nginx, перемещаемся туда, скачиваем и распаковываем пакеты.

Теперь, когда база данных GeoIP стран и городов находится на ло- кальном диске, вы можете дать указание модулю GeoIP использовать ее для предоставления встраиваемых переменных на основе IP-адреса клиента:

load_module "/usr/lib64/nginx/modules/ngx_http_geoip_module.so"; http {


 

42 v Глава 3. Управление трафиком                                                                      

 

 
geoip_country /etc/nginx/geoip/GeoIP.dat; geoip_city /etc/nginx/geoip/GeoLiteCity.dat;

...

}

 

Директива load_module динамически загружает модуль из его пути в файловой системе. Она действительна только в основном контексте. Директива geoip_country берет путь к файлу GeoIP.dat, содержащему базу данных, отображая IP-адреса в коды стран, и действительна только в контексте протокола HTTP.

 

Обсуждение

Директивы geoip_country и geoip_city предоставляют ряд встраиваемых переменных, доступных в этом модуле. Директива geoip_country активи- рует переменные, которые позволяют различать страну происхождения вашего клиента. Эти переменные включают в себя $geoip_country_code,

$geoip_country_code3 и $geoip_country_name. Переменная кода страны воз- вращает код страны из двух букв, а переменная с цифрой 3 на конце возвращает код страны, состоящий из трех букв.

Переменная имени страны возвращает полное название страны.

 
Директива geoip_city активирует довольно много переменных. Она активирует все те же переменные, что и директива geoip_country, толь- ко с другими именами, такими как $geoip_city_country_code, $geoip_city_ country_code3 и $geoip_city_country_name. Другие переменные включают в себя $geoip_city, $geoip_city_continent_code, $geoip_latitude, $geoip_longitude и $geoip_postal_code – все они описывают возвращаемое значение. $geoip_ region и $geoip_region_name описывают регион, территорию, штат, про- винцию, федеральную землю и т. п. Регион – это код из двух букв, где название региона – полное имя. $geoip_area_code действительна только в США. Она возвращает трехзначный телефонный код города.

Используя эти переменные, вы можете регистрировать информацию

o вашем клиенте.

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

См. также:

Обновления для GeoIP (https://github.com/maxmind/geoipupdate).


 

                                          3.3. Ограничение доступа в зависимости от страны  v 43

3.3.

 
Ограничение доступа в зависимости от страны

Задача

Вам необходимо ограничить доступ из определенных стран согласно требованиям договора или приложения.

Решение

Отобразите коды стран, которые вы хотите заблокировать или разре- шить в переменную:

load_module "/usr/lib64/nginx/modules/ngx_http_geoip_module.so";

 

http {

map $geoip_country_code $country_access { "US" 0;

 
"RU"   0;

default 1;

}

...

}

 

В результате этого значение новой переменной $country_access будет равно 1 или 0. Если клиентский IP-адрес происходит из США или Рос- сии, значение переменной будет установлено на 0. Для любой другой страны значение переменной будет установлено на 1. Теперь в нашем блоке server мы будем использовать оператор if, чтобы запретить дос- туп любому, кто не из США или России:

server {

if ($country_access = '1') { return 403;

}

...

}

 

Если значение переменной $country_access установлено на 1, оператор if будет оценивать это как True. В этом случае сервер вернет ошибку 403 unauthorized. В противном случае сервер будет работать как обычно. Та-


 

 
44 v Глава 3. Управление трафиком                                                                      


Дата добавления: 2021-01-21; просмотров: 134; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!