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
|