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

Неправильное перенаправление в ProxyPass с http на https

Это сценарий:

У меня есть 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", чтобы он использовал правильный базовый URL для своих ресурсов. Это лучшее решение.
  • Используйте mod_proxy_html, чтобы изменить html, обслуживаемый серверной частью, прежде чем пересылать его клиенту.

Проблема в том, что мой «ssl_app» - это веб-приложение, использующее веб-сокеты. Apache не поддерживает веб-сокеты, поэтому мне нужно найти способ «перенаправить» приложение с помощью WebSockets (с https://github.com/kawasima/mod_proxy_websocket) или измените http-сервер с помощью Nginx (Nginx совместим с WebSockets).

Возможно, вам потребуется включить

SSLProxyEngine On

Чтобы проксировать SSL через HTTP-запрос.

Видеть: Apache ProxyPass с SSL