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

Директива apache2 proxypassreverse, добавляющая порт виртуального хоста?

Я пытался настроить обратный прокси-сервер, используя apache 2 mod_proxy и директивы proxypass и proxypassreverse.

Я устанавливаю WSO2 Identity Server и хочу получить доступ к этому приложению, используя URL-адрес, например следующий.

hxxp://myserver.domain.com/wso2/

В myserver.domain.com доступен в Интернете

Внутри моей сети я настроил виртуальный хост, работающий в моей конфигурации apache2, со следующими параметрами:

По разным причинам порт 80 недоступен, и виртуальный хост должен оставаться как 8080.

Наконец, вот моя конфигурация виртуального хоста

<VirtualHost *:8080>

  <Location /wso2/>
    ProxyPass hxxps://internal.wso2.node:9443/
    ProxyPassReverse hxxs://internal.wso2.node:9443/
  </Location>

 ProxyVia On
 ProxyPreserveHost Off
 ProxyAddHeaders Off
 ProxyRequests Off
 SSLProxyEngine On
 SSLProxyCheckPeerCN Off

 </VirtualHost>

Проблема:

Я могу использовать свой веб-браузер (Firefox / Chrome), чтобы запросить http://myserver.domain.com/wso2/ ресурс. В моих файлах журнала я вижу, что запрос попадает на сервер apache, а виртуальный хост перехватывает местоположение / wso2 /.

Он проходит через прокси и попадает на сервер internal.wso2.node. однако продукт WSO2 IS выполняет несколько перенаправлений, которые в файлах журнала я вижу, что он запрашивает ресурс с добавленным портом.

Вот поток запросов

  hxxp://myserver.domain.com/wso2/  -> hxxps://internal.wso2.node:9443/
  REDIRECT x3
  hxxps://internal.wso2.node:8080/carbon -> 
  hxxps://internal.wso2.node:8080/carbon/admin/login.jsp

  Back to my web browser
  hxxp://myserver.domain.com:8080/wso2/carbon/admin/login.jsp

По какой-то причине ответ apache добавляет свой виртуальный хост к URL-адресу, который я запрашиваю.

Если я удалю порт: 8080 вручную и снова запрошу полный URL-адрес в браузере, он получит доступ к ресурсу в порядке. Однако любая попытка доступа с использованием только http://myserver.domain.com/wso2/ приведет к перенаправлению и добавлению порта.

Поскольку вы также меняете URI при выполнении ProxyPass, вероятно, вам нужно будет также переписать файл cookie

<VirtualHost *:8080>
    ServerName myserver.domain.com
    ProxyVia On
    ProxyPreserveHost Off
    ProxyAddHeaders Off
    ProxyRequests Off
    SSLProxyEngine On
    SSLProxyCheckPeerCN Off
    ProxyPass /wso2/ https://internal.wso2.node:9443/
    ProxyPassReverse /wso2/ http://myserver.domain.com:8080/
    ProxyPassReverseCookiePath / /wso2
    ProxyPassReverseCookieDomain internal.wso2.node myserver.domain.com
  </VirtualHost>

Обычно ProxyPassReverse немного сложен (по крайней мере, для меня), и, вероятно, вам понадобится ProxyPassReverseCookiePath, и на всякий случай ProxyPassReverseCookieDomain (чтобы переписать файлы cookie для поддержания сеанса).