+16

![github-actions[bot]](/avatar/e7cd911927c7d1acf6281b69d385990d8fadcd26871048bbcdbff2e88da7f607?size=40)






078446694c
* Begin testing i18n Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Add crowdin in-context demo for non-mdx Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Add crowdin-sync system Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Working sync system for translations Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Only build en locale for PRs Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Modify yarn install Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Do not immute cache Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Try with standard yarn install Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Revert to yarn --immutable Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Remove explicit url/file-loader resolutions Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Only log webpack errors Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Added MCServerHost to hosting providers (#47) * Added MCServerHost to hosting providers * Update providers.ts * Correct grammar and make instructions more concise --------- Co-authored-by: Kas-tle <26531652+Kas-tle@users.noreply.github.com> * Update supported Bedrock versions * Remove and Replace "TydiumCraft Skin API" (#53) * Update community-geyser-projects.md I no longer will run TydiumCraft Skin API. I have no interest in continuing it at this time (or anything minecraft related). However I have switched out the spot with an API that 100% is always updated and active. Hosted by my good friend Bret06. This works so much better as well. Thanks for everything over the years guys! Tydium out! * Update wiki/other/community-geyser-projects.md 👍 Co-authored-by: chris <github@onechris.mozmail.com> --------- Co-authored-by: chris <github@onechris.mozmail.com> * Update wording for creepernation api Update wording because it’s bothering me * Update GeyserExtras description (#52) * Update community-geyser-projects.md * Update wiki/other/community-geyser-projects.md Co-authored-by: chris <github@onechris.mozmail.com> --------- Co-authored-by: Luke <32024335+lukeeey@users.noreply.github.com> Co-authored-by: chris <github@onechris.mozmail.com> * Try matrix build strategy Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Fix matrix output Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Matrix goes to GITHUB_OUTPUT Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Fix deploy needs to combine Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Ensure correct commit is used if crowdin updates Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Make sure excluded content is respected Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Allow permission for commit action write Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Sync translations with Crowdin * Update index.md to make clear that this is for servers, not purely for clients (#57) * Update providers.ts (#58) * Update providers.ts VemoxHost added * Maintain alphabetized list --------- Co-authored-by: Kas-tle <26531652+Kas-tle@users.noreply.github.com> * Start on re-writing the providers page to provide more useful details to improve the setup guide * more work on this * Rework paper page for setup * Don't try and build paper setup as a full page * adjust not listed message * update mod/proxy pages * Initial setup i18n Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Add ability to hide proxy setup instructions by provider Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Temporary auto deployment; fix broken links Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Fix heading consistency Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Update language on provider instructions * Update language on new provider instructions * Upgrade actions/setup-node due to hang issue * Both * Forgot how many times we setup node... * Documentation for changes in API/2.6.2 (#62) * Document latest Geyser changes: - remote resource packs * Update/Finish pack docs * small typo fixes * Update page content * fix build * Update supported Bedrock version * Add Modrinth Servers to providers (#63) * Update supported versions & api version * Update versions.json to include 1.21.72 (#64) * Update bedrock version (#67) * Add 'we are not mojang' disclaimer to footer * Stop translations from overriding footer message Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Fix Standalone dump view (#68) * Add OrionNodes to providers (#69) * Update supported Bedrock versions in versions.json (1.21.81, 1.21.82) (#70) * Update faq.mdx to include recommended API (#73) Tydium skin API is abandoned, please direct users to a working API such as the one recommended by Tydium Derived from: https://github.com/GeyserMC/GeyserWebsite/commit/19ae50f95ddbfc24ff34a42d278bdc263e0200e6 * Update anticheat-compatibility.md (#74) * Update versions.json * Update versions.json (#75) * Remove LAC because it is no longer being maintained (#76) * Update versions.json for 1.21.7 (#77) * Update versions.json for 1.21.93 (#78) * Update versions.json for 1.21.94 (#79) * Update versions.json for Java 1.21.8 (#80) * Update Geyser Api version (#81) * Readd Hydraulic and add Rainbow, provide Item API V2 warning for Hydraulic (#82) * Fix incorrect Ubuntu on Oracle Cloud instructions (#84) * Remove Geyser Android App and Tempest (#83) * Update version.json for 1.21.100 (#88) * Update getting-started-with-the-api.md (#89) * Add and update wiki pages, add Thunder download. (#90) * Add a Thunder and Rainbow wiki page, touch up some other pages * Fix mobile sidebar * Address review 1/2 * Address review 1.5/2 (oops) * Address review 2/2 Co-authored-by: chris <github@onechris.mozmail.com> --------- Co-authored-by: chris <github@onechris.mozmail.com> * Indicate 1.21.101 on the Geyser Website (#93) * Added GeyserFloatingPoints to FAQ (#92) * Added GeyserFloatingPoints. * Update wiki/geyser/faq.mdx Co-authored-by: chris <github@onechris.mozmail.com> --------- Co-authored-by: chris <github@onechris.mozmail.com> * Update versions.json to indicate support for bedrock 1.21.111 * Update versions.json for Java 1.21.9/1.21.10 (#97) * Update versions.json for Java 1.21.9 * Update versions.json to include 1.21.10 * Update supported Bedrock version --------- Co-authored-by: Aurorawr <auroranova8756@gmail.com> Co-authored-by: chris <github@onechris.mozmail.com> * Update extensions file for new dependency system (#98) * Update extensions file for new dependency system * Update version * Update wiki/geyser/extensions.md --------- Co-authored-by: chris <github@onechris.mozmail.com> * Replace the Crowdin link with the current one (#101) * Replace the Crowdin link with the current one * Replace the link with the subdomain redirect * Update versions.json to include 1.21.114 (#102) * Update rainbow.md to indicate 1.21.9/.10 (#103) * Revise port forwarding instructions for Ubuntu Updated instructions for allowing Minecraft and Geyser through the OS firewall on Ubuntu. * Update providers and deploy action Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Sync translations with Crowdin * Correct providers syntax Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Use more templates wherever possible * Add build cache; update docusaurus-og Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Test deploy time with cache hit Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Use read-only cache for matrix build Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Unlikely we will use gh actions on arm... Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * This time cache will hit Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Hopefully correct yarn cache path... Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Maybe npm? Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Surely... Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * This time... Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Include yarn/docusaurus cache for PRs Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Add page IDs to more pages, fix broken pages * Update i18n pages * Sync translations with Crowdin * Add missing support pages and articles on providers, add Discord links * Add blog post on preparing Geyser servers for NetherNet Drafted with the help of Claude Opus 5.5. * Rewrite the hosted setup guide for NetherNet, add hosting page Provider entries now describe ports, signaling and install steps, grouped in the order the setup guide shows them. The guide generates the NetherNet config from them, and the old supported hosting providers list is replaced by a hosting page for Open Collaboration supporters. Drafted with the help of Claude Opus 5.5. * Rewrite the self-hosted setup guides for NetherNet The self-hosting pages now use the same steps and generated config as the hosted guide, and point out that the Geyser port needs both TCP and UDP. Drafted with the help of Claude Opus 5.5. * Add HTTPS for NetherNet page Covers serving built-in signaling over HTTPS, with a certificate in the Geyser config or with a reverse proxy (Caddy, nginx). Drafted with the help of Claude Opus 5.5. * Skip Crowdin sync in deploy workflow when no token is set Forks do not have the Crowdin secrets, so the sync step failed there and nothing got deployed. Without a token, the workflow now builds and deploys the pushed commit as is. Drafted with the help of Claude Opus 5.5. * Address: rtm's comments * Improve layout, drop confusing 26.40 note on setup guide * Cleanup blog post language / line breaks * Merge proxy server guides for server hosts, adjust exarotron provider entry, adjust setup guides to work with crowdin * Split the proxy setup guides back into Velocity and BungeeCord Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Update hosting providers to upstream and collapse strings into defaults Port upstream's provider changes to the new format: add Minehost and ConsulHosting, update MCServerHost, rename Feather to Dawn and Modrinth Servers to Modrinth Hosting, merge RamShard into RackGenius, add MyArena, and drop hosts upstream removed. Restore link fixes the rewrite undid and install details dropped from the live page. Replace host-specific strings with templates or the generated steps where they say the same thing. Hosts that pick the port themselves show where it comes from instead of the config step. Hosts without NetherNet details that shared the Java server's port now ask for a new port, open for both TCP and UDP, and the generated config turns clone-remote-port off. Hosts that cannot give out a port fall back to the "Not listed" guide for the Java server's port, which uses Warden. BisectHosting no longer uses assumed example data. Entries keep the date of their last edit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Remove Dawn and date Aternos and exaroton today Dawn now integrates with Aternos, so it no longer needs its own entry. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Remove unused translation strings and fix the English GeyserConnect text Drop keys the code no longer uses from every locale: the old EmoteOffhand description ID, the theme's old unlisted content strings, strings removed on this branch, and the removed Custom Resource Packs sidebar category. The English GeyserConnect description had an outdated message that overrode the current one on the English site. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Hide the NetherNet and RakNet option when only the Java port is available With only the Java server's port there is no second UDP port for RakNet, so the "Not listed" Java port guide shows the NetherNet config without transport tabs. Drop the placeholder text that only applied there. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Add an HTTPS step to the self-hosted guides and correct external signaling HTTPS claims Self-hosted guides end with a recommended step to serve signaling over HTTPS, since Geyser's built-in signaling uses plain HTTP by default and players get a "Trust on First Use?" prompt. External signaling services do not all provide HTTPS, so the blog post and HTTPS page now name Warden as one that does instead of implying all do. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Update port forwarding guide, update OVH note * Sync translations with Crowdin * Hide entire placeholder strings and correcntly mark chrome json in crowdin Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Update actions and yarn Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Sync translations with Crowdin * Apply batched suggestions from code review Co-authored-by: Eclipse <eclipse@eclipseisoffline.xyz> * Fix NetherNet docs for the final Geyser PR - Built-in signaling serves HTTPS instead of HTTP once a certificate is configured (blog, system properties) - "Free port" is now "available port" in the blog - System properties: drop the removed "none" signaling mode, fix the signaling port default - playit.gg: note that the guide is for RakNet, and link playit.gg's NetherNet progress Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Build the setup guides from translation strings The per-platform setup pages are replaced by SetupGuide.tsx, which renders the hosted and self-hosted guides from shared MDXTranslatable strings, so Crowdin translates each sentence once instead of every page separately. Also: - "Not listed" with only the Java port sets mode: nxs instead of relying on Geyser's fallback - The playit.gg note links playit.gg's NetherNet progress instead of describing a setup - "free port" is now "available port" Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Remove the trustedProxies.fetch system property for now Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Fix crowdin sync and don't translate trade names Signed-off-by: GitHub <noreply@github.com> * Sync translations with Crowdin * Fix build Signed-off-by: GitHub <noreply@github.com> * Sync translations with Crowdin * Address more concerns with nethernet https guide Signed-off-by: GitHub <noreply@github.com> * Fix signaling-trusted-proxies config in nethernet https article Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Remove port forwarding from the HTTPS guide Ports are already covered by the setup guide, and HTTPS does not change which ports need to be opened. Reverse proxies now use signaling-trusted-proxies, which reads X-Forwarded-For. * Remove placeholder hosts, hide the hosting page until it launches - Remove the placeholder hosts and their logos - Aternos and exaroton are bronze supporters: highlighted with a badge in the setup guide, without a "last updated" date, but not listed on the hosting page, which only shows gold and silver - Hide the hosting page and its links for now, and mention in the blog post that it is coming soon * Supporting hosts configure Geyser, they do not install it * Sync translations with Crowdin * Move nethernet https guide up on sidebar * Update to docusaurus 3.10 and fix all type errors Signed-off-by: GitHub <noreply@github.com> * HTTP and HTTPS do not both run at once * Link win-acme's and nginx's own Windows guides in the HTTPS guide * Fix crowdin key exclusion logic Signed-off-by: GitHub <noreply@github.com> * Sync translations with Crowdin * Address reviews, clear up instructions for users. Adds info on haproxy, NXS and MOTD forwarding * Note certificate permissions and where to save the Caddyfile * Sync translations with Crowdin * Document the geyser nethernet command * Sync translations with Crowdin * Support directly linking to the "not listed" or a specific hosts' guide * Mention warden supporting custom domains * Add HOSTING_PROVIDERS.md, update existing server host setup entries to reduce translation strings used * Sync translations with Crowdin --------- Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Signed-off-by: GitHub <noreply@github.com> Co-authored-by: Yara Durand <87721861+Roolps@users.noreply.github.com> Co-authored-by: chris <github@onechris.mozmail.com> Co-authored-by: Tydium <67938521+Tydium@users.noreply.github.com> Co-authored-by: Creeperz653 <76449952+Creeperz653@users.noreply.github.com> Co-authored-by: LetsGoAway <68365423+letsgoawaydev@users.noreply.github.com> Co-authored-by: Luke <32024335+lukeeey@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Dan <20766261+D4n2021@users.noreply.github.com> Co-authored-by: santevemox <57247088+santevemox@users.noreply.github.com> Co-authored-by: rtm516 <ryantmilner@hotmail.co.uk> Co-authored-by: Emma Alexia <wafflecoffee7@gmail.com> Co-authored-by: Alex <zomka@fard.ing> Co-authored-by: Aurorawr <100384210+Novampr@users.noreply.github.com> Co-authored-by: Jens Collaert <63231928+Jens-Co@users.noreply.github.com> Co-authored-by: OrionNodes <ethan@orionnodes.com> Co-authored-by: SylentHuntress <91935048+sylenthuntress@users.noreply.github.com> Co-authored-by: oryxel <gamingnoob681@gmail.com> Co-authored-by: Eclipse <eclipse@eclipseisoffline.xyz> Co-authored-by: Nebojsa Majic <79749977+Onako2@users.noreply.github.com> Co-authored-by: qscbm187531 <1309635304@qq.com> Co-authored-by: Eveline Carter <6444703+drakon64@users.noreply.github.com> Co-authored-by: SleepyPop <81194303+SleepyPopp@users.noreply.github.com> Co-authored-by: Aurorawr <auroranova8756@gmail.com> Co-authored-by: rtm516 <rtm516@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
377 lines
14 KiB
Plaintext
377 lines
14 KiB
Plaintext
---
|
|
title: HTTPS for NetherNet
|
|
description: >-
|
|
Remove the "trust on first use" prompt for Bedrock players by serving Geyser's
|
|
NetherNet signaling over HTTPS, with Caddy, nginx, or Geyser itself.
|
|
crowdin_page_id: fda8d3de-ab72-4d59-bc5c-ec34df34b9be
|
|
---
|
|
|
|
import Tabs from '@theme/Tabs';
|
|
import TabItem from '@theme/TabItem';
|
|
|
|
# HTTPS for NetherNet
|
|
|
|
Geyser's built-in signaling server uses plain HTTP by default. Over plain HTTP, Minecraft cannot verify which server it is talking to,
|
|
so it prompts each Bedrock player on the first join whether they want to trust the server the first time they join ("trust on first use").
|
|
Over HTTPS, the server's certificate proves its identity, so Minecraft does not show this prompt.
|
|
|
|
This page is for people who **host Geyser themselves**. When using a hosting provider, ask your host instead for how you could use HTTPS.
|
|
To learn what signaling is, read [Preparing your Geyser server for NetherNet](/blog/preparing-for-nethernet).
|
|
|
|
:::info Only for built-in signaling
|
|
This page only matters if Geyser is configured to use **built-in signaling**: `mode` in the `signaling` section is `builtin` (the default) or `hybrid`.
|
|
:::
|
|
|
|
## What you need {#what-you-need}
|
|
|
|
1. **A domain name** that points to your server, like `play.example.com`.
|
|
Players must connect with this name, not with an IP address, because the certificate is made for the name.
|
|
If you do not have a domain, you could use a DDNS provider such as [DuckDNS](https://www.duckdns.org) to obtain a free one, like `myserver.duckdns.org`.
|
|
2. **A working NetherNet setup** without HTTPS. Make sure players can join first, then add HTTPS.
|
|
3. **A certificate for that domain.** If you already have one, you can use it as is.
|
|
Otherwise, you could use [Let's Encrypt](https://letsencrypt.org) to obtain one for free. The steps below do this with Caddy, certbot or win-acme,
|
|
which need TCP port 80 to be reachable from the internet while obtaining and renewing certificates.
|
|
Forward it in your router like your Geyser port. Let's Encrypt's DNS challenge works without port 80, but is not covered here.
|
|
|
|
## Setting up HTTPS {#setting-up-https}
|
|
|
|
Geyser can serve HTTPS itself with a certificate set in its config. Alternatively, a reverse proxy such as Caddy or nginx can handle HTTPS in front of Geyser.
|
|
If you would rather not manage a certificate at all, [external signaling](/wiki/geyser/geyser-command-line-arguments-and-system-properties#nethernet-system-properties) (`mode: nxs`) is an option as well, if the signaling service provides HTTPS: [Warden](https://warden.cloud) does, but not every service does.
|
|
|
|
<Tabs groupId="https-method" queryString="method">
|
|
<TabItem value="geyser" label="Certificate in the Geyser config" default>
|
|
|
|
Geyser serves HTTPS on the same port as HTTP, so no extra port is needed. Geyser reads the certificate when it starts, so it needs a restart or run of `geyser reload` after every renewal.
|
|
|
|
**1. Obtain a certificate**
|
|
|
|
If you already have a certificate for your domain, skip this step.
|
|
Otherwise, you could use [Let's Encrypt](https://letsencrypt.org) to obtain one, for example with certbot or win-acme. These need TCP port 80 to be reachable.
|
|
|
|
<Tabs groupId="operating-system">
|
|
<TabItem value="linux" label="Linux" default>
|
|
|
|
On Linux, certbot is the recommended way to obtain certificates from Let's Encrypt. Follow the instructions over at [certbot's website](https://certbot.eff.org/instructions) to see how.
|
|
|
|
</TabItem>
|
|
<TabItem value="windows" label="Windows">
|
|
|
|
Certbot [no longer supports Windows](https://community.letsencrypt.org/t/certbot-discontinuing-windows-beta-support-in-2024/208101), so use win-acme instead.
|
|
Follow the instructions over at [win-acme's website](https://www.win-acme.com) to see how.
|
|
Store the certificate as PEM encoded files, so Geyser can read them.
|
|
|
|
</TabItem>
|
|
<TabItem value="macos" label="macOS">
|
|
|
|
On macOS, certbot is the recommended way to obtain certificates from Let's Encrypt. Follow the instructions over at [certbot's website](https://certbot.eff.org/instructions) to see how.
|
|
|
|
</TabItem>
|
|
</Tabs>
|
|
|
|
**2. Configure Geyser**
|
|
|
|
Set the files in the `signaling` section of the Geyser config. With win-acme, use the `-chain.pem` and `-key.pem` files instead.
|
|
Make sure Geyser can read these files. On Linux, certbot's files in `/etc/letsencrypt` can only be read by root, so if Geyser runs as another user, give it access to them, or copy them somewhere Geyser can read them after every renewal.
|
|
|
|
```yaml
|
|
bedrock:
|
|
signaling:
|
|
builtin:
|
|
https:
|
|
certificate: /path/to/fullchain.pem
|
|
private-key: /path/to/privkey.pem
|
|
password: ''
|
|
```
|
|
|
|
- Paths can be relative to Geyser's config folder, or absolute.
|
|
- A PKCS12 file (`.p12` or `.pfx`) works as well: put it in `certificate`, leave `private-key` empty, and set its `password`.
|
|
Use `file:/path/to/password.txt` to keep the password out of the config.
|
|
|
|
:::caution Restart or reload after renewing
|
|
|
|
After a renewal, restart the server or run `geyser reload`, or players will get an expired certificate.
|
|
|
|
:::
|
|
|
|
</TabItem>
|
|
<TabItem value="proxy" label="Reverse proxy">
|
|
|
|
A reverse proxy sits in front of Geyser. It handles HTTPS, and passes signaling on to Geyser.
|
|
Gameplay (UDP) still goes straight to Geyser.
|
|
|
|
```mermaid
|
|
flowchart LR
|
|
Player([Player])
|
|
Proxy[Caddy / nginx]
|
|
Geyser[Geyser]
|
|
|
|
Player -- "TCP 19132 (HTTPS)" --> Proxy
|
|
Proxy -- "TCP 19133 (HTTP)" --> Geyser
|
|
Player -. "UDP 19132 (playing)" .-> Geyser
|
|
```
|
|
|
|
**1. Prepare Geyser**
|
|
|
|
The reverse proxy uses TCP port 19132, so Geyser's signaling has to move to another port, like 19133. Players keep using port 19132.
|
|
The ports you forward stay the same: port 19133 is only used on your machine, so do not open it.
|
|
|
|
Set these values in the `bedrock` section of the Geyser config:
|
|
|
|
```yaml
|
|
bedrock:
|
|
port: 19133
|
|
webrtc-port: 19132
|
|
```
|
|
|
|
`port` is now the port signaling used behind the proxy, and `webrtc-port` keeps gameplay on UDP 19132.
|
|
|
|
Then tell Geyser to trust the proxy, so it reads each player's real address from the `X-Forwarded-For` header. Add this to the `advanced` section of the config:
|
|
|
|
```yaml
|
|
advanced:
|
|
bedrock:
|
|
signaling-trusted-proxies:
|
|
- 127.0.0.1
|
|
```
|
|
|
|
Leave `address` in the `bedrock` section at `0.0.0.0`. NetherNet does not work if Geyser only listens on `127.0.0.1`.
|
|
|
|
**2. Set up the proxy**
|
|
|
|
<Tabs groupId="reverse-proxy">
|
|
<TabItem value="caddy" label="Caddy" default>
|
|
|
|
Caddy can obtain and renew certificates from Let's Encrypt by itself.
|
|
|
|
**2.1. Install Caddy**
|
|
|
|
You can install Caddy by following its [installation guide](https://caddyserver.com/docs/install).
|
|
|
|
**2.2. Write the Caddyfile**
|
|
|
|
Save this as `/etc/caddy/Caddyfile` on Linux, as `$(brew --prefix)/etc/Caddyfile` on macOS, or as `C:\caddy\Caddyfile` next to `caddy.exe` on Windows.
|
|
Replace `play.example.com` with your domain:
|
|
|
|
```caddyfile title="Caddyfile"
|
|
{
|
|
servers {
|
|
# Caddy would otherwise use UDP 19132 for HTTP/3, which Geyser needs for playing
|
|
protocols h1 h2
|
|
}
|
|
}
|
|
|
|
play.example.com:19132 {
|
|
reverse_proxy 127.0.0.1:19133
|
|
}
|
|
```
|
|
|
|
On its first start, Caddy will attempt to obtain a certificate for your domain, and will renew it automatically when necessary. This requires port 80 to be reachable.
|
|
To use an existing certificate instead, add `tls /path/to/fullchain.pem /path/to/privkey.pem` inside the `play.example.com:19132` block.
|
|
|
|
**2.3. Start Caddy**
|
|
|
|
<Tabs groupId="operating-system">
|
|
<TabItem value="linux" label="Linux" default>
|
|
|
|
```bash
|
|
sudo systemctl enable --now caddy
|
|
# after changing the Caddyfile:
|
|
sudo systemctl reload caddy
|
|
# to see what Caddy is doing:
|
|
journalctl -xb -u caddy
|
|
```
|
|
|
|
</TabItem>
|
|
<TabItem value="windows" label="Windows">
|
|
|
|
In a PowerShell window opened with **Run as administrator**, from the folder with `caddy.exe`:
|
|
|
|
```powershell
|
|
.\caddy.exe run
|
|
```
|
|
|
|
To start Caddy automatically with Windows, install it as a service:
|
|
|
|
```powershell
|
|
sc.exe create caddy start= auto binPath= "C:\caddy\caddy.exe run --config C:\caddy\Caddyfile"
|
|
sc.exe start caddy
|
|
```
|
|
|
|
</TabItem>
|
|
<TabItem value="macos" label="macOS">
|
|
|
|
```bash
|
|
brew services start caddy
|
|
# after changing the Caddyfile:
|
|
brew services restart caddy
|
|
```
|
|
|
|
</TabItem>
|
|
</Tabs>
|
|
|
|
</TabItem>
|
|
<TabItem value="nginx" label="nginx">
|
|
|
|
nginx does not obtain certificates by itself. If you do not have one yet, you could use certbot or win-acme to obtain one from Let's Encrypt.
|
|
|
|
**2.1. Install nginx, and obtain a certificate**
|
|
|
|
<Tabs groupId="operating-system">
|
|
<TabItem value="linux" label="Linux" default>
|
|
|
|
Follow nginx's [installation guide](https://nginx.org/en/docs/install.html), you likely want to install nginx from a package using your distribution's package manager.
|
|
|
|
If you need a certificate, certbot is the recommended way to obtain certificates from Let's Encrypt on Linux. Follow the instructions over at [certbot's website](https://certbot.eff.org/instructions) to see how. Select "Nginx" as software.
|
|
|
|
</TabItem>
|
|
<TabItem value="windows" label="Windows">
|
|
|
|
Follow nginx's [guide for Windows](https://nginx.org/en/docs/windows.html) to install it. The steps below assume it is in `C:\nginx`.
|
|
|
|
If you need a certificate, certbot no longer supports Windows, so use win-acme instead. Follow the instructions over at [win-acme's website](https://www.win-acme.com) to see how,
|
|
and store the certificate as PEM encoded files in `C:\nginx\certs`. After a renewal, reload nginx with `C:\nginx\nginx.exe -s reload`.
|
|
|
|
</TabItem>
|
|
<TabItem value="macos" label="macOS">
|
|
|
|
Install nginx on macOS using the Homebrew package manager:
|
|
|
|
```bash
|
|
brew install nginx
|
|
```
|
|
|
|
If you need a certificate, certbot is the recommended way to obtain certificates from Let's Encrypt on macOS. Follow the instructions over at [certbot's website](https://certbot.eff.org/instructions) to see how. Select "Nginx" as software.
|
|
Your nginx config folder can be found by running:
|
|
|
|
```bash
|
|
echo "$(brew --prefix)/etc/nginx/servers/"
|
|
```
|
|
|
|
</TabItem>
|
|
</Tabs>
|
|
|
|
**2.2. Configure nginx**
|
|
|
|
<Tabs groupId="operating-system">
|
|
<TabItem value="linux" label="Linux" default>
|
|
|
|
Create a file called `geyser.conf` in `/etc/nginx/conf.d/`. If you already have a certificate, point `ssl_certificate` and `ssl_certificate_key` to its files.
|
|
|
|
```nginx title="geyser.conf"
|
|
server {
|
|
listen 19132 ssl;
|
|
server_name play.example.com;
|
|
|
|
ssl_certificate /etc/letsencrypt/live/play.example.com/fullchain.pem;
|
|
ssl_certificate_key /etc/letsencrypt/live/play.example.com/privkey.pem;
|
|
|
|
location / {
|
|
proxy_pass http://127.0.0.1:19133;
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
}
|
|
}
|
|
```
|
|
|
|
</TabItem>
|
|
<TabItem value="windows" label="Windows">
|
|
|
|
Create a file called `geyser.conf` in `C:\nginx\conf\`, then add `include geyser.conf;` inside the `http { }` block of `C:\nginx\conf\nginx.conf`. If you already have a certificate, point `ssl_certificate` and `ssl_certificate_key` to its files.
|
|
|
|
```nginx title="geyser.conf"
|
|
server {
|
|
listen 19132 ssl;
|
|
server_name play.example.com;
|
|
|
|
ssl_certificate C:/nginx/certs/play.example.com-chain.pem;
|
|
ssl_certificate_key C:/nginx/certs/play.example.com-key.pem;
|
|
|
|
location / {
|
|
proxy_pass http://127.0.0.1:19133;
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
}
|
|
}
|
|
```
|
|
|
|
</TabItem>
|
|
<TabItem value="macos" label="macOS">
|
|
|
|
Create a file called `geyser.conf` in `$(brew --prefix)/etc/nginx/servers/`. If you already have a certificate, point `ssl_certificate` and `ssl_certificate_key` to its files.
|
|
|
|
```nginx title="geyser.conf"
|
|
server {
|
|
listen 19132 ssl;
|
|
server_name play.example.com;
|
|
|
|
ssl_certificate /etc/letsencrypt/live/play.example.com/fullchain.pem;
|
|
ssl_certificate_key /etc/letsencrypt/live/play.example.com/privkey.pem;
|
|
|
|
location / {
|
|
proxy_pass http://127.0.0.1:19133;
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
}
|
|
}
|
|
```
|
|
|
|
</TabItem>
|
|
</Tabs>
|
|
|
|
Do not add `quic` or `http3` to the `listen` line: Geyser needs UDP 19132 for playing.
|
|
|
|
**2.3. Reload nginx**
|
|
|
|
Use the following commands to reload nginx and activate the new configuration:
|
|
|
|
<Tabs groupId="operating-system">
|
|
<TabItem value="linux" label="Linux" default>
|
|
|
|
```bash
|
|
sudo nginx -t && sudo systemctl reload nginx
|
|
```
|
|
|
|
</TabItem>
|
|
<TabItem value="windows" label="Windows">
|
|
|
|
```powershell
|
|
cd C:\nginx
|
|
.\nginx.exe -t
|
|
.\nginx.exe -s reload
|
|
```
|
|
|
|
</TabItem>
|
|
<TabItem value="macos" label="macOS">
|
|
|
|
```bash
|
|
nginx -t && brew services restart nginx
|
|
```
|
|
|
|
</TabItem>
|
|
</Tabs>
|
|
|
|
</TabItem>
|
|
</Tabs>
|
|
|
|
</TabItem>
|
|
</Tabs>
|
|
|
|
## Checking that it works {#checking}
|
|
|
|
1. Look at the Geyser console. With a certificate in the Geyser config, it says `Built-in signaling started on https://`.
|
|
When using a reverse proxy, it says `Built-in signaling started on http://` with port 19133.
|
|
2. On Bedrock, add the server with your **domain name** and port `19132`. Join it: Minecraft should not ask whether you trust the server.
|
|
|
|
| What you see | What to do |
|
|
|---|---|
|
|
| Players still get the trust prompt | Make sure they use the domain name, not the IP address. |
|
|
| Console: "Built-in signaling could not start. Make sure no other program is using TCP port …" after adding a certificate | Usually a wrong file path or password. Turn on `debug-mode` in the config and restart to see the real reason. |
|
|
| Caddy or certbot cannot get a certificate | Check that TCP port 80 is forwarded to this machine, and that your domain points to your current IP. |
|
|
| Server shows up, but joining times out | UDP 19132 is not reachable, or Caddy uses it. Check the `protocols h1 h2` line, and your firewall. |
|