У меня 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 не распознается.
Ответ на этот вопрос будет поучительным. Спасибо!