У меня есть фронтальный сервер с развернутым Apache 2.4.23 + OpenSSL 1.0.2j.
Затем у меня есть еще один сервер с установленным Tomcat 7.
Идея состоит в том, что у Apache есть VHOST на *: 443, который использует ProxyPass для отправки запроса через AJP на сервер Tomcat в соответствии с указанными URL-адресами.
Это мой файл vhosts.conf (он имеет конфигурацию SSL, поскольку я не хочу использовать файл httpd-ssl.conf, потому что мне пришлось многое изменить в нем), согласно этому сайту:
https://mozilla.github.io/server-side-tls/ssl-config-generator/
##################################################################################################################
# VHOSTS HTTP
# redirect all HTTP to HTTPS (optional)
<VirtualHost *:80>
ServerAlias *
RewriteEngine On
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [redirect=301]
</VirtualHost>
##################################################################################################################
# VHOSTS HTTPS
Listen 443
# modern configuration, tweak to your needs
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLProxyProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
SSLProxyCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
SSLHonorCipherOrder on
SSLCompression off
SSLSessionTickets off
SSLPassPhraseDialog builtin
SSLSessionCache "shmcb:c:/ap24/logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300
# OCSP Stapling, only in httpd 2.3.3 and later
SSLUseStapling on
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off
SSLStaplingCache "shmcb:c:/ap24/logs/ocsp(128000)"
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile "conf/xin.foo.com/xin.crt"
SSLCertificateChainFile "conf/xin.foo.com/bundle.crt"
SSLCertificateKeyFile "conf/xin.foo.com/xin.key"
# Uncomment the following directive when using client certificate authentication
#SSLCACertificateFile /path/to/ca_certs_for_client_authentication
# HSTS (mod_headers is required) (15768000 seconds = 6 months)
Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
ProxyRequests Off
ProxyPreserveHost On
ProxyPass /bar ajp://X.X.X.X:XXXX/bar/
ProxyPass /bar/ ajp://X.X.X.X:XXXX/bar/bar.html
</VirtualHost>
Как видите, у меня есть 2 прокси в зависимости от URL. Это потому, что у меня есть и «админская» / бэкэнд-зона, и пользовательская зона. Первый прокси-сервер предназначен для каждой зоны администратора, а второй - для зоны пользователя.
Теперь для этих сайтов мне нужны эти URL-адреса:
АДМИНИСТРАТОР: https://xin.foo.com/bar/bar
ПОЛЬЗОВАТЕЛЬ: https://xin.foo.com/bar/bar?app=personal
Я использую сервер Apache в «локальном» контексте прямо сейчас, что означает, что у меня еще нет поддомена TLD с общедоступным IP-адресом сервера Apache на нем. Итак, на моем локальном компьютере в офисе я отредактировал свой файл «hosts» в «windows / system32 / drivers / etc» и добавил строку:
xin.foo.com Y.Y.Y.Y (which is the IP address of the Apache frontal server).
Таким образом, я могу эмулировать со своей машины, какой будет публичный доступ из inet.
Сказал все это, теперь приходит вещь:
Инет народ, получим доступ через https://xin.foo.com. Вот и все.
Мне нужно "https://xin.foo.com"получить прямой доступ к Зона USER.
И что-то вроде https://xin.foo.com/admin, чтобы получить доступ к Бэкэнд-зона ADMIN.
Тогда, я думаю, здесь нужно принять во внимание 2 вещи:
Может быть, мне удалить Proxypasses и добавить к нему mod_proxy_ajp?
Как это сделать правильно и как? Я был бы признателен за окончательный рецепт, так как mod_rewrite и Porxypass не моя специальность ... И я убежден, что даже эти 2 прокси-сервера неправильные, но это то, что они меня поняли.
ИЗМЕНИТЬ В СООТВЕТСТВИИ С КОММЕНТАРИЯМИ:
Подводя итог, сейчас все работает нормально, но мне нужно написать URL-адреса, как объяснялось ранее, чтобы получить доступ к нужным зонам. Я хочу изменить поведение сервера в соответствии с логикой и позволить простому URL-адресу TLD перейти в пользовательскую зону, а «/ admin» - в внутреннюю зону. Я добавил переписку с http на https, которая работает нормально. Теперь я подумал, что могу добавить переписывание, в котором говорится:
"ЕСЛИ https://xin.foo.com ЗАТЕМ https://xin.foo.com/bar/bar?app=personal"
и
"ЕСЛИ https://xin.foo.com/admin ЗАТЕМ https://xin.foo.com/bar/bar"
При этом, я думаю, что пропасы AJP должны по-прежнему нормально работать. И что было бы с оценкой A +, было бы не изменять URL-адрес в браузере, чтобы люди продолжали читать "https://xin.foo.com«для настоящего и« скрытого »»https://xin.foo.com/bar/bar?app=personal".
Большое спасибо вам всем и добрые пожелания.