Назад | Перейти на главную страницу

Openmeetings 5.0-M3 за запросами обратного прокси-сервера apache websocket дает 404

У меня Openmeetings 5.0.0-M3 работает на порту 5443. Теперь я хочу спрятать его за обратным прокси-сервером apache 2 в расположении https-сервера apache. Начальная загрузка HTML с помощью / openmeetings / rel = "nofollow noreferrer"> https: // <домен> / openmeetings / работает, но последующий запрос веб-сокета не выполняется с кодом состояния 404 и сообщением веб-инструментов браузера (бесплатный перевод с немецкого):

Firefox can't connect to server with url wss://<domain>/openmeetings/wicket/websocket?pageId=8&wicket-ajax-baseurl=.&wicket-app-name=OpenmeetingsApplication.

Версия Apache:

Server version: Apache/2.4.41 (Linux/SUSE)
Server built:   2020-02-26 10:38:09.000000000 +0000
Server's Module Magic Number: 20120211:88
Server loaded:  APR 1.6.3, APR-UTIL 1.6.1
Compiled using: APR 1.6.3, APR-UTIL 1.6.1
Architecture:   64-bit
Server MPM:     event
  threaded:     yes (fixed thread count)
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_PROC_PTHREAD_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/srv/www"
 -D SUEXEC_BIN="/usr/sbin/suexec"
 -D DEFAULT_PIDLOG="/run/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="/var/log/apache2/error_log"
 -D AP_TYPES_CONFIG_FILE="/etc/apache2/mime.types"
 -D SERVER_CONFIG_FILE="/etc/apache2/httpd.conf"

Настройка модулей Apache:

Loaded Modules:
 core_module (static)
 so_module (static)
 http_module (static)
 mpm_event_module (static)
 unixd_module (static)
 systemd_module (static)
 actions_module (shared)
 alias_module (shared)
 auth_basic_module (shared)
 auth_digest_module (shared)
 authz_host_module (shared)
 authn_file_module (shared)
 authz_groupfile_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 suexec_module (shared)
 cgid_module (shared)
 dir_module (shared)
 env_module (shared)
 expires_module (shared)
 include_module (shared)
 log_config_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 setenvif_module (shared)
 ssl_module (shared)
 info_module (shared)
 rewrite_module (shared)
 status_module (shared)
 dav_module (shared)
 dav_fs_module (shared)
 dav_svn_module (shared)
 authz_svn_module (shared)
 dav_lock_module (shared)
 perl_module (shared)
 proxy_module (shared)
 proxy_connect_module (shared)
 proxy_wstunnel_module (shared)
 proxy_fcgi_module (shared)
 proxy_http_module (shared)
 proxy_ajp_module (shared)
 proxy_html_module (shared)
 xml2enc_module (shared)
 deflate_module (shared)
 headers_module (shared)
 fcgid_module (shared)
 authn_core_module (shared)
 authz_core_module (shared)
 socache_shmcb_module (shared)
 cache_module (shared)
 http2_module (shared)

Запрос веб-сокета:

Host: <domain>
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101
Firefox/75.0
Accept: */*
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate, br
Sec-WebSocket-Version: 13
Origin: https://<domain>
Sec-WebSocket-Extensions: permessage-deflate
Sec-WebSocket-Key: qf9wZBel1SKVWJC+y7AYIA==
DNT: 1
Connection: keep-alive, Upgrade
Cookie: JSESSIONID=8FBC3DCCC79EAB7C06C498BDA62AEAE2; wicket-ajaxdownload-id51-0=complete
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket

Ответ был:

HTTP/1.1 404 
Date: Tue, 21 Apr 2020 09:54:32 GMT
Server: Apache/2.4.41
Cache-Control: private
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Content-Type: text/html;charset=utf-8
Content-Language: de
Content-Length: 441
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive

Настройка прокси Apache в части SSL:

RequestHeader set Origin https://localhost:5443 early

SSLEngine on
SSLProxyEngine On
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off

<Location "/openmeetings/wicket/">
  ProxyPass "wss://localhost:5443/openmeetings/wicket/"
</Location>

<Location "/openmeetings/">
  ProxyPass "https://localhost:5443/openmeetings/"
  ProxyPassReverse "https://localhost:5443/openmeetings/"
</Location>

Проксирование на незащищенный сервер с портом 5080 тоже не сработало

RequestHeader set Origin http://localhost:5080 early

<Location "/openmeetings/wicket/">
  ProxyPass "ws://localhost:5080/openmeetings/wicket/"
</Location>

<Location "/openmeetings/">
  ProxyPass "http://localhost:5080/openmeetings/"
  ProxyPassReverse "http://localhost:5080/openmeetings/"
</Location>

Изменение Происхождение запроса требуется, поскольку проверки CSRF на открытых собраниях выполняются с использованием этого поля заголовка.

Я тоже пробовал проксировать через перезапись:

RewriteEngine on
RewriteCond ${HTTP:Upgrade} websocket [NC]
RewriteCond ${HTTP:Connection} upgrade [NC]
RewriteRule /(.*) "wss://localhost:5443/$1" [P]

с тем же результатом. Запросы веб-сокетов не отображаются в журналах apache.

Я как бы застрял! Очень ценю малейшие намеки. Спасибо!

Обновление 2020-04-22:

Я получил это работает с верный переписать заявление. С помощью % вместо того $ желательно. Итак, это ...

RewriteEngine on
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteCond %{HTTP:Connection} upgrade [NC]
RewriteRule /(.*) "wss://localhost:5443/$1" [P]

сделает это даже с незащищенным сервером через ws://localhost:5080.

Но: Почему не работает с прокси-оператором? Кажется, что прокси-сервер websocket не распознается.

Ответ на этот вопрос будет поучительным. Спасибо!