proxy_pass and $content_type

Maxim Dounin mdounin at mdounin.ru
Tue Sep 15 16:33:19 MSD 2009


Hello!

On Tue, Sep 15, 2009 at 01:40:06PM +0200, Cedric Jeanneret wrote:

> Hello all,
> 
> We're wanting to use nginx as a proxy between a varnish and a S3 storage. We're using debian lenny, nginx version is 0.6.32-3.
> 
> What we're dowing:
> 
> server {
>   location / {
>     proxy_pass ...
>     if ($content_type !~* "image/") {
>       return 403
>     }
>   }
> }
> 
> What happens ? well, 403 for all. We put in log "$content_type", and saw it's set to "-".

You are testing *request* Content-Type, not response.  It's 
unlikely to be set at all for most requests.

Additionally, this check happens at rewrite phase - i.e. before 
anything was got from upstream.

> 
> Is it normal? Is there another way to filter by content type?
> Our final goal is:
> S3 sends either the file if it can find it, or an XML (so a content_type "text/xml" or smth like that). We don't want to give the xml, as it contains S3 bucket name...

I believe S3 responds with appropriate http status code on errors, 
and you are able to intercept them via proxy_intercept_errors + 
error_page.

See

http://wiki.nginx.org/NginxHttpProxyModule#proxy_intercept_errors

for details.

Maxim Dounin


> 
> If any of you has an idea/fixe/workaround...
> 
> Thanks in advance
> 
> Best regards,
> 
> C.
> 
> 
> -- 
> Cédric Jeanneret                 |  System Administrator
> 021 619 10 32                    |  Camptocamp SA
> cedric.jeanneret at camptocamp.com  |  PSE-A / EPFL







More information about the nginx mailing list