Deine Matrix-Adresse soll @name:example.com lauten, der Server läuft aber unter matrix.example.com? Dann sagt dein Webserver auf der Hauptdomain allen anderen, wo Matrix zu finden ist. Das nennt sich Delegation und besteht aus zwei kleinen Antworten.
Was du brauchst
| Adresse | Für wen | Antwort |
|---|---|---|
/.well-known/matrix/server | Andere Matrix-Server | Wo dein Server für die Föderation erreichbar ist |
/.well-known/matrix/client | Apps wie Element | Wo sich Apps anmelden |
Beides gehört auf den Webserver von example.com, per HTTPS mit gültigem Zertifikat. Ersetze matrix.example.com in allen Beispielen durch die Adresse deines Matrix-Servers.
nginx
Im server-Block für Port 443:
location = /.well-known/matrix/server {
default_type application/json;
return 200 '{"m.server": "matrix.example.com:443"}';
}
location = /.well-known/matrix/client {
default_type application/json;
add_header Access-Control-Allow-Origin "*" always;
return 200 '{"m.homeserver": {"base_url": "https://matrix.example.com"}}';
}
Danach prüfen und neu laden: nginx -t && systemctl reload nginx
Apache 2
Lege im Webroot der Hauptdomain zwei Dateien ohne Endung an.
.well-known/matrix/server:
{"m.server": "matrix.example.com:443"}
.well-known/matrix/client:
{"m.homeserver": {"base_url": "https://matrix.example.com"}}
Ergänze dann im VirtualHost für Port 443, damit die Dateien als JSON ausgeliefert werden. Dafür muss mod_headers aktiv sein (a2enmod headers):
<Location "/.well-known/matrix/">
ForceType application/json
Header always set Access-Control-Allow-Origin "*"
</Location>
Danach prüfen und neu laden: apachectl configtest && systemctl reload apache2
Apache 2 mit .htaccess, zum Beispiel bei WordPress
Kommst du nicht an die Server-Konfiguration, legst du dieselben zwei Dateien an und daneben eine .well-known/matrix/.htaccess:
ForceType application/json
Header always set Access-Control-Allow-Origin "*"
Testen
curl -s https://example.com/.well-known/matrix/server
curl -si https://example.com/.well-known/matrix/client
Die erste Zeile zeigt das JSON mit m.server. Die zweite zeigt zusätzlich die Header, dort müssen content-type: application/json und access-control-allow-origin: * stehen.
Zum Schluss gibst du deine Hauptdomain beim Matrix Federation Tester ein. Er prüft die Föderation von außen.
Wenn es nicht klappt
- Föderation geht nicht: Prüfe, ob in
m.serverder Port:443steht. Ohne Angabe versuchen andere Server es auf Port 8448. - Element im Browser findet den Server nicht: Meist fehlt der Header
Access-Control-Allow-Originbei/client. - Antwort ist eine HTML-Seite oder 404: Ein CMS oder eine Weiterleitung fängt den Pfad ab. Die Einträge müssen vor solchen Regeln greifen.
- Im Browser geht es, beim Federation Tester nicht: Eine Bot-Sperre oder Firewall blockt Server-Anfragen. Nimm
/.well-known/matrix/davon aus.
Soll ich das für dich übernehmen?
Ich betreibe Matrix-Server auf Servern in Deutschland und richte die Delegation für dich ein.