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

Apache + MOD_JK: перезапись URL + передача прокси через AJP

У меня есть фронтальный сервер с развернутым 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".

Большое спасибо вам всем и добрые пожелания.