Skip to content

Конфигурация сервера

Настройки сервера

jsonc
server {
  host = "0.0.0.0"
  http-port = 80
  https-port = 443
  ssl-mode = "DISABLED" # "DISABLED", "LETS_ENCRYPT", "MANUAL"
  redirect-https = false
  ssl-cert = null # Необработанное содержимое сертификата (если MANUAL)
  ssl-key = null  # Необработанное содержимое закрытого ключа (если MANUAL)
  ui-max-memory-mb = 200 # Макс. МБ на запускаемый UI-процесс; 0 отключает
  trusted-proxies = [] # напр. ["127.0.0.1", "10.0.0.5"] прокси, которым разрешён X-Forwarded-For
}
  • host: 0.0.0.0 делает панель доступной для внешних сетей; 127.0.0.1 ограничивает доступ только локальным сервером.
  • http-port: Порт по умолчанию для HTTP-трафика (обычно 80).
  • https-port: Порт по умолчанию для HTTPS-трафика (обычно 443).
  • ssl-mode:
    • DISABLED: Сервер HTTPS не будет запущен.
    • LETS_ENCRYPT: Автоматически пытается получить и настроить SSL-сертификат. Примечание: Для работы этого режима должен быть настроен правильный website-url, http-port должен быть установлен на 80, а https-port — на 443.
    • MANUAL: Позволяет вам предоставить собственный сертификат и закрытый ключ напрямую через ssl-cert и ssl-key.
  • redirect-https: Если установлено значение true, весь HTTP-трафик будет автоматически перенаправляться на HTTPS.
  • ui-max-memory-mb: Потолок памяти (МБ) для каждого запускаемого UI-процесса (setup-ui, panel-ui, активная тема); Pano перезапускает превысивший. По умолчанию 200, 0 отключает. См. Память и лимиты.
  • trusted-proxies: IP-адреса обратных прокси, которым разрешено задавать X-Forwarded-For. По умолчанию список пуст: заголовок игнорируется, и каждый запрос считается прямым подключением. Заполните его, если Pano работает за Nginx, Apache или Cloudflare, иначе функции, определяющие посетителя по адресу — например, блокировки входа режима обслуживания — увидят прокси, а не посетителя.
  • Для продвинутых пользователей: Для сложных настроек вы всё равно можете использовать reverse proxy (Nginx, Apache) или Cloudflare.

Обратный прокси: поддержание WebSocket-соединения

Каждый Minecraft-сервер, подключённый через pano-mc-plugin, держит долгоживущее WebSocket-соединение с GET /api/server/connection. Если Pano работает за обратным прокси (Nginx, Cloudflare, облачный балансировщик нагрузки), простаивающее WebSocket-соединение закрывается по тайм-ауту простоя самого прокси — у Nginx proxy_read_timeout по умолчанию равен 60 секундам — задолго до того, как Pano или плагин сами бы отказались от соединения. Логика переподключения плагина маскирует эту проблему (он просто переподключается), но каждое переподключение заново выполняет весь обмен ключами RSA/AES, поэтому соединение, выглядящее полностью здоровым, на самом деле тихо расходует CPU, засоряет логи переподключениями и открывает короткое окно, в котором сообщение «в пути» может быть потеряно.

Чтобы это предотвратить, ping отправляют обе стороны — плагин отправляет Pano собственные WebSocket-фреймы ping, а Pano отправляет плагину свои собственные ping-фреймы; каждая сторона делает это независимо и по своему расписанию, а на каждый входящий ping собеседник автоматически отвечает pong на уровне протокола WebSocket. Это keepalive на уровне протокола, вне слоя шифрования сообщений, который никогда не затрагивает полезную нагрузку AES-256-GCM. Этими двумя направлениями управляют две отдельные конфигурации — по одной на каждую сторону:

  • Ping плагина — две настройки в собственном config.conf плагина (в папке данных плагина Pano на Minecraft-сервере — не в конфигурации самого Pano, показанной в другом месте этой страницы):
    • heartbeat-interval: количество секунд между ping. По умолчанию 25.
    • heartbeat-timeout: сколько секунд ждать ответа, прежде чем соединение будет считаться мёртвым и плагин переподключится. По умолчанию 75.
    • Проверяется при запуске: heartbeat-interval должен быть больше 0 (верхней границы нет); heartbeat-timeout должен оставлять запас как на двойной интервал, так и на 10-секундный бюджет закрывающего рукопожатия — то есть heartbeat-timeout ≥ (2 × heartbeat-interval) + 10. Пара вне этих границ не мешает плагину загрузиться — записывается предупреждение, и оба значения возвращаются к умолчанию 25s / 75s.
  • Собственный ping Pano — блок mc-server-connection в собственном config.conf Pano, см. Подключение Minecraft-сервера:
    • heartbeat-interval-seconds: количество секунд между ping, которые Pano отправляет каждому подключённому Minecraft-серверу. По умолчанию 25.
    • heartbeat-timeout-seconds: сколько секунд ждать pong, прежде чем Pano сочтёт это соединение мёртвым и закроет его. По умолчанию 75.
    • Проверяется при запуске: heartbeat-interval-seconds должен быть больше 0 и не больше 55; heartbeat-timeout-seconds должен быть как минимум вдвое больше интервала. Пара вне этих границ не мешает Pano запуститься — записывается предупреждение, и оба значения возвращаются к умолчанию 25s / 75s.

Heartbeat помогает только в том случае, если тайм-аут простоя вашего прокси больше более короткого из двух интервалов выше. Если перед Pano работает Nginx, увеличивайте тайм-аут только для WebSocket-location — увеличение его на весь блок server также изменит, сколько Nginx ждёт при обычных HTTP-запросах, а это обычно нежелательно. Продублируйте в этом location и полный набор директив proxy_set_header: одноимённая директива на более низком уровне заменяет весь унаследованный набор, а не дополняет его, поэтому location, задающий только Upgrade/Connection, незаметно отбрасывает Host / X-Real-IP / X-Forwarded-For, заданные выше — в этом случае Pano запишет адрес каждого подключённого Minecraft-сервера как собственный IP прокси вместо настоящего, тихо сломав инструкции по trusted-proxies, приведённые выше на этой странице:

nginx
location /api/server/connection {
    # Замените 8080 на свой server.http-port из config.conf — НЕ используйте здесь 80, хотя это
    # значение по умолчанию: в этой конкретной настройке порт 80 слушает сам Nginx, поэтому
    # проксирование на 127.0.0.1:80 закольцуется обратно на Nginx, а не попадёт в Pano.
    proxy_pass http://127.0.0.1:8080;
    proxy_http_version 1.1;

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

    proxy_read_timeout 90s;
    proxy_send_timeout 90s;
    proxy_socket_keepalive on;
}

90 секунд оставляют 25-секундному heartbeat по умолчанию — с любой стороны — достаточный запас, прежде чем Nginx иначе закрыл бы простаивающий сокет.

Cloudflare и большинство облачных балансировщиков нагрузки применяют тот же класс тайм-аута простоя к проксируемым соединениям — см. Использование Pano за Cloudflare.

Инициализация, UI и обновления

jsonc
init-ui = true
accept-plugin-auth = true
jwt-key = "<auto-generated-base64>"
update-period = "ONCE_PER_DAY" # "ONCE_PER_DAY", "ONCE_PER_WEEK" или "ONCE_PER_MONTH"
release-channel = "RELEASE" # "ALPHA", "BETA", "RELEASE"
console-history-limit = 50

Детали

  • init-ui: запускает мастер настройки, панель и движок тем при запуске.
  • accept-plugin-auth: включает/отключает подключение плагина Pano MC (по умолчанию: true). Можно управлять в модальном окне Подключить сервер. Для лучшей безопасности отключайте его, если он не используется.
  • jwt-key: автоматически сгенерированный Base64 ключ аутентификациине изменяйте вручную.
  • update-period: определяет частоту проверки обновлений.
  • release-channel: определяет, какому потоку обновлений следует Pano:
    • ALPHA: Ранний доступ к новым функциям. Высокий риск ошибок и ломающих изменений.
    • BETA: Функции перед выпуском с меньшим риском, чем в Alpha, но всё еще могут содержать ошибки.
    • RELEASE: Самая стабильная версия. Получает обновления реже, но обеспечивает максимальную надежность.
  • console-history-limit: определяет максимальное количество команд, хранящихся в истории терминала и графического интерфейса консоли (по умолчанию: 50, установите 0 для отключения).

Загрузка файлов и пути

jsonc
file-uploads-folder = "file-uploads"

file-paths = {
  favicon {
    path = "uploads/favicon.png"
    hash = "<sha256-hash>"
  }
  websiteLogo {
    path = "uploads/logo.png"
    hash = "<sha256-hash>"
  }
}

Примечания

  • Управляется через Панель → Настройки → Веб-сайт.
  • Каждая запись — это объект FileInfo, содержащий:
    • path: Относительный путь к файлу.
    • hash: Хэш SHA-256, используемый Pano для проверки целостности файла.
  • Поддерживаются только две записи: favicon и websiteLogo.
  • Эти поля автоматически управляются Pano — ручные изменения будут перезаписаны при обновлении или изменении настроек.

URL-адреса сервисов Pano (не изменять)

jsonc
pano-api-url = "..."     # устанавливается автоматически в зависимости от среды
pano-website-url = "..."
  • Эти адреса управляются Pano автоматически.
  • Изменение этих параметров может нарушить связь с экосистемой Pano.

Прогресс настройки (внутренний)

jsonc
setup {
  step = 0
}

Использование

  • Отслеживает прогресс установки.
  • Всегда останавливайте Pano перед редактированием.
  • step = 0: перезапускает мастер настройки.
  • step = 5: отмечает настройку как завершенную.
  • Редактируйте только по указанию службы поддержки; неправильные изменения могут привести к поломке установки.