Это сценарий:
У меня есть Linux-сервер, доступный только по одному URL-адресу (потому что сервер - это виртуальная машина в vpn):
URL: http://foo.bar.com
У меня есть несколько веб-приложений, доступных таким образом:
foo.bar.com/java_app => приложение java wep, установленное в tomcat
foo.bar.com/webpage => веб-страница, установленная на сервере Apache
Примечание: myhost => localhost
ProxyPreserverHost On
<VirtualHost *:80>
ServerName foo.bar.com
DocumentRoot /var/www/webpage
JkMountCopy On
SSLProxyEngine On
ProxyPass /java_app http://myhost:8080/java_app
ProxyPassReseverse /java_app http://myhost:8080/java_app
#This uses the DocumentRoot
ProxyPass /webpage http://myhost:80/
ProxyPassReseverse /webpage http://myhost:80/
</VirtualHost>
Проблема в том, что у меня есть другое программное обеспечение в node.js, доступное изнутри через этот URL:
https://myhost:8061. (a webpage too).
Решением может быть добавление этих строк:
ProxyPass /ssl_app https://myhost:8061/
ProxyPassReseverse /ssl_app https://myhost:8061/
Но это не удается. Проблема в том, что файлы (источники) веб-страницы (js, css, другие файлы) не загружаются должным образом, соответственно веб-приложение тоже. (Fire Fox)
Например, внутри "foo.bar.com/ssl_app" я вижу URL-адреса источников, и они должны быть такими:
foo.bar.com/ssl_app/js/one.js foo.bar.com/ssl_app/js/two.js foo.bar.com/ssl_app/css/css.js
Однако я получаю так:
foo.bar.com/js/one.js foo.bar.com/js/two.js foo.bar.com/css/css.js
(перенаправление foo.bar.com/ssl_app => foo.bar.com/)
Очевидно, что веб-приложение не работает.
Таким образом, если я помещаю foo.bar.com/css/css.js напрямую, файл отображается правильно.
подробности журнала:
*** File does not exist: /var/www/webpage/lib, refere http://foo.bar.com/ssl_app
Я думаю, что это для DocumentRoot (/ var / www / webpage /), но как я могу создать новый VirtualHost с тем же ServerName?
Кто-нибудь может сказать мне, что я могу посмотреть в конфигурации apache?
Спасибо.
Вы, кажется, предполагаете, что ProxyPassReverse также изменяет URL-адреса в контенте, доставляемом серверной частью. Это не так. ProxyPassReverse будет использоваться только тогда, когда ваш внутренний сервер (ваш «ssl_app») отправляет перенаправление. Сам контент не тронут.
У вас есть несколько вариантов:
Проблема в том, что мой «ssl_app» - это веб-приложение, использующее веб-сокеты. Apache не поддерживает веб-сокеты, поэтому мне нужно найти способ «перенаправить» приложение с помощью WebSockets (с https://github.com/kawasima/mod_proxy_websocket) или измените http-сервер с помощью Nginx (Nginx совместим с WebSockets).
Возможно, вам потребуется включить
SSLProxyEngine On
Чтобы проксировать SSL через HTTP-запрос.
Видеть: Apache ProxyPass с SSL