Re: Re[2]: Повторное использование map при изменении исходной переменной

Vladimir Latyshev latysheff at gmail.com
Fri Jul 24 13:04:34 MSD 2009


Запрос:
http://myhost/app1/request1.php

Конфиг (с рудиментами, но рабочий):
pid /var/run/nginx.pid;
events {worker_connections 4000;}
user nobody nobody;
error_log /var/log/nginx/error.log error;
http {
resolver 10.192.168.16;
root /var/www/nginx/html;
log_format devel
'$msec|$request_time|$bytes_sent|$remote_addr|$status|$time_local|'
'$request_method http://$http_host:$server_port$request_uri
$server_protocol|$http_referer|$http_user_agent|$ext_point|$group';
access_log /var/log/nginx/access.log devel;
map "${ext_host}/${ext_point}" $group {
  #include /etc/nginx/maps/group.txt;
  myhost/default public;
}
map "${ext_host}/${ext_point}" $group1 {
  #include /etc/nginx/maps/group.txt;
  myhost/default public;
}
server {
set $ext_host $http_host;
if ( $http_host ~* ^([^:]+)\:.*$ ) { set $ext_host $1; }
set $uri_x $request_uri;
if ($uri_x ~ ^/+(.*)$) { set $ext_point default; set $request_x $1; }
if ($uri_x ~ ^/+([^/]+)/+(.*)$) { set $ext_point $1; set $request_x $2; }
set $tmp $group:$uri_x; # doesn't work
#set $tmp $group1:$uri_x; # does work
if ($tmp ~* ^:/+(.*)$ ) { set $ext_point default; set $request_x $1; }
if ($group = "") { set $group "forbid"; }
if ($int_uri = "") { set $int_uri "localhost:8000"; }
if ($group = public) { set $proxy_url http://$int_uri/$request_x; break; }
if ($group = redirect) { rewrite .* http://$int_uri/$request_x permanent;
break; }
if ($group = forbid) { return 403; }
return 403;
location / { proxy_pass $proxy_url; }
}
server {
        access_log off;
        listen 8000;
        location / {
                root /var/www/html;
        }
}
}

Лог:
1248425804|0|322|10.192.168.141|404|2009.07.24 12:56:44|GET
http://myhost:80/app1/request1.php HTTP/1.1|-|Mozilla/5.0 (Windows; U;
Windows NT 6.0; ru; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1 (.NET CLR
3.5.30729)|default|public
1248425818|0|322|10.192.168.141|403|2009.07.24 12:56:58|GET
http://myhost:80/app1/request1.php HTTP/1.1|-|Mozilla/5.0 (Windows; U;
Windows NT 6.0; ru; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1 (.NET CLR
3.5.30729)|default|forbid

Первая строка - если set $tmp $group1:$uri_x;
вторая - если set $tmp $group:$uri_x;.

24 июля 2009 г. 12:08 пользователь Kirill A. Korinskiy
<catap+nginx at catap.ru<catap%2Bnginx at catap.ru>
> написал:

> At Fri, 24 Jul 2009 11:30:48 +0400,
> Vladimir Latyshev <latysheff at gmail.com> wrote:
> >
> > Я уже приводил его в ветке чуть выше.
> > Суть в том, что обрабатываются урлы вида http://host1/app1/request1.php.
> В map ищется сначала группа для host1/app1, и если не находится, то для
> host1/default.
> >
> > Можно в качестве примера вот так:
> > map "${ext_host}/${ext_point}" $group {
> >   host1/app2 public;
> >   host1/default public;
> >   host2/app1 public;
> > }
> >
>
> Странно то, что у меня не кешируется map.
>
> Можете сделать пример конфига в котором с моим патчем не работает
> подобное?
>
> Ну и примеры запросов на которых вы получаете не то что хотите :)
>
> --
> wbr, Kirill
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20090724/e6379bbd/attachment.html>


More information about the nginx-ru mailing list