allow/deny and return
Gena Makhomed
gmm at csdoc.com
Mon Oct 21 17:44:06 UTC 2013
On 21.10.2013 15:37, Maxim Dounin wrote:
>> Ошибки работы try_files в location с alias ведь можно исправить?
> С тем же успехом можно исправить if. О чём и разговор: подход
> "давайте вместо того, чтобы исправлять старое, сделаем новое"
> приводит к увеличению проблем.
следуя такой логике - любая новая feature приводит к увеличению проблем.
например, добавили ngx_http_spdy_module - и появились НОВЫЕ проблемы.
разве кто-то когда-то утверждал, что try_files - это замена для if ?
нет, это новая дополнительная feature, как и SPDY не замена HTTP/1.1
кстати, трудоемкость исправления всех проблем if гораздо выше,
чем трудоемкость исправления всех проблем try_files (с alias).
у директивы if есть существенный недостаток - она работает
до access-проверок и этот недостаток исправить невозможно.
... кроме как создать новую директиву try_files, - которая работает
после access-проверок. никаким другим способом "исправить if" нельзя.
>>> Отдельно печалит, что в результате конфигурации с error_page 404
>>> @fallback - практически исчезли, хотя аналог на try_files -
>>> гарантированно хуже.
>> Аналог на try_files будет "гарантированно хуже" только в том случае,
>> когда для обработки запросов используется модуль static. Если другой
>> content handler (fastcgi_pass, proxy_pass и т.п.) - try_files лучше.
> Это утверждение неверно. Race при использовании try_files - как
> был, так и остаётся. Вне зависимости от применяемого обработчика.
я не про race. один "лишний" syscall - это более дешевая операция,
чем сходить на backend, получить 404 ошибку и отработать error_page.
исключение тут - только модуль static, потому что в нем проверка файла
на существование происходит в процессе попытки отдачи контента клиенту.
почему же try_files лучше? потому что эта директива не "игнорирует"
имеющиеся в location access-проверки, как if(!-f $request_filename)
по поводу race condition в try_files - это non-critical race condition,
backend же вернет 404 ошибку, которую можно обработать как и try_files:
error_page 404 = @fallback;
try_files $uri @fallback;
fastcgi_pass ... ;
- добавление директивы try_files $uri @fallback; просто ускоряет работу,
если произойдет "race condition" - тогда сработает директива error_page.
--
Best regards,
Gena
Подробная информация о списке рассылки nginx-ru