反向代理中 ActiveSync 重定向的 Apache2 RewriteRule 语法

反向代理中 ActiveSync 重定向的 Apache2 RewriteRule 语法

好吧,我认为这是相当简单的任务,但我在可靠地测试和找出我做错的地方时遇到了一些麻烦。我尝试遵循 Apache mod_rewrite 文档,但它似乎没有按我预期的方式工作。

我在 Exchange CAS 前面运行一个 Apache 服务器作为反向代理,用于公共 OWA 访问,我们想要拦截 ActiveSync 流量(简单模式匹配)并将其重定向到 AirWatch 安全电子邮件网关 (SEG) URL。所有其他(即 Web 浏览器 OWA)流量应照常发送到 CAS。

因此,我们开始做的事情是这样的,这对于 OWA 访问来说非常有效,但不执行 ActiveSync 到 SEG 的重定向:

<VirtualHost *:443>
  ServerName webmail.company.com:443
  RewriteEngine on
  RewriteRule ^/$ https://webmail.company.com/exchange [R,L]
  <Location />
    Order allow,deny
    Allow from all
    # This is the CAS's internal IP
    ProxyPass https://10.100.10.209/
    ProxyPassReverse https://10.100.10.209/
  </Location>
</VirtualHost>

因此,我添加了此行(中间的一行),尝试将以“/Microsoft-Server-Activesync/[whatever]”开头的 URL 重写为“https://seg.company.com/Microsoft-Server-Activesync/[无论如何]“:

<VirtualHost *:443>
  ...
  RewriteEngine on
  RewriteRule ^/Microsoft-Server-Activesync?(.+)$ https://seg.company.com/Microsoft-Server-Activesync?$1 [R]
  RewriteRule ^/$ https://webmail.company.com/exchange [R,L]
  ...
</VirtualHost>

当我进行此更改时(当然是在测试中),我从移动设备向其发送的流量似乎没有被重定向。相反,ActiveSync 流量只是像往常一样流向 Exchange CAS,就像规则没有被触发一样。

因此,有两个问题:

  1. 我添加的 RewriteRule 是否做了一些明显的错误?
  2. 我怎样才能比“在浏览器中点击 ActiveSync URL,检查 Web 服务器日志以找出它去了哪里”更智能地排除故障?

提前致谢!

问候,Jon Heese

答案1

嘿,这个配置看起来很熟悉是有原因的。嘿,乔恩!希望我没有留下太多让你收拾的烂摊子。

我认为您已经基本搞定了。但有一个小问题,手机应该发送/Microsoft-Server-ActiveSync而不是/Microsoft-Server-Activesync,因此会错过匹配。此外,不确定请求是否总是会遵循该路径,因此如果捕获的只是一个零长度字符串,我们希望它仍然有效(如果有一个查询字符串,它只会被执行 - 我们可以完全忽略它并且它会被保留)。

像这样:

RewriteRule ^/Microsoft-Server-ActiveSync(.*)$ https://seg.company.com/Microsoft-Server-ActiveSync$1 [R,L]

对于当前配置来说,这个L标志并不是必需的,但通常最好这样做,以确保后续的重写不会对重定向目标造成影响。

尝试交换它,如果不奏效,那么进一步了解发生了什么的一个好方法是打开一个RewriteLog文件,然后调出RewriteLogLevel 9

相关内容