initial commit

This commit is contained in:
wt committed 2026-10-20 15:59:55 +07:00
commit c260d7bab8
235 files changed
+49786

No files matched your search

+97
View File
@@ -0,0 +1,97 @@
# http_altconnect (0.7.7)
Встроенный модуль публикует альтернативные XMPP connection methods:
- GET `/.well-known/host-meta`: XRD, Content-Type application/xrd+xml.
- GET `/.well-known/host-meta.json`: JRD, Content-Type application/json.
Оба ответа содержат Access-Control-Allow-Origin: *. HEAD возвращает те же
заголовки без тела; OPTIONS разрешён; остальные методы дают405. Неизвестные
пути и неразрешённый HTTP Host не обслуживаются. Query не изменяет формат
и не включает JSONP. В логах запрос классифицируется как altconnect.
Реализация сверена с supplied plugins/mod_http_altconnect.lua cafd74b9c5ea.
Источник протокола: https://xmpp.org/extensions/xep-0156.html.
## Включение
Добавьте `http_altconnect` в существующий modules_enabled, сохранив остальные
модули. В Lua, например:
```lua
modules_enabled = {
-- остальные существующие модули
"websocket";
"bosh";
"http_altconnect";
}
advertise_bosh = true;
advertise_websocket = true;
```
Это фрагмент: не заменяйте им весь рабочий список modules_enabled.
Оба advertise-параметра по умолчанию true; false скрывает соответствующий Link.
Выключенный/неподключённый транспорт не рекламируется. Если нет ни одного
транспорта, XRD пустой, JSON содержит links: []. Отключение http_altconnect
убирает discovery endpoints, сохраняя работу WS/BOSH.
Адреса учитывают http_host, http_paths.bosh/websocket и http_external_url.
При отсутствии внешнего URL выбирается первый настроенный HTTPS listener,
затем первый HTTP listener; значения не зависят от Host/Forwarded в запросе.
Пустой interfaces список не считается действующим listener.
Пример для HTTPS proxy с удаляемым публичным префиксом /xmpp/:
```lua
http_external_url = "https://wthome.ru/xmpp/";
http_paths = {
websocket = "/ws";
bosh = "/bind";
}
```
Опубликованные href: https://wthome.ru/xmpp/bind и wss://wthome.ru/xmpp/ws.
http_external_url меняет публичные адреса, внутренние пути остаются /bind и /ws.
`http_paths.altconnect` меняет внутреннюю базу discovery, например `/discover`:
в этом случае endpoint — `/discover/host-meta[.json]`. `$host` поддерживается.
Путь transport, конфликтующий с активным host-meta endpoint, отвергается при
check-config/startup вместо неоднозначной маршрутизации.
## Публичный discovery
Клиент запрашивает well-known на HTTPS origin XMPP-домена, например
https://wthome.ru/.well-known/host-meta. HTTPS listener5281 сам по себе не
создаёт публикацию на443: используйте существующий reverse proxy или port mapping.
Пример дополнительных location внутри TLS server Nginx, если backendHTTP5280:
```nginx
location = /.well-known/host-meta {
proxy_pass http://127.0.0.1:5280;
proxy_set_header Host wthome.ru;
}
location = /.well-known/host-meta.json {
proxy_pass http://127.0.0.1:5280;
proxy_set_header Host wthome.ru;
}
```
Эти location публикуют discovery без transport-префикса /xmpp/; соответствующие
WS/BOSH location по-прежнему настраиваются согласно HTTP-PROXY.md.
При custom altconnect mount proxy должен переписать well-known на него.
XEP-0156 требует HTTPS загрузку metadata и только https/wss href. Для native
совместимости supplied module HTTP/WS fallback также сохранён: если настроен
только HTTP, ссылки будут http/ws. Для стандартного защищённого discovery
настройте HTTPS listener или HTTPS http_external_url. Автоматическое изменение
production DNS, proxy или TLS-сертификатов не выполняется.
Проверка с действительным CA (для self-signed добавьте --cacert cert.pem):
```bash
curl -i https://wthome.ru/.well-known/host-meta
curl -i https://wthome.ru/.well-known/host-meta.json
```
Модуль включается на единственном runtime VirtualHost. Host Meta2/XEP-0487,
DNS TXT/SRV changes, redirects на чужие Host и автоматический запуск браузера
не являются частью этого плагина. Результаты локальных проверок — VALIDATION.md.