Статьи

Nginx-проксі

  1. Робота панелі без використання Nginx-проксі
  2. Завдання використання Nginx-проксі
  3. Основні принципи роботи
  4. Технічні подробиці
  5. Зміни в роботі модуля
  6. Налаштування
  7. відключення


Дана стаття присвячена опису механізмів роботи модуля проксінг запитів користувача додатків (скорочено Nginx-проксі). Під одними додатками розуміються наприклад phpMyAdmin, phpPGAdmin, Roundcube і т.д.

Робота панелі без використання Nginx-проксі

Без використання Nginx-проксі панель управління перенаправляє запити до призначених для користувача додатків на вузол кластера, обслуговуючий необхідну роль (наприклад, "Поштовий сервер" для Roundcube). При цьому подальша робота користувача з додатком буде проводитися вже за адресою вузла кластера (за замовчуванням використовується основний IP-адреса вузла кластера, наприклад https://12.34.56.78/roundcude ).

Завдання використання Nginx-проксі

При наданні послуг shared-хостингу може знадобитися налаштувати доступ до призначених для користувача додатків через єдину точку входу. В якості адреси точки входу буде використовуватися вказане в налаштуваннях доменне ім'я. Це дозволяє вирішити кілька проблем:

  • Доступ до всіх призначеним для користувача додатків і, якщо необхідно, в панель управління по одному доменному імені
  • Можливість використовувати один SSL-сертифікат (отриманий на доменне ім'я) для роботи користувальницьких додатків, а також доступу в панель управління
  • Користувач отримує постійна адреса (URL) призначеного для користувача додатки, який не змінюватиметься (наприклад, при переміщенні користувача між вузлами кластера)

Основні принципи роботи

Проксінг здійснюється через майстер-панель. У списку вибору ip-адрес nginx-proxy відображаються лише загальні і нестворені засобами панелі ip-адреси.

Для успішного проксінг запитів A-записи домену та псевдонімів на відповідальному (authoritative) за зону DNS-сервері повинні вести на ip-адреса nginx-проксі, який був обраний при підключенні www-домена до nginx-проксі. Кожні 30 хвилин панель перевіряє ip-адреса A-записів nginx-proxy. Якщо А-записи не ведуть на необхідний ip-адреса, панель покаже повідомлення про проблему:

Проблемні псевдоніми Nginx-proxy

Веб-сервер Nginx дозволяє прозоро проксіровать клієнтські запити. За допомогою цього механізму вирішуються описані вище завдання. Логічно схема проксінг виглядає наступним чином:

Надходить запит клієнта в веб-сервер ⇾ визначається користувач і програму, яку потрібно обслуговувати ⇾ запит передається на обробку веб-сервера відповідного вузла кластера ⇾ отриману відповідь повертається клієнтові

На майстер-сервері налаштовується веб-сервер Nginx наступним чином:

  1. Створюється віртуальний сервер (server) для потрібного доменного імені на певному адміністратором IP-адресу на порту 80 для перенаправлення запитів на порт захищеного з'єднання
  2. Створюється віртуальний сервер (server) для потрібного доменного імені на певному адміністратором IP-адресу на порту захищеного з'єднання (443), що надає функціональність проксінг
  3. Створюються іменовані віртуальні директорії (location) для кожного вузла кластера (location @ node1). Вони відповідають за проксінг запиту на вузол кластера
  4. Створюються віртуальні директорії (location) для кожного користувача (location / username)
  5. У location користувача створюються віртуальні директорії (location) для кожного користувача додатки (location / username / appname). Вони визначають, в який іменований location вузла кластера передати запит для обробки
  6. Якщо необхідно проксіровать запити до панелі управління, налаштовується коренева віртуальна директорія location / і проксірующая запити до панелі віртуальна директорія location @ispmgr

Технічні подробиці

  • Для кожного вузла кластера при його створенні або зміні основного IP-адреси реєструється рассинхронизация основного IP-адреси, при синхронізації настроює на вузлі кластера його основний IP-адреса. При цьому на вузлі кластера, якщо він має встановлений Nginx:
  1. В основному файлі конфігурації веб-сервера Nginx створюється віртуальний сервер, за замовчуванням обробляє запити на основному IP-адресу вузла кластера (прослуховує порти 80 і 443)
  2. Знімається ознака пріоритету для всіх WWW-доменів, які були пріоритетними на новому основному IP-адресу вузла кластера. Надалі WWW-домени, створені на основному IP-адресу вузла кластера, не можна використовувати як пріоритетні
  • Налаштування віртуального сервера nginx-проксі знаходяться в файлі masterproxy.conf директорії включаються конфігураційних файлів Nginx (conf.d)
  • Віртуальні директорії для призначених для користувача додатків конфигурируются тільки при визначенні розташування відповідної ролі користувача, не раніше

Приклад конфігураційного файлу віртуального сервера

server {server_name test.net www.test.net; ssl on; listen 192.168.40.51:443 ssl; add_header Strict-Transport-Security "max-age = 31536000;"; client_max_body_size 0; ssl_certificate "/usr/local/mgr5/etc/nginx_certs/masterproxy.crtca"; ssl_certificate_key "/usr/local/mgr5/etc/nginx_certs/masterproxy.key"; ssl_ciphers HIGH:! RC4:! aNULL:! eNULL:! MD5:! EXPORT:! EXP:! LOW:! SEED:! CAMELLIA:! IDEA:! PSK:! SRP:! SSLv2; ssl_prefer_server_ciphers on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; location @ node1 {proxy_redirect / $ 2 / / $ 1 / $ 2 /; proxy_redirect https://192.168.40.51/$2/ / $ 1 / $ 2 /; proxy_cookie_path / $ 2 / / $ 1 / $ 2 /; proxy_pass https://192.168.40.51 ; proxy_request_buffering off; rewrite ^ \ / (. *?) \ / ([^ \ /?] *) (. *) $ / $ 2 $ 3 break; } Location @ node2 {proxy_redirect / $ 2 / / $ 1 / $ 2 /; proxy_redirect https://192.168.40.52/$2/ / $ 1 / $ 2 /; proxy_cookie_path / $ 2 / / $ 1 / $ 2 /; proxy_pass https://192.168.40.52 ; proxy_request_buffering off; rewrite ^ \ / (. *?) \ / ([^ \ /?] *) (. *) $ / $ 2 $ 3 break; } Location / user1 {location / user1 / phpmyadmin {try_files / does_not_exists @ node1; } Location / user1 / roundcube {try_files / does_not_exists @ node2; }} Location @ispmgr {proxy_set_header Host $ host: $ server_port; proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $ scheme; proxy_set_header X-Real-IP $ remote_addr; proxy_set_header X-Forwarded-Secret kBBoQd5H6CAcwb5G; proxy_pass https://192.168.40.51:1500 ; proxy_request_buffering off; proxy_redirect https://192.168.40.51:1500 /; } Location / {try_files / does_not_exists @ispmgr; }} Server {server_name test.net www.test.net; return 301 https: // $ host: 443 $ request_uri ; listen 192.168.40.51:80; }

У наведеному прикладі видно, що так як призначені для користувача ролі сервера баз даних MySQL і поштового сервера розташовані на різних вузлах кластера, запити до відповідних доповнень (phpMyAdmin і Roundcube) передаються на обробку різних іменованих віртуальним тек проксінг.

Зміни в роботі модуля

Оновлення ISPmanager до версії 5.138.0

Оновлення ISPmanager до версії 5.138.0 вносить зміни в роботу модуля nginx-проксі:

  • Налаштування модуля здійснюється в розділі «Домени» -> «WWW-домени», на сторінці зміни конфігурації домену (кнопка «Змінити» для виділеного домену);
  • Nginx-проксі може бути підключений тільки до існуючого веб-домену з SSL-сертифікат;
  • Реалізована можливість підключення до модуля необмеженого кількість веб-доменів;
  • Змінено директорія зберігання налаштувань модуля. Налаштування розташовуються в файлі /etc/nginx/conf.d/masterproxy.d/імя_домена.conf.

Зверніть увагу, що при використанні проксірующего домену, весь трафік буде враховуватися для користувача-власника цього домену.

При оновленні ISPmanager з налаштованим модулем nginx-проксі до версії 5.138.0 або вище, в панелі управління створюється спеціальний користувач proxyuser. Для цього користувача створюється домен, який відповідає параметрам nginx-proxy до поновлення панелі управління.

Налаштування

Включення nginx-проксінг доступно тільки користувачам з правами адміністратора і вище. Для цього необхідно відкрити форму редагування веб-домену і включити опцію «Захищене з'єднання (SSL)», а потім опцію «Nginx-проксі» і вказати «IP-адреса nginx-проксі», з якого буде здійснюватися проксінг.

Якщо web-домен nxinx-proxy створений на локальному вузлі кластаера, то застосовується ip-адреса, яка була обрана в поле "ip-адреса nginx-проксі" Адреса в поле "ip-адреса" будуть ігноруватися.

Підключення Nginx-проксі

Nginx-проксі-сервер використовує сертифікат підключений до веб-домену та оновлює інформацію про нього при необхідності. Для проксінг можуть бути використані Let's Encrypt сертифікати.

Let's Encrypt сертифікат

відключення

Відключення nginx-проксінг доступно тільки користувачам з правами адміністратора і вище. Для відключення nginx-проксі необхідно відкрити форму редагування веб-домену і відключити опцію «Nginx-проксі».

«......»


Ця форма - НЕ звернення на підтримку.
Ми не можемо ідентифікувати вас і відповісти на ваше повідомлення.

Новости