Re: Как правильно задать локейшн

Igor Sysoev igor на sysoev.ru
Чт Дек 17 17:25:43 MSK 2009


On Thu, Dec 17, 2009 at 05:16:38PM +0300, Maxim Dounin wrote:

> Hello!
> 
> On Thu, Dec 17, 2009 at 04:30:58PM +0300, Андрей Бойко wrote:
> 
> > Добрый день.
> > 
> > Есть локейшн 
> >         location ~* ^.+\.(swf|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|wmv|avi|asp)$ 		{
> >             ssi on;
> >             root        /usr/local/www/htdocs;
> >             expires 24h;
> >         }
> > Он призван отдавать статику напрямую
> > Кто-то умный загрузил кучу файлов вида xxx.GIF, и для этих файлов локейшн не срабатывает. Как ему правильно дать понять, что регистр может быть любой?
> 
> http://sysoev.ru/nginx/docs/http/ngx_http_core_module.html#location
> 
> Там достаточно однозначно написано, что "~*" - это caseless match, 
> указанный location должен срабатывать.
> 
> То, что он не срабатывает - это бага, появилось где-то в 0.8.*, 
> сейчас буду смотреть подробнее.
> 
> Quick workaround - поставить caseless явно в регулярное выражение:
> 
>     location ~ (?i)\.(swf|gif|...)$ {
>         ...
>     }

Патч. Появилось в 0.8.25.


-- 
Игорь Сысоев
http://sysoev.ru
-------------- next part --------------
Index: src/http/ngx_http_core_module.c
===================================================================
--- src/http/ngx_http_core_module.c	(revision 2709)
+++ src/http/ngx_http_core_module.c	(working copy)
@@ -2588,6 +2588,8 @@
 
 #if (NGX_HAVE_CASELESS_FILESYSTEM)
     rc.options = NGX_REGEX_CASELESS;
+#else
+    rc.options = caseless;
 #endif
 
     clcf->regex = ngx_http_regex_compile(cf, &rc);


Подробная информация о списке рассылки nginx-ru