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
 
 |