Re: реакция image_filter на return
Maxim Dounin
mdounin на mdounin.ru
Чт Янв 12 17:00:03 UTC 2012
Hello!
On Thu, Jan 12, 2012 at 12:15:03AM +0400, GD wrote:
> Доброго времени суток,
>
> Наткнулся на багофичу:
>
> Пример чуть синтетический, но рабочий:
>
> location /r/ {
> if ( $uri = "/r/want_403" ) {
> return 403;
> }
>
> rewrite ^/r/(.+)$ /$1 break;
>
> proxy_pass http://host.tld;
>
> image_filter resize 100 100;
> }
>
> proxy_pass ожидаемо реагирует на return и никуда не ходит
> но image_filter не взирая на 403 (Forbidden) пытается отработать,
> в результате отдавая 415 (Unsupported Media Type)
>
> Смотрел на ngx_http_addition_module, там реакция на return
> полностью соответсвует док-ции. Т.е. если срабатывает return 403,
> то add_after_body уже не отрабатывает.
>
> Получилось полечить image_filter патчем (см. аттач).
> Хочется услышать мненеие разработчиков.
Image filter расчитан на то, что он обрабатывает в т.ч. untrusted
ответы со сторонних серверов, и поэтому какая-либо фильтрация по
кодам ответов - не производится.
Правильное решение - обарабатывать 403-ю ошибку в отдельном
location'е. Если говорить конкретно о вышеприведённой
конфигурации, то очевидно так:
location /r/ {
...
image_filter ...
}
location = /r/want_403 {
return 403;
}
В общем случае - через error_page 403.
Maxim Dounin
Подробная информация о списке рассылки nginx-ru