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



 
Каталог /var/log/nginx/ является местоположением журнала по умол- чанию для NGINX. В этом каталоге вы найдете файлы access.log и error.log. Файл access.log содержит запись каждого запроса, который обслуживает NGINX. В файле error.log содержатся события с ошибка- ми и отладочная информация, если модуль отладки включен.

 

Команды NGINX

nginx -h

Показывает справочное меню NGINX.

nginx -v

Показывает версию NGINX.

 
nginx -V

Показывает версию NGINX, информацию о сборке и аргументы конфигурации, где даны модули, встроенные в двоичный файл NGINX.

nginx -t

Проверяет конфигурацию NGINX.

nginx -T

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

nginx -s signal

Флаг -s отправляет сигнал главному процессу NGINX. Вы можете отправлять такие сигналы, как stop, quit, reload и reopen. stop немед- ленно прекращает процесс NGINX, quit останавливает процесс NGINX после завершения обработки запросов в полете, reload пе- резагружает конфигурацию, reopen дает NGINX команду повторно открывать файлы журнала.

 

Обсуждение

Освоив эти ключевые файлы, каталоги и команды, вы можете при- ступить к работе с NGINX. Обладая данными знаниями, вы можете из- менять файлы конфигурации по умолчанию и тестировать свои изме- нения с помощью команды nginx -t. Если ваш тест пройдет успешно, вы также будете знать, как проинструктировать NGINX для перезагрузки конфигурации с помощью команды nginx -s reload.


 

18 v Глава 1. Основы                                                                                          

1.6. Обслуживание статического контента

Задача

Вам необходимо обслуживать статический контент  с помощью

NGINX.

 
Решение

Перепишите конфигурацию HTTP-сервера по умолчанию, располо- женную в /etc/nginx/conf.d/default.conf, используя приведенный ниже пример конфигурации NGINX:

server {

listen 80 default_server; server_name www.example.com;

 

location / {

root /usr/share/nginx/html;

# alias /usr/share/nginx/html; index index.html index.htm;

}

}

 

 
Обсуждение

Данная конфигурация обслуживает статические файлы по протоколу HTTP через порт 80 из каталога /usr/share/nginx/html/. Первая строка в этой конфигурации определяет новый блок server. Это определяет но- вый контекст, который NGINX будет слушать. Вторая строка дает NGINX команду слушать порт 80, а параметр default_server указывает NGINX использовать этот сервер в качестве контекста по умолчанию для пор- та 80. Директива server_name определяет имя хоста или имена запросов, которые должны быть направлены на этот сервер. Если конфигурация не определила этот контекст как default_server, NGINX будет направлять запросы на этот сервер, только если заголовок HTTP-узла соответствует значению, указанному в директиве server_name.

Блок location определяет конфигурацию на основе пути в URL-адресе.

Путь или часть URL-адреса после домена называется URI. NGINX луч- ше всего будет соответствовать запрошенному URI для блока location. В этом примере используется символ / для сопоставления всех запросов. Директива root показывает NGINX, где искать статические файлы при


 

                                                                       1.7. Аккуратная перезагрузка v 19

 
обслуживании контента для данного контекста. URI запроса добавля- ется к значению директивы root при поиске запрошенного файла. Если бы мы указали префикс URI для директивы location, он был бы вклю- чен в добавленный путь, если только мы не использовали каталог alias вместо root. И наконец, директива index предоставляет NGINX файл по умолчанию или список файлов для проверки в случае, если в URI не ука- зан дальнейший путь.

1.7. Аккуратная перезагрузка

Задача

Вам необходимо перезагрузить конфигурацию, не отбрасывая пакеты.

Решение                                                                 

Используйте метод reload для аккуратной перезагрузки конфигура- ции без остановки сервера:

$ nginx -s reload

 

В этом примере выполняется перезагрузка системы NGINX с исполь- зованием двоичного файла NGINX для отправки сигнала главному про- цессу.

Обсуждение

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


 

Глава 2

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

2.0. Введение

 
Сегодня пользователям интернета требуется производительность и безотказная работа. Для этого запускается несколько копий одной и той же системы, и нагрузка распределяется между ними. По мере уве- личения нагрузки в рабочее состояние может вводиться еще одна ко- пия такой системы. Этот метод называется горизонтальным масшта- бированием. Программная инфраструктура приобретает все большую популярность благодаря своей гибкости, открывая огромный мир воз- можностей. Независимо от того, является ли вариант использования небольшим (как набор из двух для обеспечения высокой доступности) или крупнее (из тысяч по всему миру), необходимо создать решение для балансировки нагрузки, которое будет таким же динамичным, как и инфраструктура. NGINX удовлетворяет эту потребность несколькими способами, между серверами HTTP, TCP и UDP, о чем мы расскажем в этой главе.

При балансировке нагрузки важно, чтобы влияние на клиента было

только положительным. Многие современные веб-архитектуры ис- пользуют уровни приложений без фиксации состояния, храня состоя- ние в системе с общей памятью или базах данных. Однако такое про- исходит не у всех. Состояние сеанса чрезвычайно ценно и обширно в интерактивных приложениях. Оно может храниться локально на сер- вере приложений по ряду причин; например, в приложениях, для ко- торых обрабатываемые данные настолько велики, что нагрузка на сеть слишком высока по производительности. Когда состояние хранится


 

 
                                                            2.1. Балансировка нагрузки для HTTP v 21

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

Также важно обеспечить работоспособность приложения, которое

 
обслуживает NGINX. По ряду причин приложения могут не работать. Это может быть вызвано подключением к сети, сбоем в работе серве- ра или приложения среди прочего. Прокси-серверы и балансировщи- ки нагрузки должны быть достаточно умными, чтобы обнаруживать сбои в работе вышестоящих серверов и прекращать передачу трафика к ним; в противном случае клиент будет пребывать в состоянии ожи- дания, получая лишь сообщения о тайм-ауте. Способ смягчить ухудше- ние качества обслуживания в случае сбоя сервера состоит в том, чтобы прокси-сервер проверял работоспособность вышестоящих серверов. NGINX предлагает два типа проверки работоспособности: пассивный, доступный в версии с открытым исходным кодом, и активный, доступ- ный только в NGINX Plus. Активные проверки работоспособности через регулярные промежутки времени установят соединение или выполнят запрос к вышестоящему серверу и смогут убедиться, что ответ верный. Пассивные проверки работоспособности контролируют соединение или ответы вышестоящего сервера, когда клиенты выполняют запрос или устанавливают соединение. Возможно, вы захотите использовать пассивные проверки, чтобы уменьшить нагрузку на свои вышестоящие серверы, и активные – чтобы определить отказ вышестоящего сервера, прежде чем клиент столкнется со сбоем. В конце этой главы рассматри- вается мониторинг работоспособности вышестоящих серверов прило- жений, для которых вы выполняете балансировку нагрузки.

2.1. Балансировка нагрузки для HTTP

Задача

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


 

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

Решение

Используйте HTTP-модуль NGINX для выполнения балансировки по

HTTP-серверам с использованием блока upstream:

 

upstream backend {

server 10.10.12.45:80 weight=1; server app.example.com:80 weight=2;

 
}

server {

location / {

proxy_pass http://backend;

}

}

 

 

 
Эта конфигурация выполняет балансировку нагрузки по двум HTTP-серверам на порту 80. Параметр weight указывает NGINX переда- вать вдвое больше подключений на второй сервер, а значение этого па- раметра по умолчанию устанавливается на 1.

 

Обсуждение

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

Каждый получатель в восходящем потоке определяется в восходящем пуле директивой server. В этой директиве указывается сокет Unix, IP-ад- рес или полное доменное имя, а также ряд необязательных параметров. Необязательные параметры дают больший контроль над маршрутиза- цией запросов. Эти параметры включают в себя вес сервера в алгоритме балансировки; находится ли сервер в режиме ожидания, доступен он или недоступен; и как определить, что сервер недоступен. NGINX Plus предоставляет ряд других удобных параметров, таких как ограничения подключения к серверу, расширенный контроль над DNS-преобразова- нием и возможность медленного увеличения количества подключений к серверу после его запуска.


 

                                                              2.2. Балансировка нагрузки для TCP v 23

2.2. Балансировка нагрузки для TCP

Задача

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

Решение

Используйте модуль stream для балансировки нагрузки на TCP-сер-

веры с использованием блока upstream:            

stream {

 
upstream mysql_read {

server read1.example.com:3306 weight=5; server read2.example.com:3306;

server 10.10.12.34:3306 backup;

}

 

server {

listen 3306; proxy_pass mysql_read;

}

}

 

Блок server в этом примере дает NGINX команду слушать TCP- порт 3306, выполняет балансировку нагрузки между двумя репликами на чтение базы данных MySQL и перечисляет еще одну в качестве ре- зервной копии, в которой будет передаваться трафик, если указанные первичные будут остановлены. Эту конфигурацию не нужно добавлять в папку conf.d, поскольку она включена в блок http; вместо этого следует создать другую папку с именем stream.conf.d, открыть блок stream в файле nginx.conf и включить в состав новую папку для потоковых конфигура- ций.

Обсуждение

Балансировка нагрузки TCP определяется модулем stream. Модуль stream, как и модуль HTTP, позволяет определять пулы вышестоящих серверов и настраивать слушающий сервер. При настройке сервера для прослушивания данного порта вы должны определить порт для про- слушивания или – по желанию – адрес и порт. Оттуда нужно настроить


 

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

 
адресат, будь то прямой обратный прокси-сервер на другой адрес или восходящий пул ресурсов.

Блок upstream для балансировки нагрузки TCP очень похож на тот, что используется для протокола HTTP, в том смысле, что он определяет восходящие ресурсы как серверы, настроенные с использованием со- кета Unix, IP-адреса или полностью определенного доменного имени (FQDN), а также вес сервера, максимальное количество подключений, DNS-решатели и периоды вывода в рабочий режим; а также является ли сервер активным, выключен или находится в режиме резервного ко- пирования.

NGINX Plus предлагает еще больше возможностей для балансировки

нагрузки для протокола TCP.

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

2.3. Балансировка нагрузки UDP

Задача

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

 
Решение

Используйте модуль stream для балансировки нагрузки по UDP-серве-

рам, взяв блок upstream, определенный как udp:

stream {

upstream ntp {

server ntp1.example.com:123 weight=2; server ntp2.example.com:123;

}

 

server {

listen 123 udp; proxy_pass ntp;

}

}

 

Данный раздел распределяет нагрузку между двумя вышестоящими

NTP-серверами, использующими протокол UDP. Задать балансировку


 

                                                                   2.3. Балансировка нагрузки UDP v 25

нагрузки для UDP так же просто, как использовать параметр udp в ди- рективе listen.

 
Если службе, для которой выполняется балансировка нагрузки, требу- ется отправить несколько пакетовтуда и обратно между клиентом и сер- вером, можно указать параметр reuseport. Среди этих служб: OpenVPN, VoIP, решения для виртуальных рабочих столов и протокол датаграмм безопасности транспортного уровня (DTLS). Ниже приводится пример использования NGINX для обработки соединений Open VPN и их по- средничества (прокси) для запущенной локально службы Open VPN:

stream {

server {

 
listen 1195 udp reuseport; proxy_pass 127.0.0.1:1194;

}

}

 

Обсуждение

Вы можете спросить: «Зачем нужен балансировщик нагрузки, когда у меня может быть несколько хостов в записи DNS A или SRV?» Ответ заключается в том, что есть не только альтернативные алгоритмы ба- лансировки, с помощью которых выполняют балансировку нагрузки, а можно делать это поверх самих DNS-серверов. Службы UDP состав- ляют большую часть служб, от которых мы зависим в таких сетевых системах, как DNS, NTP и VoIP. Балансировка нагрузки UDP для кого-то может быть менее привычной, но столь же полезной в мире масштаби- рования.

Можно найти балансировку нагрузки для протокола UDP в модуле

stream, как и для TCP, и настроить его в основном таким же образом. Главное отличие состоит в том, что директива listen указывает на то, что открытый сокет предназначен для работы с датаграммами. При работе с датаграммами существуют другие директивы, которые могут применяться там, где их нет в TCP, например директива proxy_response, указывающая NGINX, сколько ожидаемых ответов можно отправить с вышестоящего сервера. По умолчанию эта цифра не ограничена, до тех пор пока не будет достигнут лимит времени proxy_time out.


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

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






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