ПРОЕКТЫ 


  АРХИВ 


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: эмуляция if/else



Так никто на вопрос-то и не ответил -- про last/break. А место в самом деле не очень понятное. Вот на http://sysoev.ru/nginx/docs/http/ngx_http_rewrite_module.html#rewrite написано:

===============
Если же эти директивы поместить в location /download/, то нужно заменить флаг last на break, иначе nginx сделает 10 циклов и вернёт ошибку 500:

       location /download/ {
           rewrite  ^(/download/.*)/media/(.*)\..*$  $1/mp3/$2.mp3  break;
           rewrite  ^(/download/.*)/audio/(.*)\..*$  $1/mp3/$2.ra   break;
           return   403;
       }
===============

Во-первых, ПОЧЕМУ last вызовет зацикливание? После первого же рерайта запрос перестанет попадать в паттерн -- там же media заменится на mp3. Во-вторых, куда всё-таки пойдёт управление после break? На return? Или поскольку return тоже "директива ngx_http_rewrite_module" -- дальше пойдёт отдача из этой локации статикой?

Всегда были не совсем ясны сходство и различия break;, rewrite break и
rewrite last.

Обычная задача. Существующие файлы отдавать статикой, несуществующие
проксировать. Сейчас написано два if: -f и !-f.

Как это написать более правильно?

Может так? Есть комментарии по поводу этого куска?

location / {
if (-f $request_filename) {
break;
root html;
}
proxy_pass http://127.0.0.1:1234;
}
Вдогонку.

proxy_pass http://localhost/; # (!!!) / в конце

это то же самое, что

rewrite .* /;
proxy_pass http://localhost;
?

Заранее спасибо за помощь.



--
С уважением
Давид Мзареулян
david@xxxxxxxx






 




Copyright © Lexa Software, 1996-2009.