Назад | Перейти на главную страницу

Синтаксис Apache2 RewriteRule для перенаправления ActiveSync в обратном прокси

Хорошо, я думаю, что это довольно простая задача, но у меня возникли небольшие проблемы с надежным тестированием и выяснением того, что я сделал не так. Я пытался следовать документации Apache mod_rewrite, но, похоже, она работает не так, как я ожидал.

У меня есть сервер Apache, работающий как обратный прокси-сервер перед Exchange CAS для общедоступного доступа к OWA, и мы хотим перехватывать трафик ActiveSync (простое сопоставление с шаблоном) и перенаправлять его на URL-адрес безопасного шлюза электронной почты (SEG) AirWatch. Весь остальной трафик (например, OWA веб-браузера) должен отправляться в CAS как обычно.

Итак, мы начали с чего-то вроде этого, и это отлично работает для доступа к OWA, но не выполняет перенаправление ActiveSync-to-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>

Поэтому я добавил эту строку (ту, что посередине), пытаясь переписать URL-адреса, начинающиеся с "/ Microsoft-Server-Activesync / [something]", в "https://seg.company.com/Microsoft-Server-Activesync/[whatever]":

<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. Как я могу устранить эту неполадку более разумно, чем «Нажмите URL-адрес ActiveSync в браузере, проверьте журналы веб-сервера, чтобы узнать, куда он пошел»?

Заранее спасибо!

С уважением, Джон Хиз

Хех, эта конфигурация не зря показалась знакомой. Привет, Джон! Надеюсь, я не оставил вам слишком много беспорядка.

Я думаю, ты почти добился успеха. Одна небольшая проблема с чувствительностью к регистру, телефоны должны отправлять /Microsoft-Server-ActiveSync вместо того /Microsoft-Server-Activesync, так что пропустить матч. Кроме того, не уверен, что в запросах всегда будет что-то, что следует по этому пути, поэтому мы хотим, чтобы он все еще работал, если захват представляет собой просто строку нулевой длины (и если есть строка запроса, она просто переносится - мы можем полностью игнорируйте его, и он будет сохранен).

Что-то вроде этого:

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

В L flag на самом деле не требуется с текущей конфигурацией, но, как правило, хорошо иметь его, просто чтобы убедиться, что никакие перезаписи дальше по строке не приводят к изменению цели перенаправления.

Попробуйте поменять местами, и если это не сработает, хорошим способом разобраться в том, что происходит, было бы включить RewriteLog файл и включите RewriteLogLevel 9.