Seit einiger Zeit versuche ich meinen XMPP-Server so zu konfigurieren, dass XEP-0156 den neuen XMPP Compliance Test besteht, der neben /http-bind auch nach /xmpp-websocket schaut. Bisher hatte ich in Prosody lediglich BOSH aktiviert. Nun war es aber erforderlich das Modul WebSockets richtig einzubinden.
\“https://prosody.im/doc/websocket\“Wofür benötigt man aber eigentlich das XMPP-Erweiterungsprotokoll XEP-0156?
Definition
XEP-0156: Discovering Alternative XMPP Connection Methods (HTTP)
Allows web clients to discover connections methods
Um den XMPP-Server für Webclients über diese Schnittstellen verfügbar zu machen, waren einige Änderungen an meinem System nötig.
System
Als Betriebssystem dient derzeit ein Debian 10. Der XMPP-Server basiert auf Prosody. Als Webserver wird ein Apache2 eingesetzt.
Änderungen der Konfiguration
Zu allererst habe ich meine /var/www/html/intux/.well-known/host-meta neu angepasst (siehe dazu alte Konfiguration https://intux.de/2018/11/xep-0156-auf-xmpp-aktivieren/).
1 2 3 4 5 6 7 |
<?xml version='1.0' encoding='utf-8'?> <XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'> <Link rel="urn:xmpp:alt-connections:xbosh" href="https://intux.de/http-bind" /> <Link rel="urn:xmpp:alt-connections:websocket" href="wss://intux.de/xmpp-websocket" /> </XRD> |
Im zweiten Schritt musste ich eine weitere Rewrite-Regel im VirtualHost setzen.
1 |
RewriteRule ^/xmpp-websocket$ http://intux.de:5280/xmpp-websocket [P,L] |
Hier ein Überblick über alle zusätzlichen Einträge zur Aktivierung von XEP-0156 in meinem VirtualHost /etc/apache2/sites-available/intux.de.conf:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<Location /http-bind> Order allow,deny Allow from all </Location> <Location ~ "/\.well-known/host-meta(\.json)?"> Header set Access-Control-Allow-Origin "*" </Location> RewriteEngine On RewriteRule ^/http-bind$ http://intux.de:5280/http-bind [P,L] RewriteRule ^/xmpp-websocket$ http://intux.de:5280/xmpp-websocket [P,L] <IfModule mod_proxy.c> <IfModule mod_proxy_wstunnel.c> ProxyTimeout 900 <Location "/xmpp-websocket"> ProxyPreserveHost On ProxyPass "ws://localhost:5280/xmpp-websocket" </Location> </IfModule> </IfModule> |
Weiterhin musste in der Prosody-Konfiguration /etc/prosody/prosody.cfg.lua der Eintrag
1 |
cross_domain_websocket = true; |
hinzugefügt werden (siehe https://intux.de/2019/05/kein-bilderversand-im-gastnetzwerk/). Die Module WebSocket und BOSH müssen ebenfalls beide aktiviert sein.
1 2 3 4 5 6 7 8 9 |
modules_enabled = { "websocket"; "bosh"; } consider_websocket_secure = true; cross_domain_websocket = true; consider_bosh_secure = true; cross_domain_bosh = true; |
Nach dem Neustart des Webservers sowie von Prosody konnte mein XMPP-Server den Compliance Test zu XEP-0156 wieder bestehen.