Apache переписать запрос с использованием другого прямого прокси - PullRequest
6 голосов
/ 16 марта 2010

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

Я также проверил свойство ProxyRemote для mod_proxy, но его нельзя использовать в зависимости от условий, только в зависимости от URL запроса.

Мне нужно что-то вроде:

Если X-CUSTOM-HEADER имеет значение-1 -> запрос пересылки для пересылки прокси p1 Если X-CUSTOM-HEADER имеет значение 2 -> запрос пересылки для пересылки прокси p2

и т.д.

Дин кому-нибудь удалось сделать что-то подобное?

Спасибо, Alin

Ответы [ 3 ]

2 голосов
/ 10 сентября 2011

Я нашел решение, оно не очень элегантное. Это предполагает некоторую адаптацию и на втором сервере.

Это происходит из проекта, в котором у меня была похожая проблема, но требовалось, чтобы серверы были "полностью" (выбраны с помощью специального скрипта, который использует ресурсы базы данных).

Это должно как минимум сработать (я изменил свой URL через карту перезаписи, чтобы изменить его, я адаптировал его для использования заголовков, используя RewriteCond).

# example for server number "5" in your remote proxy network
RewriteCond %{HTTP:X-CUSTOM-HEADER} 1
RewriteRule http://([a-z0-9\.]+)/(.*) http://$1.5.server.yourdomain.com$1 [P] 
ProxyRemoteMatch .*\.5\.server\.yourdomain\.com.* http://5.server.yourdomain.com:80

Вы в основном адаптируете URL-адрес так, чтобы он являлся поддоменом вашего второго сервера, а затем снова удаляете его.
Эта часть идет на второй (удаленный прокси-сервер):

<ProxyMatch "http://.*\.[0-9]+\.server\.yourdomain\.com/.*">
    RewriteEngine on
    RewriteRule (proxy:http[s]?://.+)\.[0-9]+\.server\.premiumize\.me(.+) $1$2 
    ... your code ...
</ProxyMatch>
1 голос
/ 17 января 2012

Попробуйте это:

# Prevents Apache from functioning as a forward proxy server (where you don't want)
ProxyRequests Off
# Preserve Host in http protocol on destination server
ProxyPreserveHost On
<Proxy *>
   Order deny,allow
   Allow from all
</Proxy>
# enable rewrite engine
RewriteEngine On 
# check header
RewriteCond %{HTTP:X-CUSTOM-HEADER} 1
# execute forward proxy
RewriteRule (.*) http://server1/$1 [P,L,QSA]

# check header
RewriteCond %{HTTP:X-CUSTOM-HEADER} 2
# execute forward proxy
RewriteRule (.*) http://server2/$1 [P,L,QSA]
0 голосов
/ 02 апреля 2011

вы сможете достичь этого, используя директиву RewriteCond, проверяя с помощью% {HTTP: header}.

Попробуйте следующее:

RewriteEngine On 

RewriteCond %{HTTP:X-CUSTOM-HEADER} 1
RewriteRule (.*) http://p1.example.com$1 [P] 
ProxyPassReverse / http://p1.example.com

RewriteCond %{HTTP:X-CUSTOM-HEADER} 2
RewriteRule (.*) http://p2.example.com$1 [P] 
ProxyPassReverse / http://p2.example.com

Надеюсь, это поможет. :)

...