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