У нас есть обратный прокси-сервер перед сервером Exchange, и мы хотели бы заблокировать больше путей. Свернутые примеры:
Не работает (но работает для всех страниц, не требующих аутентификации):
<VirtualHost 192.168.1.81:443>
ServerName autodiscover.example.com
SSLEngine On
SSLProxyEngine On
Include conf/sslcert.conf
RewriteEngine On
RewriteRule (.*) https://exchangecluster.example.com$1 [P,L]
ProxyPassReverse / https://exchangecluster.example.com/
</VirtualHost>
Работает:
<VirtualHost 192.168.1.81:443>
ServerName autodiscover.example.com
SSLEngine On
SSLProxyEngine On
Include conf/sslcert.conf
RewriteEngine On
ProxyPass / https://exchangecluster.example.com/
ProxyPassReverse / https://exchangecluster.example.com/
</VirtualHost>
Запрос выполняется при использовании правила перезаписи и отвечает кодом 401 и предоставляет параметры для WWW-аутентификации, как и ожидалось. С ProxyPass работает аутентификация пользователя, а с RewriteRUle пользователю постоянно предлагается пройти аутентификацию, что, как я полагаю, связано с NTLM.
В StackExchange есть несколько вопросов, в которых говорится, что mod_proxy не может обрабатывать сквозную аутентификацию NTLM, но в этом случае он работает.
Проблема перезаписи модов может быть решена путем обработки путей, не требующих аутентификации, затем запрещения путей, которые должны быть заблокированы, а затем выполнения глобального ProxyPass.
Обходной путь:
<VirtualHost 192.168.1.81:443>
ServerName autodiscover.example.com
SSLEngine On
SSLProxyEngine On
Include conf/sslcert.conf
RewriteEngine On
# Block all requests except the autodiscover URLs
RewriteCond "%{REQUEST_URI}" "!^/autodiscover/autodiscover\.(?:xml|json|svc)$" [NC]
RewriteRule ^ - [F]
ProxyPass / https://exchangecluster.example.com/
ProxyPassReverse / https://exchangecluster.example.com/
</VirtualHost>
А комментарий на другом вопрос предложил использовать mpm_prefork_module вместо mpm_worker_module. Я проверил наш 00_mpm.conf, и мы используем worker, и он работает с proxypass, поэтому кажется, что мы что-то упустили для опции прокси mod_rewrite.
Большинство вопросов, которые я обнаружил, касаются аутентификации обратного прокси-сервера через NTLM. Эти вопросы касаются прохождения аутентификации на сервере и сохранения сеанса без изменений, а не аутентификации от Apache (при условии, что это не требуется для выполнения этой работы).
Есть ли какие-либо настройки, которые необходимо включить, чтобы разрешить проксирование при использовании mod_rewrite?