ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: captures in regex location



On Thu, Mar 05, 2009 at 05:22:43PM +0300, Vladimir Sopot wrote:

> Увы,
> 
> 2009/03/05 16:54:16 [error] 18720#0: *5440 open() "/wwwroot/site///e/ 
> ea/0/12720.jpg" failed (2: No such file or directory),
> client: 94.188.35.148, server: ~^(s)(\d)\.site, request: "GET /e/ea/ 
> 0/12720.jpg HTTP/1.1", host: "s0.site", referrer:
>  "http://site/ea/12720.html";
> 
> Тоесть сервер точно матчится, но вот $1-2 не устанавливаются :(
> 
> Куда бы еще копнуть? Уж больно хочется и конфиг порезать и на  
> регекспах сэкономить :)

А патч точно приложен ?
Что показывает nginx, если в конфиг добавить такое:

    location ~ \.TXT$ {
        alias  /wwwroot/;
    }

?

> # uname -a
> Linux site 2.6.27.7-9-default #1 SMP 2008-12-04 18:10:04 +0100 x86_64  
> x86_64 x86_64 GNU/Linux
> 
> # ./configure >     --with-http_stub_status_module >     --without-mail_pop3_module >     --without-mail_imap_module >     --without-mail_smtp_module >     --without-http_access_module >     --without-http_autoindex_module >     --without-http_browser_module >     --without-http_charset_module >     --without-http_limit_zone_module >     --without-http_map_module >     --without-http_memcached_module >     --without-http_referer_module >     --without-http_ssi_module >     --without-http_userid_module >     --without-http_proxy_module >     --without-http_proxy_module
> ...........
> checking for PCRE library ... found
> ...........
> Configuration summary
>   + using system PCRE library
> ...........
> # pcre-config --version
> 7.8
> 
> On Mar 5, 2009, at 4:14 PM, Igor Sysoev wrote:
> 
> >On Thu, Mar 05, 2009 at 03:46:55PM +0300, Vladimir Sopot wrote:
> >
> >>Помимо описанного сервера есть еще секции
> >>
> >>server {
> >>       server_name ~^([b|o])(\d)\.site;
> >>    .......
> >>    }
> >>
> >>server {
> >>       listen *:80 default bind sndbuf=64k;
> >>       server_name site
> >>    ..........
> >>    }
> >>
> >>и добавление пустого сервера не исправило ситуацию.
> >
> >У меня для
> >
> >   server {
> >       listen  8000;
> >       server_name ~^([b|o])(\d)z\.site;
> >
> >       root    /wwwroot/site/$1/$2/;
> >   }
> >
> >в логах такая ошибка:
> >
> >[error] 58504#0: *1 open() "/wwwroot/site/b/1/dir/index.html" failed  
> >(2: No such file or directory), client: 127.0.0.1, server: ~^([b|o]) 
> >(\d)z\.site, request: "GET /dir/index.html HTTP/1.0", host: "b1z.site"
> >
> >То есть, путь "/wwwroot/site/b/1/dir/index.html" формиурется  
> >правильно.
> >
> >Кстати, "|" в "([b|o])" - лишняя.
> >
> >>On Mar 5, 2009, at 2:43 PM, Igor Sysoev wrote:
> >>
> >>>On Thu, Mar 05, 2009 at 01:57:49PM +0300, Vladimir Sopot wrote:
> >>>
> >>>>Спасибо, но что-то оно не того
> >>>>
> >>>> server {
> >>>>     server_name ~^([b|o])(\d)z\.site;
> >>>>
> >>>>#        if ($host ~* (.)(\d)) {
> >>>>         set $store_type $1;
> >>>>         set $store_id $2;
> >>>>#            }
> >>>>
> >>>>     root    /wwwroot/site/$store_id/$store_type/;
> >>>>     }
> >>>>
> >>>>В таком виде не работает (404), если убрать комментарии - все
> >>>>становится на свои места. Забрать root внутрь location / { } тоже
> >>>>ничего не дает. root  /wwwroot/site/$2/$1/ тоже не работает
> >>>
> >>>Скорее всего, regex вообще не исполняется, потому что сервер один -
> >>>проверять нечего. Нужно добавить пустой сервер, чтобы nginx начал
> >>>проверять
> >>>server_name:
> >>>
> >>>    server { server_name _; }
> >>>
> >>>>On Mar 5, 2009, at 1:17 PM, Igor Sysoev wrote:
> >>>>
> >>>>>On Thu, Mar 05, 2009 at 12:14:55PM +0200, Andrew Sitnikov wrote:
> >>>>>
> >>>>>>>>А можно такое же ещё и для server_name?
> >>>>>>IS> Новый патч с поддержкой server_name.
> >>>>>>можно пример ?
> >>>>>
> >>>>>Наверное, как-то так:
> >>>>>
> >>>>>server {
> >>>>>    listen  8000;
> >>>>>    server_name  ~^(?:www\.)?(.+)$;
> >>>>>
> >>>>>    location / {
> >>>>>        root   /path/to/$1;
> >>>>>    }
> >>>>>}
> >>>>>
> >>>>>
> >>>>>-- 
> >>>>>Игорь Сысоев
> >>>>>http://sysoev.ru
> >>>>>
> >>>>>
> >>>>
> >>>
> >>>-- 
> >>>Игорь Сысоев
> >>>http://sysoev.ru
> >>>
> >>>
> >>
> >
> >-- 
> >Игорь Сысоев
> >http://sysoev.ru
> >
> >
> 

-- 
Игорь Сысоев
http://sysoev.ru



 




Copyright © Lexa Software, 1996-2009.