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

Александр Горбань alex.gorban at gmail.com
Tue Aug 4 13:26:05 MSD 2009


ЗАДАЧА:
Есть веб сервер и несколько 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_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 такой гарантии нет.

Большое спасибо за попощь!

-- 
С уважением, Горбань Александр


More information about the nginx-ru mailing list