ПРОЕКТЫ 


  АРХИВ 


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: allow/deny and return



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
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.