Welcome! Log In Create A New Profile

Advanced

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

November 17, 2009 09:12AM
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@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
Subject Author Posted

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

n0guest November 17, 2009 07:44AM

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

Igor Sysoev November 17, 2009 09:12AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 319
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 500 on July 15, 2024
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready