> ## Documentation Index
> Fetch the complete documentation index at: https://nexohub.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Что смотрит в интернет

> Какие маршруты публичны, что защищает секрет и где место TLS.

На свежей установке ничего здесь не смотрит в интернет. Пак уходит на хост Hermes от
Nexo, и игроки скачивают его оттуда, так что собственный порт NexoHub несёт только
трафик ваших бэкендов к прокси и может оставаться за вашим файрволом.

Эта страница о том, что меняется, когда вы устанавливаете `packs.host: proxy` и раздаёте
пак с прокси самостоятельно. Тогда порт должен быть открыт, потому что именно оттуда
игроки скачивают пак, и трафик ваших бэкендов по умолчанию идёт через тот же открытый
порт.

## Два вида маршрутов

| Маршрут | Кто его вызывает | Секрет |
| - | - | - |
| `/hub/v1/pack/<hash>.zip` | клиент Minecraft игрока | нет |
| `/hub/v1/health` | вы и `/nexohub doctor` | нет |
| всё остальное | ваши бэкенды | да |

Загрузку пака нельзя защитить секретом, потому что клиенту Minecraft просто вручают
ссылку. Пак — не секрет, так что это вам ничего не стоит.

`/hub/v1/health` возвращает слово `nexohub` и ничего больше. `/nexohub doctor`
использует его, чтобы проверить, действительно ли адрес, который вы раздали игрокам,
достигает вашего прокси — единственное, что нельзя проверить изнутри собственной сети.

Всё остальное требует секрет, а запрос без него отклоняется и логируется вместе с
адресом, с которого он пришёл:

```
[nexohub] Rejected GET /hub/v1/bundle/pvp/current from 203.0.113.9, X-Hub-Secret header missing or wrong.
```

## Секрет

NexoHub генерирует 40-символьный секрет при первом запуске, записывает его в
`config.yml` и печатает один раз. Каждый бэкенд получает один и тот же.

Относитесь к нему как к паролю. Его хранит каждый бэкенд, так что любой, кто проникнет
на один из ваших бэкендов, может читать и писать что угодно на хабе. Именно поэтому
`/nexohub adopt` требует большего, чем секрет: команда работает только в пятиминутном
окне, которое вы открываете её запуском, так что бэкенд не может самостоятельно
перезаписать файлы всей вашей сети.

Смена секрета означает смену на прокси и на каждом бэкенде, а затем `/nexohub reload`.

## Разделение портов

При `host: proxy` ваши бэкенды разговаривают с прокси на том же порту, с которого
скачивают игроки. Это работает, но означает, что эти маршруты тоже достижимы из
интернета. (При делегированном хостинге по умолчанию разделять нечего: ни один порт
здесь изначально не открыт для игроков, и `/nexohub doctor` так и говорит вместо того,
чтобы предлагать это.)

Дайте бэкендам собственный порт:

```yaml theme={null}
http:
  bind: 0.0.0.0
  port: 8085              # players
  public_address: "http://your.proxy.address:8085"

  api_address: 8086       # backends
```

Затем направьте каждый бэкенд на этот слушатель:

```yaml theme={null}
# backend: plugins/NexoHubBridge/config.yml
hub:
  address: "http://your.proxy.internal:8086"
```

`public_address` по-прежнему описывает публичный порт, потому что именно он попадает в
ссылку на ресурс-пак.

<Note>
  Голый порт означает loopback, так что достучаться до него могут только бэкенды на той
  же машине, что и прокси. Если ваши находятся в другом месте, укажите адрес, который они
  могут достичь: `api_address: "10.0.0.1:8086"`, а остальное пусть сделает ваш файрвол.

  Игроки по-прежнему могут скачивать пак на любом из двух портов, так что для них ничего
  не ломается.
</Note>

`/nexohub doctor` сообщает, какой из двух вариантов у вас работает:

```
  note the authenticated API shares the public port 8085; set http.api_address to separate them
```

```
  ok   the authenticated API is on 127.0.0.1:8086, off the public port
```

Это `note`, а не `bad`. Общий порт — значение по умолчанию, и для небольшой сети это
нормальный выбор, но вы должны знать, что у вас именно он.

## TLS

NexoHub говорит на простом HTTP и не имеет настроек сертификатов.

Это означает, что секрет передаётся в открытом виде каждый раз, когда бэкенд общается с
прокси. Если они на одной машине или в одной приватной сети, этот трафик никуда не
уходит, и это не имеет значения. Если они на разных машинах через интернет, поставьте
перед ними обратный прокси.

nginx, Caddy или Cloudflare стоит иметь в любом случае:

* он добавляет TLS, так что загрузка пака и трафик ваших бэкендов перестают быть
  открытым текстом
* он не даёт адресу вашего прокси попасть в ссылку на ресурс-пак, потому что
  `public_address` указывает на обратный прокси
* он может ограничивать частоту скачиваний, чего NexoHub не делает

<Warning>
  Cloudflare проксирует только определённые порты: 8080, 8443, 2052, 2053, 2082, 2083,
  2086, 2087, 2095, 2096 и 8880. Порт по умолчанию 8085 в их число не входит, так что
  измените `http.port`, если пойдёте этим путём. См. [хостинг](/ru/guides/hosting).
</Warning>

Если вы предпочитаете вообще не раздавать адрес своего прокси, оставьте хостинг
делегированным внешнему хосту — так делает свежая установка. Тогда ни один игрок никогда
его не резолвит, а `public_address` перестаёт иметь значение. Хаб всё равно слушает, так
что порт всё равно стоит закрыть для всех, кроме ваших бэкендов. См.
[хостинг](/ru/guides/hosting).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.