Re: the “alias” directive must use captures + оптимизация конфига
Maxim Dounin
mdounin на mdounin.ru
Ср Янв 27 03:31:50 MSK 2010
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