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

Ответить