Я настраиваю новый виртуальный хост на моем обратном прокси-сервере apache с модом перезаписи, при тестировании конфигурации все работает нормально, но не работает только одна страница (страница изображения). при нажатии на страницу изображения я получаю локальный URL-адрес в браузере ( https: // localserver: 9251 / share / collab? collabSession = ea4a80bf-6c19-473b-ad08-bdce391dbe19 & type = join & user = username & isInitiator = true).
порты 9251, 433 и 80 активируются в ports.conf
там ниже конфигурация моих виртуальных хостов:
<VirtualHost *:80>
ServerName publicdomaine.com
ServerAlias www.publicdomaine.com
Redirect Permanent / https://publicdomaine.com
</VirtualHost>
<VirtualHost *:443>
ServerName publicdomaine.com
ServerAlias www.publicdomaine.com
<IfModule mod_proxy.c>
SetEnv proxy-nokeepalive 1
SetEnv proxy-initial-not-pooled 1
ProxyRequests Off
ProxyPreserveHost Off
ProxyPass / https://localserver/
ProxyPassReverse / https://localserver/
</IfModule>
SSLEngine on
SSLProxyEngine On
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
SSLCertificateKeyFile /etc/apache2/cert/mykey.pem
SSLCertificateFile /etc/apache2/cert/mycert.pem
SSLCertificateChainFile /etc/apache2/cert/bundle.crt
RewriteEngine On
LogLevel alert rewrite:trace6
RewriteCond %{QUERY_STRING} ^(.*)&studyUid=(.*)
RewriteCond %{QUERY_STRING} ^host=publicdomaine.com(.*)$
RewriteRule ^/ris/web/imageshare/startSession - [E=SUI_VAL:%1]
RewriteRule /ris/web/imageshare/startSession https://localserver/ris/web/imageshare/startSession?host=cimcsp1.cimy.local%{ENV:SUI_VAL} [P,QSA,L]
ErrorLog /var/log/signoff-error_log
CustomLog /var/log/signoff-access_log combined
</VirtualHost>
<VirtualHost *:9251>
SetEnv proxy-nokeepalive 1
SetEnv proxy-initial-not-pooled 1
ProxyRequests Off
ProxyPreserveHost Off
ProxyPass / https://localserver:9251/
ProxyPassReverse / https://localserver:9251/
</VirtualHost>
Я наблюдал за обменом http со скрипачом. обмен сообщениями:
GET https://publichostname/ris/web/imageshare/startSession?host=publichostname&studyUid=1.3.51.0.1.1.10.233.24.237.333827.7779290494 HTTP/1.1
обратный прокси перезаписывает параметр host на localserver:
GET https://publichostname/ris/web/imageshare/startSession?host=localserver&studyUid=1.3.51.0.1.1.10.233.24.237.333827.7779290494 HTTP/1.1
и ответ - JSON:
{"initiatorLink": "https: // localserver: 9251 / share / collab? collabSession = 74bea62c-474a-4ee5-9d74-e793fef66738 & type = join & user = username & isInitiator = true", "studyUid": "1.3.51.0.1.1.10.233. 24.237.333827.7779290494 "," baseLink ":" https: // localserver: 9251 / share /? CollabSession = 74bea62c-474a-4ee5-9d74-e793fef66738 "," closedLink ": null}
этот ответ направляет меня на:
CONNECT localserver:9251 HTTP/1.1
Host: localserver:9251
это должно быть туннель через обратный прокси:
CONNECT publichostname:9251 HTTP/1.1
Host: publichostname:9251
Лучшим вариантом было бы настроить сервер приложений для генерации правильных URL-адресов, которые будут использоваться с прокси.
Однако, если вы не можете этого сделать, вы можете использовать другой модуль Apache, mod_proxy_html
. Этот модуль предоставляет директиву ProxyHTMLURLMap
, который можно использовать, чтобы переписать ответ.
ProxyPass / https://localserver/
ProxyPassReverse / https://localserver/
SetOutputFilter proxy-html # make sure the output is filtered by proxy-html
ProxyHTMLURLMap https://localserver:9251/ https://publichostname:9251/
ProxyHTMLExtended On # by default only HTML output is filtered
Это должно переписать все вхождения URL-адреса локального сервера в ответ на URL-адрес publichostname.
Обратите внимание, что это создает дополнительную нагрузку на веб-сервер, поскольку он должен анализировать и изменять каждый ответ, а не просто передавать его. Правильная настройка сервера приложений была бы предпочтительным методом.
нашел !!! Я добавил мод подстановки, чтобы изменить ответ сервера, и он работает !!!!! команда добавила:
AddOutputFilterByType SUBSTITUTE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript application/json
Substitute "s|https:\/\/localserver:9251|https:\/\/publichostname:9251|ni"
спасибо за помощь !!!!