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

Мод-прокси с альтернативами строки запроса?

В настоящее время я пытаюсь использовать mod_proxy для выполнения поисковых запросов на другом сервере. Запросы удаленного сервера должны быть структурированы следующим образом:

http://path.to.remote/search.php?key=MYKEY&term=SEARCHTERM

Пытаясь запутать свой ключ доступа, я надеялся включить аутентификацию в свои определения vhost. Поскольку ключ должен быть передан как значение строки запроса, я подумал, что это будет очень просто:

ProxyPass /lookup/t/ http://path.to.remote/search.php?key=MYKEY&term=

Где мои URL-адреса будут выглядеть

http://localhost/lookup/t/term=SEARCHTERM

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

Я нашел несколько советов, что мне следует использовать mod_rewrite для сборки запроса прокси для меня, но я не знал, как это сделать. Я закончил с правилами в моем определении vhost, которые выглядят примерно так:

RewriteEngine On
RewriteCond     %{REQUEST_URI}      !^/lookup/t/
RewriteRule ^/lookup/t/$ http://path.to.remote/search.php?key=MYKEY&term=$1

У меня нет большого опыта работы с mod_rewrite, и мои навыки работы с регулярными выражениями невелики, поэтому я надеюсь, что кто-то сможет объяснить, как я бы переписал свой URL-адрес и как при необходимости направить его через mod_proxy. Правильно ли я считаю, что мне нужно использовать перезапись, чтобы собрать строку запроса следующим образом:

Http://localhost/lookup/t/term=SEARCHTERM  
Http://localhost/lookup/t/?key=MYKEY&term=SEARCHTERM  

а затем используйте мод-прокси, чтобы перейти от

/lookup/t/   

к

http://path.to.remote/search.php

Мои подозрения оправдались. Мне пришлось изменить строку запроса с помощью mod_rewrite, а затем проксировать ее в пункт назначения. В конце концов:

  1. Я включил mod_rewrite и mod_ssl
  2. Я добавил директиву SSLProxyEngine в свое определение vhost:
    SSLProxyEngine включен
  3. Я включил перезапись и добавил правило в свой vhost def. Я также включил ведение журнала для отладки. Я узнал, что не смогу переписать запрос каталога, поэтому мне пришлось указать на скрипт. Мне также пришлось использовать варианты QSA и P:
    RewriteEngine On
    RewriteRule ^ / lookup.php / lookup? Key = MYKEY [QSA, P]

  4. Я настроил свои правила прокси. Поскольку строка запроса построена, применяются простые правила проксирования:
    ProxyPass / поиск https: //path.to.remote/search.php
    ProxyPassReverse / поиск https: //path.to.remote/search.php

  5. Не забудьте перезапустить apache! (Я сделал)

  6. Я сейчас подключаюсь к http://localhost/lookup.php?term=SEACRHTERM