Как настроить mod_proxy для ProxyPass на основе http против https?

9

У меня Apache Tomcat работает с включенным SSL. У меня есть HTTP-сервер Apache, действующий в качестве обратного прокси-сервера, поэтому если мои пользователи нажимают http: // myserver / tomcat /, они передаются на http: // myserver: 8080 .

ProxyPass /tomcat/ http://myserver:8080/
ProxyPassReverse /tomcat/ http://myserver:8080/

У меня также настроен HTTP-сервер Apache для SSL, поэтому, когда пользователи нажимают https: // myserver / tomcat /, они должны передаваться на https: // myserver: 8443 / .

С текущей конфигурацией ProxyPass & ProxyPassReverse они будут перенаправлены на URL не-ssl. Как настроить пропуск прокси-сервера таким образом, чтобы он перенаправлял на другой протокол и порт в зависимости от входящего запроса?

То есть, если кто-то входит через HTTPS, как я могу перенаправить его на свой tomcat @ https: // myserver: 8443 ?


Обновить:

@ Микрофон-Insch

Я старался:

NameVirtualHost *:443

<VirtualHost *:80>
    ProxyPass /tomcat/ http://myserver:8080/
    ProxyPassReverse /tomcat/ http://myserver:8080/
</VirtualHost>

<VirtualHost *:443>
    ProxyPass /tomcat/ https://myserver:8443/
    ProxyPassReverse /tomcat/ https://myserver:8443/
</VirtualHost>

Теперь, когда я захожу : https: // myserver / tomcat / я получаю "страница не найдена". В журнале ошибок я вижу "Файл не существует: / var / apache2 / htdocs / tomcat"

Это правильно, но я ожидал, что запрос будет перенаправлен на tomcat, работающий по адресу https: // myserver: 8443 / .

Думаю, мне нужно больше смотреть на виртуальные хосты, если что-то не выглядит явно неправильно.

codecraig
источник
Я не думаю, что вам нужна NameVirtualHostдиректива здесь. Также вам необходимо добавить соответствующие директивы для включения SSL внутри вашего <VirtualHost *:443>раздела.
Майк Инш

Ответы:

5

Вы должны сделать это с помощью двух независимых <VirtualHost *:X>директив. Ваши HTTPдирективы входят внутрь, в <VirtualHost *:80>то время как ваши HTTPSдирективы входят внутрь <VirtualHost *:443>. При необходимости настройте, если на вашем сервере настроено несколько виртуальных хостов на основе адреса или имени. См. Документацию по Apache 2 для более подробной информации.

Майк Инш
источник
Поэтому я добавил следующее: NameVirtualHost *: 443
codecraig
3
Не забудьте добавить SSLProxyEngine в директиву
Ryan
6

Для полноты: если это вариант, рекомендуется завершить SSL в Apache, а не с помощью Tomcat. Предоставление Tomcat доступно только из Apache, это проще и не менее безопасно.

В этой настройке Apache будет прокси HTTP и HTTPS для http://myserver:8080/:

NameVirtualHost *:443

<VirtualHost *:80>
    ProxyPass /tomcat/ http://myserver:8080/
    ProxyPassReverse /tomcat/ http://myserver:8080/
</VirtualHost>

<VirtualHost *:443>
    ProxyPass /tomcat/ http://myserver:8080/
    ProxyPassReverse /tomcat/ http://myserver:8080/
</VirtualHost>
Дэвид Карбони
источник
1
При этом вам не нужно повторять прокси-директивы в обоих виртуальных хостах. Вы можете просто вытащить их в контекст сервера.
Амит Найду