captures in regex location

Vladimir Sopot jd at artdesign.ru
Thu Mar 5 18:46:03 MSK 2009


В эту сторону я уже думал и на такой location - ругается, да.

Но патч вроде ложится -

nginx-0.7.39/src/http # patch -p2 <patch.location_captures
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
>
>






More information about the nginx-ru mailing list