Chúng tôi có một máy chủ proxy ngược phía trước máy chủ Exchange và muốn khóa nhiều đường dẫn hơn. Ví dụ tối thiểu:
Không thành công (nhưng hoạt động với tất cả các trang không yêu cầu xác thực):
<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>
Làm:
<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>
Yêu cầu được thực hiện khi sử dụng quy tắc viết lại và phản hồi bằng 401 và cung cấp các tùy chọn cho WWW-Authenticate như mong đợi. Với ProxyPass, xác thực của người dùng hoạt động, trong khi với RewriteRUle, người dùng liên tục được nhắc xác thực, điều mà tôi cho rằng có liên quan đến NTLM.
Có một số câu hỏi trong StackExchange nói rằng mod_proxy không thể xử lý xác thực chuyển qua NTLM, nhưng nó hoạt động trong trường hợp này.
Vấn đề viết lại mod có thể được khắc phục bằng cách xử lý các đường dẫn không yêu cầu xác thực, sau đó từ chối các đường dẫn cần bị chặn, sau đó thực hiện ProxyPass toàn cầu.
Cách giải quyết:
<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>
Một bình luận trên khác câu hỏi đề xuất sử dụng mpm_prefork_module thay vì mpm_worker_module. Tôi đã kiểm tra 00_mpm.conf của chúng tôi và chúng tôi đang sử dụng worker và nó hoạt động với proxypass, vì vậy có vẻ như chúng tôi đang thiếu thứ gì đó cho tùy chọn proxy mod_rewrite.
Hầu hết các câu hỏi tôi tìm thấy là về việc xác thực proxy ngược qua NTLM. Câu hỏi này là về việc chuyển xác thực đến máy chủ và giữ nguyên phiên, không xác thực từ Apache (giả sử điều đó không bắt buộc để thực hiện công việc này).
Có bất kỳ cài đặt nào cần được bật để cho phép ủy quyền trong khi sử dụng mod_rewrite không?