Реверс прокси с параметрами

Igor Sysoev is at rambler-co.ru
Tue Aug 4 15:11:02 MSD 2009


On Tue, Aug 04, 2009 at 01:26:05PM +0400, Александр Горбань wrote:

> ЗАДАЧА:
> Есть веб сервер и несколько backend серверов. Мне нужно настроить веб
> сервер таким образом, что бы в записимости от параметров в запросе он
> проксировал его на заданный backend сервер.
> Например: запрос http://myfront.com/index.html?ip=1.1.1.1&port=1111
> был проксирован к backend серверу 1.1.1.1 на порт 1111
> Я попытался сделать это при помощи следующей конфигурации:
> server {
>     listen 80;
>     server_name myfront.com;
>     location / {
>         if ($arg_ip = "") {
>             return 400;
>         }
>         if ($arg_port = "") {
>             return 400;
>         }
>         proxy_pass http://$arg_ip:$arg_port/;

-         proxy_pass http://$arg_ip:$arg_port/;
+         proxy_pass http://$arg_ip:$arg_port$request_uri;

или

+         proxy_pass http://$arg_ip:$arg_port$uri;

>         proxy_redirect default;
>     }
> }
> 
> Но при такой конфигурации по запросу пользователя
> http://myfront.com/about.html?ip=1.1.1.1&port=1111 на сервер 1.1.1.1
> приходит запрос http://1.1.1.1/, сервер 1.1.1.1 редиректит на
> http://1.1.1.1/index.html, а браузер пользователя редиректится на
> http://1.1.1.1/index.html
> Мне нужно, что бы браузер пользователя если и редиректился то только
> на myfront.com с параметрами ip=1.1.1.1&port=1111, что бы nginx знал,
> куда проксировать этот запрос.
> 
> Я знаю, что можно настроить группу серверов, но мне этот вариант не
> подходит, потому что мне нужна гарантия, что конкретный запрос
> пользователя будет проксирован на конкретный сервер даже если
> пользователь будет делать этот запрос с разных адресов. В случае с
> директивой upstream такой гарантии нет.
> 
> Большое спасибо за попощь!
> 
> -- 
> С уважением, Горбань Александр

-- 
Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list