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

+92
View File
@@ -0,0 +1,92 @@
# HTTP-пути и reverse proxy
С0.7.5 WS/BOSH используют настройки `http_paths.websocket` и `http_paths.bosh`.
`http_paths.file_share` задаёт внутренний путь upload-компонента. Настройки
VirtualHost/Component имеют приоритет над глобальными; `$host` заменяется именем
XMPP-хоста. Дефолты: `/xmpp-websocket`, `/http-bind`, `/file_share`.
HTTP-пути задаются без query/fragment; конечный `/` допускается. Поддержаны
литеральные RFC3986 path-символы и percent encoding, например `/v1:ws` и
`/bind%20endpoint`. Закодированные slash/backslash, control и dot segments
отвергаются, чтобы избежать неоднозначного переписывания прокси.
`http_host` задаёт HTTP Host, который proxy должен отправлять backend.
`http_default_host` глобально выбирает fallback для неизвестного HTTP Host.
Runtime по-прежнему обслуживает один VirtualHost и его компоненты.
`http_external_url` задаёт публичный HTTP(S) origin и необязательный префикс.
Например, `https://chat.example.org/xmpp/` вместе с `http_paths.bosh: /bind`
соответствует публичному `https://chat.example.org/xmpp/bind` и внутреннему `/bind`.
Прокси должен удалить `/xmpp/` перед отправкой backend. Эта настройка сама по
себе не меняет внутренние маршруты и не включает автоматическое discovery.
Для WebSocket клиент использует эквивалентный `wss://` URL.
## TLS на прокси
Пример фрагмента YAML для существующего конфига (сохраните остальные параметры):
```yaml
global:
http_ports: [5280]
http_interfaces: [127.0.0.1]
trusted_proxies: [127.0.0.1, '::1']
http_legacy_x_forwarded: true
http_default_host: wthome.ru
http_external_url: https://wthome.ru/xmpp/
http_paths:
websocket: /ws
bosh: /bind
http_cors_override:
websocket:
origins: [https://conversejs.wthome.ru]
bosh:
origins: [https://conversejs.wthome.ru]
```
Nginx: переменная map задаётся внутри `http`, location — внутри TLS server.
```nginx
map $http_upgrade $xmpp_connection {
default upgrade;
'' close;
}
location /xmpp/ {
proxy_pass http://127.0.0.1:5280/;
proxy_http_version 1.1;
proxy_set_header Host wthome.ru;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $xmpp_connection;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
proxy_read_timeout 120s;
}
```
Публичные адреса: `wss://wthome.ru/xmpp/ws` и
`https://wthome.ru/xmpp/bind`. Для прежнего прямого WSS5281 настройка
прокси не требуется. Origin — адрес страницы Converse, а не WSS endpoint.
IP/CIDR в `trusted_proxies` разрешают доверять forwarded-данным только от
указанных socket peers. По умолчанию доверены loopback127.0.0.1 и::1.
Пустой список отключает доверие. Не задавайте `0.0.0.0/0` для публичного backend.
X-Forwarded-For разбирается справа налево до первого недоверенного адреса.
X-Forwarded-Proto=https разрешает HTTP WS/BOSH без consider_*_secure только
для доверенного прокси. Прямой HTTP без такого подтверждения получает403,
если `consider_websocket_secure`/`consider_bosh_secure` не включены явно.
Не включайте consider_*_secure на открытом внешнем HTTP listener.
При `http_legacy_x_forwarded: false` используются RFC7239 `Forwarded`
с IP, bracketed IPv6/port, `proto=https` и цепочками доверенных прокси.
В RFC-режиме защищённость TLS termination принимается от ближайшего доверенного
прокси; каждый следующий разобранный hop также должен иметь `proto=https`. Это
намеренно отличается от консервативного `secure AND proto` supplied native
revision, не позволявшего так отметить HTTP backend защищённым.
`X-Forwarded-Host`/`Forwarded host` не заменяют HTTP Host: настройте Host на прокси.
Поддержаны HTTP reverse proxies, сохраняющие WebSocket Upgrade и BOSH body.
HAProxy PROXYv1/v2, произвольные Lua HTTP-приложения и горячая перенастройка
маршрутов не реализованы. Nginx-конфигурация дана для оператора; настоящий
Nginx и production-сертификат в локальном прогоне не запускались.
Основание семантики: https://prosody.im/doc/http и supplied mod_http.lua.