выбор upstream при помощи map (remote_addr, hostname)
Igor Sysoev
is at rambler-co.ru
Tue Nov 17 16:59:01 MSK 2009
On Tue, Nov 17, 2009 at 03:38:32PM +0300, Костенко Евгений wrote:
> Всем доброго времени суток!
>
> Для некоторых из 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
> с группой адресов внутри.
>
> Есть идеи как прикрутить задуманное, или сие изврат и работать не будет?
map $remote_addr $back1 {
default local;
192.168.1.1 phpbackends;
192.168.1.5 local;
}
upstream phpbackends {
server ...;
server ...;
}
upstream local {
server ...;
server ...;
}
server {
listen 80;
server_name bar.foo.com;
location / {
proxy_pass http://$back1$request_uri;
}
}
В 0.8.26 можно так:
location / {
proxy_pass http://$back1;
--
Игорь Сысоев
http://sysoev.ru
More information about the nginx-ru
mailing list