Avem un server proxy invers în fața unui server Exchange și am dori să blocăm mai multe căi. Exemple minimizate:
Eșuează (dar funcționează pentru toate paginile care nu necesită autentificare):
<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>
Lucrări:
<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>
Solicitarea se desfășoară atunci când se utilizează regula de rescriere și răspunde cu un 401 și oferă opțiuni pentru WWW-Authenticate, așa cum era de așteptat. Cu ProxyPass, autentificarea utilizatorului funcționează, în timp ce cu RewriteRUle, utilizatorului i se solicită în mod continuu autentificare, ceea ce presupun că este legat de NTLM.
Există mai multe întrebări în StackExchange care spun că mod_proxy nu poate gestiona autentificarea prin trecere NTLM, dar funcționează în acest caz.
Problema rescrierea modului poate fi rezolvată prin gestionarea căilor care nu necesită autentificare, apoi negând căile care ar trebui blocate și apoi făcând un ProxyPass global.
Soluție:
<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>
A cometariu pe altul întrebare a sugerat utilizarea mpm_prefork_module în loc de mpm_worker_module. Am verificat 00_mpm.conf și folosim worker și funcționează cu proxypass, așa că pare că ne lipsește ceva pentru opțiunea proxy mod_rewrite.
Cele mai multe întrebări pe care le-am găsit sunt despre autentificarea proxy inversă prin NTLM. Această întrebare este despre transmiterea autentificării către server și menținerea sesiunii intactă, nu autentificarea de la Apache (presupunând că nu este necesar pentru ca acest lucru să funcționeze).
Există setări care trebuie activate pentru a permite proxy-ul în timpul utilizării mod_rewrite?