Прокси-серверы NGINX: Обслуживание нескольких конечных точек в одной локации

Прокси-серверы NGINX: Обслуживание нескольких конечных точек в одной локации

10:43, 07.06.2024

Содержание статьи
arrow

  • Управление несколькими локациями прокси-серверов NGINX
  • 1. Конфигурация Nginx
  • 1.1. Директива блока сервера
  • 1.2. Локация блок директивы
  • 2. Управление несколькими конечными точками прокси
  • 2.1. Создание конечных точек
  • 2.2. Директива proxy_pass
  • 2.3. Создание пробных данных
  • Подведем итоги

Управление несколькими локациями прокси-серверов NGINX

Прежде чем погрузиться во все детали настройки и многое другое, давайте начнем с базы. Nginx - это довольно мощный веб-сервер, который может применяться в качестве обратного прокси, балансировщика нагрузки или прямого прокси. Для общего ознакомления с этой темой давайте обсудим принцип работы балансировщика нагрузки, потому что такая терминология может запутать. Итак, этот балансировщик распределяет запросы между группой серверов и только после этого передает ответ от сервера клиенту.

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

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

1. Конфигурация Nginx

В конфигурационных файлах Nginx можно легко выяснить, каким образом сервер работает с HTTP-запросами. Основной файл конфигурации называется nginx.conf. Если говорить конкретно об Ubuntu, то в этой операционной системе его можно найти в такой директории, как /etc/nginx. Через этот файл можно получить доступ к директивам, которые можно сгруппировать в блоки.  

1.1. Директива блока сервера

Блоки сервера могут также называться контекстами. Они полностью определяют виртуальный сервер. Здесь, на рисунке ниже, мы используем listen для задания IP/имени хоста и порта:

server {
   listen 345.0.1.1:8080;
}

В этом примере виртуальный сервер находится по адресу 345.0.1.1, а порт указан 8080.

1.2. Локация блок директивы

В блоке location хранится информация о том, как сервер должен обрабатывать совпадающие HTTP-запросы. Местоположение указывается с помощью регулярного выражения/префиксной строки. Таким образом, URL-адрес HTTP-запроса соответствует локальному блоку (в частности, с помощью префиксной строки или регулярного выражения).

Чтобы обслужить содержимое, мы можем использовать root, как показано в примере ниже:

server {
   listen 345.0.1.1:8080;
   location /books {
  root /info/categories;
   }
}

В приведенном выше примере файлы возвращаются из каталога info/categories, а добавив books в location, мы сопоставим URL с books.

Еще одной альтернативой может быть alias. Эта директива добавляет URL запроса к локальному прямому пути, таким образом можно пропустить префикс строки:

location /books {
   alias /info/categories;
}

2. Управление несколькими конечными точками прокси

Здесь мы попытаемся объяснить, как работает процесс, создав 2 виртуальных сервера, которые будут имитировать 2 конечные точки. После этого мы объясним процесс настройки сервера Nginx для проксирования запросов с конечными точками под одним URL.

2.1. Создание конечных точек

Начнем с двух простейших конечных точек:

server {
   listen 8081;
   location /user1 {
  alias /info/user1;
   }
}
 
server {
   listen 8082;
   location /user2 {
  alias /info/user2;
   }
}

Таким образом, мы определили 2 виртуальных сервера, каждый блок которых содержит такую информацию, как:

  • Первый сервер находится на порту 8081, контент обслуживается из /info/user1 напрямую и сопоставляет запросы с /user1.
  • Второй пример находится на порту 8082, контент обслуживается из директории /info/user2 и соответствует запросам с /user2.

2.2. Директива proxy_pass

Для организации правильной переадресации нам следует использовать proxy-pass в локальном блоке. Директива такого типа работает, доставляя HTTP-запросы на определенный адрес. Вот иллюстрация того, как она должна выглядеть:

server {
   listen 8000;
   location /api {
  proxy_pass http://345.0.1.1:8081/user1;
   }
 
location /api/user2 {
   proxy_pass http://345.0.1.1:8082/user2;
}
}

На этом примере был создан виртуальный сервер на порту 8000 и 2 локации в этом сервере, эти локации функционируют таким образом:

  •  /api перенаправляет запросы на начальную конечную точку (http:// 345.0.1.1:8081/user1).
  • /api/user2 перенаправляет запросы на конечную точку http:// 345.0.1.1:8082/user2.

Еще одним важным фактом является то, как proxy_pass перенаправляет URL. Здесь мы обратим внимание на два аспекта:

  • Proxy_pass соединяет URL с именем хоста, таким образом http:// 345.0.1.1:8081
  • Proxy_pass соединяет URL с путем, в таком виде http:// 345.0.1.1:8081/user1

2.3. Создание пробных данных

Перед тестированием настройки необходимо создать тестовые файлы в директориях /info/user2 и /info/user1, это можно сделать в такой форме:

$ sudo echo { 'message' : 'Hi from user1' } | sudo tee /info/user1/echo.json
{ message : Hi from user1 }
$ sudo echo { 'message' : 'Hi from user2' } | sudo tee /info/user2/echo.json
{ message : Hi from user2 }

После создания образца данных вы можете начать процесс тестирования следующим образом:

$ curl http://345.0.1.1:8000/api/echo.json
{ message : Hi from user1 }
$ curl http://345.0.1.1:8000/api/user2/echo.json
{ message : Hi from user2 }

Файлы JSON были показаны на выходе процесса тестирования. В завершение процесса давайте обсудим все детали начального запроса, а именно:

  • Запрос перенаправляется с http:// 345.0.1.1:8000/api/echo.json на http:// 345.0.1.1:8081/user1/echo.json.
  • Запрос http:// 345.0.1.1:8081/user1/echo.json обрабатывается и возвращает ресурс /info/user1/echo.json

Подведем итоги

Основываясь на нашем практическом опыте в области виртуальных серверов, мы решили поделиться несколькими полезными рекомендациями и реальными примерами использования сервера Nginx в качестве обратного прокси. Мы привели несколько практических примеров того, как 2 конечные точки могут работать под одним маршрутом. Надеемся, что эта статья оказалась полезной для вас, и вы сможете легко использовать все, что вам нужно, из приведенной выше информации. 

views 1m, 12s
views 2
Поделиться

Была ли эта статья полезной для вас?

Популярные предложения VPS

Другие статьи на эту тему

cookie

Принять файлы cookie и политику конфиденциальности?

Мы используем файлы cookie, чтобы обеспечить вам наилучший опыт работы на нашем сайте. Если вы продолжите работу без изменения настроек, мы будем считать, что вы согласны получать все файлы cookie на сайте HostZealot.