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

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

07.06.2024
Автор: HostZealot Team
2 мин.
75

Управление несколькими локациями прокси-серверов 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 конечные точки могут работать под одним маршрутом. Надеемся, что эта статья оказалась полезной для вас, и вы сможете легко использовать все, что вам нужно, из приведенной выше информации. 

# VPS Поделиться:
Статьи по Теме