> ## 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.

# Where the pack is hosted

> Hand the pack to Hermes, Polymath or S3, or serve it from your proxy.

One setting on the proxy decides this for the whole network.

<Tabs>
  <Tab title="From an external host (default)">
    One backend uploads the pack to an external host and every server hands players
    that link instead. Nothing of yours faces the internet, so there is no port to open
    and no address to get right.

    ```yaml theme={null}
    packs:
      host: hermes
    ```

    This is what a fresh install does. Hermes is Nexo's own host and needs no account
    and no keys, so it works as soon as you install NexoHub. To use a different host,
    configure it the normal Nexo way under `Pack.server` in the `settings.yml` you
    already distribute.
  </Tab>

  <Tab title="From your proxy">
    NexoHub serves the pack itself, with no external service involved.

    ```yaml theme={null}
    packs:
      host: proxy
    ```

    This costs you two things the default does not: `http.port` has to be reachable by
    players, and `http.public_address` has to be right from outside your own network.
    Players connect to your proxy's address to download the pack, so that address is
    visible to them. See [what faces the internet](/guides/exposure) for what else is
    on that port.
  </Tab>
</Tabs>

## Choosing a host

| `delegate` | What you need | Multipack |
| - | - | - |
| `HERMES` | nothing, and it is the default | works |
| `S3` | a bucket and keys (AWS, Cloudflare R2, Backblaze, Hetzner) | works |
| `POLYMATH` | nothing, it is free and needs no account | partial, see below |
| `LOBFILE` | an API key | partial, see below |

Only one server uploads. The others see it has already been done and use the same link,
so players get one pack and one download however many servers you run.

## If you use multipack

Nexo builds the link for each template pack out of the main pack's link. That works for
hosts whose links contain the pack's ID, which covers hosting from your proxy, S3 and
Hermes.

Polymath and Lobfile return a link that does not, so Nexo cannot build the template links
from it. Template packs still work for players those hosts can identify, but not on the
pre-join screen. The default `HERMES` is not one of them, so this only comes up if you
switch.

NexoHub checks the real links after every upload and tells you if any of them fail:

```
[nexohub] pvp reports that its multipack template URLs do not resolve. Players there
will silently receive the main pack. See /nexohub status.
```

It also shows against that server in `/nexohub status`:

```
  pvp [2p] bundle 5d935602 in sync
      pack 3094361a  Nexo 1.26.0/26.2  (last heard 6s ago)
      multipack template URLs do not resolve, players get the main pack instead
```

`/nexohub doctor` names the case in advance, before anyone has to notice it in game:

```
  note POLYMATH returns an opaque URL, so Nexo cannot build multipack template links
```

<Note>
  This is a Nexo limitation rather than a NexoHub one, so switching hosts is the only fix.
</Note>

## Checking players can actually reach it

This section is about `host: proxy`. On the default delegated hosting there is no
address of yours to check, which is most of why it is the default.

The address you hand players is the one setting whose being wrong is invisible from
inside your own network. `/nexohub doctor` fetches it from outside and says:

```
  ok   players can reach http://your.proxy.address:8085
```

```
  bad  nothing answered at http://your.proxy.address:8085; check the address, the port and the firewall
```

It is hitting `/hub/v1/health`, a route that needs no secret and returns the string
`nexohub`. You can open it in a browser yourself.

When hosting is delegated, `public_address` is not used at all and doctor says so
instead of testing it.

## Keeping your proxy address private without an external host

Put a reverse proxy or CDN like Cloudflare in front of NexoHub and point
`public_address` at that instead. It gets you TLS at the same time, which is worth
having: see [what faces the internet](/guides/exposure#tls).

<Warning>
  Cloudflare only proxies certain ports: 8080, 8443, 2052, 2053, 2082, 2083, 2086, 2087,
  2095, 2096 and 8880. The default 8085 is not one of them, so change `http.port` if you
  go this route.
</Warning>


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