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

Обратный прокси-сервер Apache Unescapes URL

Я использую Apache 2.2.15 в качестве обратного прокси в моей DMZ. У меня есть приложение во внутренней сети, которое я делаю доступным в Интернете для использования сотрудниками через обратный прокси-сервер.

В рамках этого приложения сотрудники могут просматривать сообщения с вложениями в формате PDF. Внутренний персонал (которому не нужно проходить через обратный прокси-сервер) может без проблем загрузить эти PDF-файлы. Внешний персонал не может.

Это то, что я вижу в журналах Apache на сервере приложений.

172.20.0.9 - - [04/Dec/2014:08:48:21 +1300] "GET /application/home/getAttachment/MTE7Y3lzdGljIGZpYnJvc2lzLnBkZg%3D%3D HTTP/1.1" 200 88090
10.0.0.2 - - [04/Dec/2014:08:48:27 +1300] "GET /application/home/getAttachment/MTE7Y3lzdGljIGZpYnJvc2lzLnBkZg== HTTP/1.0" 400 -

Первый запрос был от внутреннего пользователя, который успешно загрузил файл PDF. Второй исходит от обратного прокси в DMZ. Обратите внимание, как он отключил экранирование «% 3D% 3D» в конце URL-адреса на «==».

В обратном прокси я делаю несколько вещей. Сначала, если кто-то пытается перейти в корневой каталог, правило перезаписи отправляет его в каталог приложения.

  <IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule ^/$ /application/ [NE,R]
  </IfModule>

Другая важная часть конфигурации - это часть обратного прокси.

  <IfModule mod_proxy.c>
   RequestHeader set Front-End-Https "On"
   SSLProxyEngine on
   SetEnv           force-proxy-request-1.0 1
   SetEnv           proxy-nokeepalive       1
   SetEnv proxy-initial-not-pooled 1

   # Reverse Proxy
   ProxyPass /application https://server.internal.lan/application
   ProxyPassReverse /application https://server.internal.lan/application
  </IfModule>

Может ли кто-нибудь сказать мне, как перестать экранировать эти URL-адреса?

Спасибо

Дэвид

Флаг [NE] в вашем правиле перезаписи устанавливает для него значение No Escape. Попробуйте изменить его на [B], чтобы избежать обратных ссылок.