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