Я настраиваю интерфейс Apache 2.2 для передачи определенных приложений в Tomcat через mod_proxy_ajp. В некоторых из этих приложений, таких как служба входа / аутентификации, я хочу принудительно принимать только HTTPS-запросы.
В моем файле httpd-proxyajp.conf есть такие строфы для каждого приложения:
ProxyPass /auth-1.0 ajp://localhost:8009/auth-1.0
ProxyPassReverse /auth-1.0 ajp://localhost:8009/auth-1.0
<Proxy /auth-1.0>
Order Deny,Allow
Allow from All
</Proxy>
<Proxy /auth-1.0/WEB-INF>
Order Deny,Allow
Deny from All
</Proxy>
И я не хочу перенаправлять на них http-обращения - это вроде как побеждает цель, если кто-то напишет клиент, который слепо передает свои учетные данные для входа в систему полностью мне в открытом виде, и я просто заставляю их передавать их в зашифрованном виде во второй раз через перенаправить. Поэтому я не хочу делать общее решение,
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^/auth-1.0 https://%{HTTP_HOST}%{REQUEST_URI}
Я действительно хочу вместо этого выдать ошибку.
Сложность: это делается на Amazon EC2, поэтому нельзя использовать виртуальные хосты на основе IP и нельзя использовать на основе имен, потому что я использую SSL. Я бы предпочел сделать это без виртуального хостинга; Мне нужно, чтобы приложения обслуживались с одним и тем же DNS-именем.
Думаю, я придумал что-то, что делает то, что я хочу, но хотел бы критики. Я тестировал его, и, похоже, он работает для наиболее очевидных случаев использования, но это может быть сложно для крайних случаев. В любом случае, для любого из этих приложений я хочу быть «только https», он выдает 403 Forbidden, если вы нажимаете их через http, но отлично работает через https.
В httpd-proxyajp.conf:
RewriteEngine On
#
# Auth Service
#
RewriteCond %{HTTPS} off
RewriteRule ^/auth-1.0 - [F]
ProxyPass /auth-1.0 ajp://localhost:8009/auth-1.0
...
#
# An Insecure Service, foo
#
ProxyPass /foo-1.0 ajp://localhost:8009/foo-1.0
...
#
# Another Secure-only Service, bar
#
RewriteCond %{HTTPS} off
RewriteRule ^/bar-1.0 - [F]
ProxyPass /bar-1.0 ajp://localhost:8009/bar-1.0
...