Адреса
Настройки → Адреса определяет, где доступна панель и что она там обслуживает: панель администратора, подписки, API, веб-сайт, другую программу или фиксированный ответ. Эту страницу открывает только главный администратор. Изменение применяется сразу, без перезапуска, и откатывается само, если его не подтвердить в течение двух минут.


Первый адрес
Основной слушатель — адрес, на котором была установлена панель, и он остаётся всегда:
- Его можно менять, в том числе порт, адрес и TLS, но нельзя удалить, выключить или заменить другим слушателем.
- На нём всегда есть маршрут Панель, и он всегда обслуживает подписки: маршрутом Подписки или включённым Подписки на маршруте панели.
- Эти два маршрута отмечены как Основной. Их хосты, префикс пути и параметры можно менять, но их нельзя удалить, сменить им службу, привязать к учётной записи или убрать с основного слушателя.
- Его записывает мастер настройки. Пока у панели только этот адрес,
nx-panel config getиconfig setчитают и меняют его на сервере, аnx-panel ingress resetсобирает его заново (Командная строка). - В Docker его порт задаёт compose-файл.
Изменение на этой странице применяется сразу. Изменение из командной строки сервера применяется при следующем запуске панели.
Как отвечают на запрос
- Слушатель принимает соединение на своём порту, со своим TLS.
- Маршруты этого слушателя проверяются по порядку. Отвечает первый, у которого совпали хосты и префикс пути и чей сервис берёт этот путь.
- Запрос, который не взял ни один маршрут, получает ответ по умолчанию: маршрута, иначе слушателя, иначе простое «не найдено».
Ответ по умолчанию отвечает только на то, что отклоняет панель. Ошибки самой панели, например неверный пароль или «не найдено» от API, никогда не подменяются.
Слушатели
Слушатель — это один порт, который занимает панель. Основной слушатель — тот, на котором панель запускается всегда: он всегда включён, а в Docker его адрес задаёт compose-файл.
| Поле | Что делает |
|---|---|
| Адрес | IP-адрес этого сервера; пусто — все адреса, IPv4 и IPv6. |
| Порт | Порт. У основного слушателя пустое поле оставляет порт, с которым запущена панель. |
| TLS | Обычный HTTP, Сертификат из хранилища (из Сертификаты) или Файлы сертификата на диске. |
| Ещё сертификаты | Другие сертификаты из хранилища. Клиент, запросивший имя, которое есть в одном из них, получает этот сертификат; все остальные получают собственный сертификат слушателя. |
| Отклонять неизвестные имена | TLS-рукопожатие с именем, которого нет ни в одном сертификате здесь, отклоняется. Открыть панель по IP по-прежнему можно, если этот IP есть в сертификате. |
| Host должен совпадать с рукопожатием | Запрос, имя хоста в котором отличается от имени из его TLS-рукопожатия, получает ответ по умолчанию. |
| Доверенные прокси | Адреса и CIDR, чьему X-Forwarded-For верит этот слушатель. Список основного слушателя — тот, что в Безопасность. |
| Ответ по умолчанию | Что отвечает на запрос, который не взял ни один маршрут этого слушателя. |
| Пропуск TLS | Имена хостов, чьи TLS-соединения передаются нетронутыми на другой host:port (ниже). |
Слушатель, который не может занять свой порт или у которого не загружается сертификат, показывает Не работает с причиной, а остальные продолжают работать. TLS-слушатель, у которого не загружается сертификат, никогда не обслуживается вместо этого по обычному HTTP. Исключение — основной слушатель, чтобы вы всё же могли открыть панель: он переходит на обычный HTTP и сообщает об этом.
Панель отвечает на проверки ACME HTTP-01 и TLS-ALPN-01 на своих слушателях. Панель на портах 80 и 443 всё равно может получать сертификаты этими проверками; см. Сертификаты.
Пропуск TLS
Строка пропуска отправляет TLS-соединение для одного имени хоста другой программе раньше, чем панель что-либо из него прочитает. Программа завершает TLS своим сертификатом. Используйте это, чтобы делить порт 443 с тем, кому нужно видеть собственное рукопожатие, например с инбаундом узла на том же сервере.
Программа видит адрес панели как адрес клиента. PROXY protocol не отправляется, поэтому ограничения по адресу клиента в этой программе через пропуск не работают.
Маршруты
У каждого маршрута есть имя, слушатели, на которых он стоит, и три поля, которые решают, с какими запросами он совпадает:
- Хосты: имена или адреса, без порта.
*.example.comсовпадает с одной меткой под ним. Пусто — любой хост. - Кроме хостов: имена, на которые маршрут никогда не отвечает, для маршрута на любом хосте.
- Префикс пути: пусто или
/name. Префикс снимается до того, как сервис увидит путь.
Маршруты проверяются сверху вниз; Выше и Ниже меняют порядок.
Что обслуживает маршрут
| Обслуживает | Берёт | Для чего |
|---|---|---|
| Панель | всё | Панель администратора и её собственный API, плюс включённые части: Подписки, /api/v1, /metrics, Установщик узла |
| Подписки | /sub/… | Ссылки и страницы подписок пользователей |
| API | /api/v1/… | API только для токенов API |
| Метрики | /metrics | Prometheus; см. Мониторинг и метрики |
| Установщик узла | /install… | Скрипт установки узла и CA панели |
| Статический сайт | всё | Каталог файлов |
| Перенаправление | всё | Отправляет каждый запрос на другой адрес |
| Фиксированный ответ | всё | Один и тот же код, заголовки и тело на каждый запрос |
| Другая программа | всё | Обратный прокси к дополнению или вашей собственной программе |
Маршрут Подписки берёт только /sub, поэтому всё остальное на том же хосте по-прежнему получает следующий маршрут.
Маршруты панели
Кто может войти ограничивает вход на этом маршруте главными администраторами, операторами или реселлерами. Пусто — входит любая учётная запись, а владелец панели входит всегда.
Маршруты API
Маршрут API принимает только токены API. Сессия браузера там не учитывается, страниц входа и настройки там нет, а сессия входа, переданная как токен, отклоняется. Токены и Дополнения ограничивают его выбранными токенами; если не выбрано ни то, ни другое, проходит любой токен. Выбранные здесь токен или дополнение, как и учётную запись, которой принадлежит токен, нельзя удалить, пока они не убраны из маршрута.
Чтобы убрать /api/v1 с публичного адреса панели, выключите /api/v1 на маршруте панели и дайте маршруту API собственный слушатель, например на 127.0.0.1 или на частном адресе.
Другая программа
Проксировать к — это URL или Дополнение. Цель-дополнение использует собственный адрес дополнения и доверие, которое панель для него хранит, а маршрут к приостановленному дополнению отдаёт свой ответ по умолчанию.
- Передавать Host запроса: если выключено, передаётся имя хоста цели.
- Снимать префикс: передаёт путь под префиксом вместо всего пути.
- Проверка цели: Системными центрами, Закреплённым сертификатом или Без проверки.
Соединения WebSocket проходят. Cookie сессии панели никогда не доходит до программы, и программа не может его установить. По той же причине маршрут к другой программе не может делить хост с маршрутом панели: дайте ему собственное имя хоста, а если маршрут панели совпадает с любым хостом, внесите это имя в Кроме хостов маршрута панели.
Другие поля маршрута
| Поле | Что делает |
|---|---|
| Привязан к учётной записи | Связывает маршрут с одной учётной записью администратора (ниже). |
| Только свои клиенты | На маршруте подписок, привязанном к реселлеру: любая другая подписка получает ответ по умолчанию. |
| Разрешённые адреса | Отвечать только этим адресам или CIDR; остальные получают ответ по умолчанию. |
| Ответ по умолчанию | Что отвечает на запрос, который совпал с маршрутом, но не был им взят. Пусто — ответ слушателя. |
| Оформление | Внешний вид страниц этого маршрута (ниже). |
| Публиковать ссылки здесь | Ссылки на этот сервис, например ссылки подписок, строятся на этом маршруте. |
| Публичный адрес | Адрес, на котором строятся ссылки, когда люди попадают на панель через CDN или прокси перед ней. |
| Заголовки | Заголовки ответа для этого маршрута. Заголовок, который выставляет сам сервис, важнее. |
| HSTS max-age (секунды) | Отправляется только по TLS; 0 — выключено. |
Учётные записи, привязанные к хостам
Привязан к учётной записи на маршруте панели делает его хосты хостами этой учётной записи:
- На этом маршруте входит или пользуется своими токенами API только привязанная учётная запись.
- Учётная запись, привязанная к маршруту, не входит больше нигде, и её токены больше нигде не работают. Исключение — владелец панели: он всегда может войти на других адресах панели.
Отказ во входе выглядит в точности как неверный пароль и не засчитывается в бан.
Маршрут Подписки, привязанный к реселлеру, — это адрес подписок этого реселлера. Если включено Публиковать ссылки здесь, там строятся ссылки его клиентов. Только свои клиенты у нового маршрута включено по умолчанию, чтобы этот домен не выдавал, что делит панель с клиентами другого реселлера.
Ответы по умолчанию
Ответ по умолчанию — это ответ, который можно использовать повторно: Статический сайт, Перенаправление или Фиксированный ответ. В списке видно, какие слушатели и маршруты используют каждый из них.
Статический сайт отдаёт абсолютный каталог на сервере панели как обычный веб-сайт: без списков файлов, без скрытых файлов и с собственным 404.html для отсутствующих путей. На обновлённой панели прежний Каталог маскировки стал здесь ответом по умолчанию типа «статический сайт».
Оформление
Оформление — это внешний вид, состоящий из двух частей:
- Панель администратора: Название продукта, Логотип, Значок сайта, Цвет, Плотность и Сообщение на странице входа. Страница входа рисуется в нём с первого мгновения.
- Страница подписки: Тема, Заголовок, Ссылка поддержки, Ссылка на страницу в клиенте и Объявление.
Логотип и значок сайта вместе занимают не более 256 КБ и хранятся в базе данных, поэтому попадают в каждую резервную копию.
Маршрут выбирает оформление в поле Оформление, а главный администратор назначает его реселлеру в его учётной записи (Реселлеры). Панель администратора берёт оформление маршрута, иначе оформление учётной записи, к которой привязан маршрут. Подписка берёт оформление своего владельца, затем своего маршрута, затем настройки подписок. Пустое поле берётся из следующего варианта.
Сохранение и подтверждение
Меняйте сколько нужно, затем нажмите Сохранить и применить:
- Панель проверяет изменение. Изменение, после которого на адресе, где вы находитесь, не останется панели, отклоняется, как и изменение, которое ставит слушатель на порт, уже занятый другой программой на сервере.
- Панель применяет изменение сразу. Открытые соединения не обрываются; слушатель перезапускается, только когда меняется его адрес или включается либо выключается TLS.
- Страница подтверждает изменение с того адреса, на котором она открыта. Если с этого адреса панель больше не доступна, например после смены её порта, страница перечисляет новые адреса. Откройте один из них в течение указанного времени и подтвердите там.
- Изменение, которое никто не подтвердил за две минуты, откатывается само. Панель, остановленная во время ожидания, откатывает его при запуске.
Чтобы перенести панель в другое место, сначала добавьте новый адрес, сохраните, откройте его и уже оттуда удалите старый.
История перечисляет все изменения: с этой страницы, из командной строки, при обновлении, при восстановлении из копии или через ingress reset. Вернуть применяет более раннюю версию, и её нужно подтвердить, как любое другое изменение.
Проверка запроса
Проверить запрос показывает, что получил бы запрос, не отправляя его. Выберите слушатель и укажите хост, путь, имя TLS и адрес клиента. Ответ называет маршрут, который берёт запрос, и путь, который видит его сервис, или ответ по умолчанию, который отвечает, и перечисляет каждый пройденный маршрут с причиной. С несохранёнными изменениями проверяет ваши правки до сохранения.
Предупреждения
Страница предупреждает о том, что сохраняется и работает, но, скорее всего, делает не то, что вы задумали:
- маршрут, который никогда не отвечает, потому что его запросы забирает маршрут выше;
- маршрут, который не отвечает вообще ни на что;
- имя хоста на TLS-слушателе, которого нет ни в одном из его сертификатов;
- слушатель, кроме основного, внутри контейнера: он доступен, только если контейнер публикует его порт;
- установщик узла, обслуживаемый только на отдельном маршруте, тогда как команда установки на Узлы использует адрес, с которого вы открыли панель.
Примеры
Панель на 443 с доменом
- Выпустите сертификат для
panel.example.comиsub.example.comна Сертификаты. - Добавьте слушатель на порту 443 с Сертификат из хранилища, этим сертификатом и включённым Отклонять неизвестные имена.
- Добавьте на нём маршрут Панель с хостом
panel.example.comи маршрут Подписки с хостомsub.example.comи Публиковать ссылки здесь. - Сохраните, откройте
https://panel.example.comи оттуда удалите старый адрес, если он вам больше не нужен.
Реселлер со своими адресами
Добавьте маршрут Панель на panel.reseller.example.com и маршрут Подписки на sub.reseller.example.com, оба с Привязан к учётной записи к реселлеру и с его оформлением. Реселлер входит только там, а ссылки и страницы его клиентов несут его имя.
Дополнение за портом 443
Добавьте маршрут Другая программа на shop.example.com с Проксировать к, указывающим на дополнение. Если маршрут панели на том же слушателе совпадает с любым хостом, добавьте shop.example.com в его Кроме хостов.
За CDN
Одно имя хоста можно поставить за Cloudflare или другой CDN, а остальные оставить прямыми, даже на одном слушателе. CDN подключается к панели как любой другой клиент, поэтому ему нужны слушатель, сертификат и доверие панели к адресу, который он передаёт.
Cloudflare
- Порт, который пересылает Cloudflare. Он пересылает HTTPS на
443,2053,2083,2087,2096и8443, а HTTP на80,8080,8880,2052,2082,2086и2095. Добавьте слушатель на одном из них или настройте в Cloudflare правило origin, которое отправляет трафик дальше на порт слушателя. - TLS между Cloudflare и панелью. Режим Cloudflare Full работает с собственным самоподписанным сертификатом панели. Для Full (strict) создайте origin-сертификат Cloudflare, загрузите его на Сертификаты и выберите его для слушателя. Не используйте Flexible: трафик от Cloudflare до панели пойдёт по обычному HTTP.
- Адрес посетителя. Внесите диапазоны IPv4 и IPv6, которые публикует Cloudflare, в Доверенные прокси слушателя. Тогда панель берёт адрес посетителя из
X-Forwarded-Forдля защиты входа, банов и Разрешённые адреса. Посетителей, которые попадают на тот же слушатель напрямую, это не затрагивает, потому что их адрес не входит в диапазоны Cloudflare. - DNS-запись. Включите проксирование только для этого имени хоста.
- Ссылки. Если порт Cloudflare отличается от порта слушателя, задайте Публичный адрес маршрута, например
https://sub.example.com, чтобы ссылки строились на нём без порта. - Собственные настройки Cloudflare для этого хоста.
- Не включайте «Cache Everything» и любое правило, которое кэширует все пути: подписки и API панели должны каждый раз доходить до панели.
- Не включайте проверки ботов на хосте подписок: приложение не может их пройти, и его запрос не удаётся.
- WebSockets должны оставаться включёнными, как по умолчанию: ими пользуются живые представления панели.
На бесплатном тарифе Cloudflare загрузка больше 100 МБ отклоняется, а запрос дольше 100 секунд обрывается. Восстанавливайте большую резервную копию через прямой адрес панели.
Другие CDN
Подойдёт любой CDN, который:
- пересылает HTTP или HTTPS на порт, на котором у панели есть слушатель;
- передаёт исходное имя хоста, а по TLS — то же имя в рукопожатии;
- записывает адрес посетителя в
X-Forwarded-For; - публикует адреса, с которых подключается, для Доверенные прокси;
- позволяет отключить кэширование подписок и API.
Нет доступа
Если изменение сделало панель недоступной, но всё же было подтверждено, верните адреса из командной строки сервера командой nx-panel ingress reset: она оставляет один слушатель на обычном HTTP с панелью на любом хосте. См. Командная строка.
См. также
- Подписки и страница подписки: куда ведут ссылки подписок.
- Сертификаты: сертификаты для слушателей.
- Безопасность: доверенные прокси и защита входа.
