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 mailing list [email protected] http://mailman.nginx.org/mailman/listinfo/nginx-ru
