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