выбор upstream при помощи map (remote_addr, hostname)

Костенко Евгений nobody.mail at gmail.com
Tue Nov 17 15:38:32 MSK 2009


Всем доброго времени суток!

Для некоторых из vhosts необходимо выбирать на какой upstream ходить в
зависимости от $remote_addr.

# uname -a
FreeBSD server3.nitgroup.org 7.0-RELEASE FreeBSD 7.0-RELEASE #0: Sun Feb 24
19:59:52 UTC 2008     root at logan.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC
i386

# nginx -V
nginx version: nginx/0.7.62
configure arguments: --prefix=/usr/local/etc/nginx --with-cc-opt='-I
/usr/local/include' --with-ld-opt='-R /usr/local/lib -L /usr/local/lib'
--conf-path=/usr/local/etc/nginx/nginx.conf
--sbin-path=/usr/local/sbin/nginx --pid-path=/var/run/nginx.pid
--error-log-path=/var/log/nginx-error.log --user=www --group=www
--with-google_perftools_module
--http-client-body-temp-path=/var/tmp/nginx/client_body_temp
--http-proxy-temp-path=/var/tmp/nginx/proxy_temp
--http-fastcgi-temp-path=/var/tmp/nginx/fastcgi_temp
--http-log-path=/var/log/nginx-access.log --with-http_gzip_static_module
--with-http_realip_module --with-http_ssl_module
--with-http_stub_status_module --with-pcre

Собственно вопрос - баловство с map & $remote_addr позволит юзать proxy_pass
с указанием ИМЕНИ,
декларированного upstream? Или только address:port? На примере

map $remote_addr $upstream_name {
    default        local;
    x.x.x.x        phpbackends;
    y.y.y.y        local;
}

и далее в конфиге

location / {
    proxy_pass         http://$upstream_name;
    <SKIPPED>
}

Эксперимент на практике приводит к перманентной выдаче 503 со стороны nginx.
Поиски в google привели к ruby-forum.com и предложенной Игорем реализации.

http://www.ruby-forum.com/topic/176958

    map $remote_addr  $back1 {

        default       10.0.0.1:80;
        192.168.1.1   10.0.0.2:80;
        192.168.1.5   10.0.0.2:80;
    }

    server {
        listen   80;
        server_name   bar.foo.com;

        location  / {
            proxy_pass  http://$back1$request_uri; <http://$back1$request_uri/;>

        }
    }

Но тут явное указание address:port, а в моем сюжете требуется указать named
upstream
с группой адресов внутри.

Есть идеи как прикрутить задуманное, или сие изврат и работать не будет?

-- 
С Уважением,
Костенко Евгений

моб: +7(928)2961142
icq: 101241013
jabber: nobody.mail at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20091117/0d5ea40c/attachment.html>


More information about the nginx-ru mailing list