ПРОЕКТЫ 


  АРХИВ 


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: the ?alias? directive must use captures + оптимизация конфига



Hello!

On Wed, Jan 27, 2010 at 02:30:12AM +0500, Nick Knutov wrote:

> А кто-нибудь может сказать, зачем именно the ?alias? directive must
> use captures inside location given by regular expression? Почему
> нельзя сделать локейшен с регекспом, но внутри ничего из регекспа не
> использовать?

В нормальной ситуации (статический location) alias задаёт путь до 
того места, которое поматчилось location'ом (в отличии от 
директивы root, которая задаёт путь до корневого каталога).

В случае regex location'ов - "поматчился" весь uri, т.е. alias 
должен задавать полный путь.

В принципе я считаю что "must use captures" - это неправильно. 
Т.е. сейчас это по факту не так, достаточно просто использовать 
переменные.  Но мне кажется что вполне логично задавать полный 
путь и без использования переменных (я в частности периодически с 
подобной задачей сталкиваюсь, и необходимость использования 
переменных только мешает).  Однако есть мнение что это 
вызовет большой поток вопросов от людей написавших в конфиге 
что-нибудь в духе

   location ~ \.jpg$ {
       alias /path/to/images/directory/;
   }

и удивляющихся почему оно не работает.

> И заодним - чтобы обрабатывать интернал редиректы в статику, но
> статику никогда не отдавать апачу - приходится делать тафталогию в
> конфиге.
> 
> Нельзя ли это как-то оптимизировать и упростить?
> 
> location / {
>       proxy_pass          http://127.0.0.2:80;
>       [...]
> }
> 
> location /internal_xxx/ {
>       alias /home/***/www/***/;
>       internal;
> }
> location ~* ^/internal_xxx/(.+\.(?:jpg|jpeg|gif|png|txt))$ {
>       alias /home/***/www/***/$1;
>       internal;
> }
> 
> location ~* ^.+\.(jpg|jpeg|gif|png|txt)$ {
>       root /home/***/www/***;
>       expires 1d;
> }
> 
> Последний локейшен нужен чтобы обрабатывать статику не отправляя её
> апачу из первого локейшена, а второй интернал локейшен нужен чтобы
> правильно отдавалась статика если был сделан интернал редирект на
> нее. Если этот локейшен убрать - к пути добавляется internal_xxx/,
> всё это попадает в последний локейшн и 404.

- location /internal_xxx/ {
- location ^~ /internal_xxx/ {

Ну и "location ~* ^/internal_xxx/..." стереть.

Maxim Dounin

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.