captures in regex location

Igor Sysoev is at rambler-co.ru
Thu Mar 5 18:56:43 MSK 2009


On Thu, Mar 05, 2009 at 06:46:03PM +0300, Vladimir Sopot wrote:

> В эту сторону я уже думал и на такой location - ругается, да.
> 
> Но патч вроде ложится -
> 
> nginx-0.7.39/src/http # patch -p2 <patch.location_captures

Это первый патч, нужен patch.location_captures1

> patching file ngx_http_core_module.c
> patching file ngx_http_request.h
> patching file ngx_http_script.c
> patching file ngx_http_script.h
> patching file modules/ngx_http_rewrite_module.c
> 
> и objs/nginx получается другого размера, если без патча.
> 
> On Mar 5, 2009, at 5:30 PM, Igor Sysoev wrote:
> 
> >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
> >
> >
> 

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





More information about the nginx-ru mailing list