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

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

07.06.2024
Автор: HostZealot Team
2 мін.
42

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

Перш ніж зануритися в усі деталі конфігурації і не тільки, давайте почнемо з базових речей. Nginx - це досить потужний веб-сервер, який можна використовувати в якості зворотного проксі, балансувальника навантаження або прямого проксі. Просто для загальної інформації на цю тему, давайте обговоримо принцип роботи балансувальника навантаження, тому що ця термінологія може бути дійсно заплутаною. Отже, цей балансувальник розподіляє запити між групою серверів і тільки після цього передає відповідь від сервера клієнту.

Якщо говорити про зворотні проксі-сервери, то це програми, які знаходяться між внутрішніми серверами і клієнтами. Цей тип серверів функціонує, приймаючи трафік клієнтів і перенаправляючи його у внутрішню мережу. Таким чином, користувачі не можуть отримати доступ до внутрішніх серверів безпосередньо, вони отримують доступ до них лише через зворотний проксі. Основні переваги зворотного проксі пов'язані з безпекою, масштабованістю і кращим SSL-шифруванням.

Спираючись на наш практичний досвід у цій галузі, ми пояснимо, як налаштувати Nginx таким чином, щоб він обслуговував кілька кінцевих точок з одним і тим же розташуванням. Для цього ми будемо використовувати налаштування зворотного проксі-сервера.

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

У конфігураційних файлах Nginx можна легко з'ясувати, яким чином сервер обробляє HTTP-запити. Основний конфігураційний файл називається nginx.conf. Якщо говорити конкретно про Ubuntu, то в цій операційній системі його можна знайти в такому каталозі, як /etc/nginx. Через цей файл можна отримати доступ до директив і згрупувати їх у блоки.

1.1. Директива server Block

Блоки сервера також можна назвати контекстами. Вони повністю визначають віртуальний сервер. В ілюстрації нижче, ми використовуємо 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 до розташування, ми співставимо URL-адреси з books.

Ще однією альтернативою може бути alias. Ця директива додає URL запиту до локального прямого шляху, таким чином можна пропустити префікс рядка:

location /books {
   alias /info/categories;
}

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

Тут ми спробуємо пояснити, як працює процес, створивши 2 віртуальних сервера, які будуть імітувати 2 кінцеві точки. Після цього ми пояснимо процес налаштування сервера Nginx на проксі-запити з кінцевими точками під однією URL-адресою.

2.1. Створення кінцевих точок

Почнемо з 2 найпростіших кінцевих точок:

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-адреси. Тут ми розглянемо 2 випадки:

  • 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 Поділитися:
Статті за темою