У меня есть два экземпляра Tomcat, один из которых работает на порту 8080, а другой - на 8081. Оба развернули веб-приложение под названием app.war, но они разделены не только разными портами, но и разными хранилищами данных. Однако каждый работает на одном и том же физическом устройстве.
Правила брандмауэра в нашей организации указывают, что я могу обслуживать HTTPS только через порт 443. Ни HTTP, ни HTTPS через 80, 8080 или 8081 нельзя.
Физический блок, работает под управлением RHEL5 и имеет единственный IP-адрес, работающий на eth0. DNS настроен для сопоставления с полем для app1.example.com и app2.example.com.
Как мне настроить мой httpd rewrite / proxy для направления app1.example.com:443 на localhost: 8080 и app2.example.com:443 на localhost: 8081?
РЕДАКТИРОВАТЬ:
Вот что я пробовал ...
LoadModule ssl_module modules/mod_ssl.so
Listen 443
NameVirtualHost *:443
ProxyRequests Off
<VirtualHost *:443>
ServerName app1.example.com
SSLProxyEngine On
SSlProxyMachineCertificateFile /etc/httpd/cert/10year.pem
SSLVerifyClient Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / https://app.example.com: /
ProxyPassReverse / https://app.example.com:8080/
ProxyPassReverseCookieDomain app.example.com app1.example.com
<Location />
Order allow,deny
Allow from all
</Location>
</VirtualHost>
<VirtualHost *:443>
ServerName app2.example.com
SSLProxyEngine On
SSlProxyMachineCertificateFile /etc/httpd/cert/10year.pem
SSLVerifyClient Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / https://app.example.com:8081/
ProxyPassReverse / https://app.example.com:8081/
ProxyPassReverseCookieDomain app.example.com app2.example.com
<Location />
Order allow,deny
Allow from all
</Location>
</VirtualHost>
... и ошибка при попытке запустить ...
$ service httpd start
Starting httpd: [Mon Oct 21 11:18:43 2013] [warn] module ssl_module is already loaded, skipping
(98)Address already in use: make_sock: could not bind to address [::]:443
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:443
no listening sockets available, shutting down
Unable to open logs
[FAILED]
Первая часть сообщения об ошибке, кажется, указывает на то, что на порту 433 уже что-то запущено. Вторая часть, кажется, предполагает, что вы не выполнили команду "service" как root ...
Сделать
sudo service httpd restart
Таким образом вы будете уверены, что являетесь пользователем root, и что вы останавливаетесь, а затем запускаете apache.
Ваш httpd.conf выглядит хорошо. Однако я бы настроил ваши экземпляры tomcat на использование http, а не https, поскольку нет необходимости шифровать трафик, когда он остается на хосте. Кроме того, проксирование https не работает на apache из коробки. Я бы также отключил виртуальный хост ssl по умолчанию для вашего экземпляра. Это должно избавить вас от предупреждения о том, что вы дважды пытаетесь загрузить модуль ssl.
В этой строке похоже, что в ней отсутствует номер порта. Это опечатка?
ProxyPass / https://app.example.com: /
Также вам, вероятно, следует, чтобы Apache обрабатывал SSL и прокси для Tomcat как http (или ajp). Вы можете использовать localhost в качестве имени сервера, например:
ProxyPass / http://localhost:8080/