Как настроить apache как обратный proxy с удаленным serverом, указанным в параметре строки requestа

Проблема:
Я пытаюсь настроить apache как обратный proxy, где server удаления указан в параметре строки requestа.

Допустим, я обслуживаю website на mywebapp.com. Если вы перешли на http://mywebapp.com/proxy?url=http://www.someothersite.com , тогда apache должен действовать как обратный proxy-server на http://www.someothersite.com . Аналогично, если вы перешли на http://mywebapp.com/proxy?url=https://login.notmysite.com , тогда apache должен действовать как обратный proxy-server на https://login.notmysite.com .

Соображения:
1. Перепишите относительные URL-адреса в ответе html, чтобы пройти через proxy-server
2. Перепишите ответы перенаправления с удаленного serverа. Например, если user запрашивает mywebapp.com/proxy?url= https://login.notmysite.com, а удаленный server отвечает redirectм на https://login.notmysite.com/ , тогда browser пользователя должен уviewеть redirect на mywebapp.com/proxy?url= https://login.notmysite.com/ .
3. Поддержка http и https
4. Поддержка fileов cookie.
5. Разумная security. Я не хочу открывать proxy для кого-либо в мире, который должен использоваться – его следует использовать только в iframe на websiteе, размещенном на mywebapp.com.

Окружающая среда:
Я использую apache 2.2.24, но я могу обновить, если это облегчит задачу.

Текущая configuration:

<VirtualHost 127.0.0.1:8081> ServerName www.mywebapp.com SSLProxyEngine On RewriteEngine on RewriteCond %{QUERY_STRING} ^url=(.*)$ RewriteRule ^/proxy - [E=url:%1] RewriteCond %{QUERY_STRING} ^url=(https?://[^:/]+)/? RewriteRule ^/proxy - [E=url_host:%1] RewriteCond %{QUERY_STRING} ^url=(.*)$ RewriteRule ^/proxy %1 [P] ProxyPassInterpolateEnv On ProxyPassReverse /proxy/ ${url_host} interpolate <Location /proxy> ProxyHTMLEnable On ProxyHTMLInterp On ProxyHTMLURLMap / ${url_host}/ V RequestHeader unset Accept-Encoding </Location> </VirtualHost> 

Эта configuration, похоже, работает правильно для рассмотрения №1, но я попал в блокпост с рассмотрением № 2. Я знаю, что вы обычно обрабатываете перенаправления с помощью команды ProxyPassReverse, но я не уверен, как заставить его переписать параметр строки requestа.

Вопросов:
Учитывая соображения, является ли Apache подходящим инструментом для решения этой проблемы?
Если да, как мне настроить конфигурацию для apache для удовлетворения всех вышеперечисленных соображений?

Я знаю, что это большой вопрос – если вы можете дать ответ, который поможет мне удовлетворить только одно из соображений, я обновляю приведенную выше конфигурацию для сообщества.

mod_headers могут справиться с этим.

 Header set Location http://mywebapp.com/proxy?%{url}e expr="resp('Location') =~ /.*/" 

Для части expr требуется apache 2.4.

Примечание. Я не тестировал это.

Рекомендации:

http://httpd.apache.org/docs/2.4/mod/mod_headers.html http://httpd.apache.org/docs/2.4/expr.html

Возможно, решение проблемы с Фунтом было бы проще и безопаснее. Но тогда это не redirect, а обратный proxy.

Кроме того, небольшой PHP-скрипт мог бы также выполнить эту работу …

Самая большая проблема с вашей идеей заkeyается в том, что если вы ожидаете, что обратный proxy-server отправит fileы cookie на бэкэнд, но клиент не отправит fileы cookie в interface (если домен бэкэнд-fileа cookie не уступает interfaceу).

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

… но я думаю, что вы, вероятно, пытаетесь решить проблему с вероятным дефектом designа. Возможно, если вы сможете еще глубже рассказать о проблеме, которую вы пытаетесь решить с помощью этого решения, мы могли бы предложить что-то немного более чистое.

  • Прокси-вперед в Squid через другой публичный IP-адрес в зависимости от локального порта
  • Облака proxy / IP, как компании их приобретают?
  • Nginx + Haproxy + Thin + Rails - 503 Service Unavailable -
  • Как настроить parameters proxy для LOCAL SYSTEM?
  • Apache Rewrite или Proxy для внутреннего serverа
  • Как настроить Apache для работы в качестве proxy-serverа SSL на serverе приложений?
  • Как настроить parameters proxy-serverа browserа централизованно
  • Маршрутизация всех исходящих http на ntlmaps
  • Apache: proxy на основе суффиксов URL
  • varnish ignore haproxy session affinity cookie
  • Замена TightVNC альтернативным клиентом (параметр CONNECT)
  • Давайте будем гением компьютера.