Invalid content types served when using alias

Maxim Dounin mdounin at mdounin.ru
Wed Oct 24 14:32:47 UTC 2012


Hello!

On Wed, Oct 24, 2012 at 05:59:33PM +0400, Vladimir Shebordaev wrote:

> Hi!
> 
> On 24.10.2012 03:50, Tom van der Woerdt wrote:
> >Hi all,
> >
> >I'm using nginx' locations to serve a javascript file on '/client' :
> >
> >     location = /client {
> >         expires epoch;
> >         alias /path/to/a/file.js;
> >     }
> >
> >Works fine, with one major exception: it gets an octet-stream
> >Content-Type header.
> 
> This is due to a bug in static module, it doesn't properly set
> r->exten in this case, so the redirect gets default mime-type.

As already explained by Igor, this is not a bug, but intentional
behaviour.

Extension as seen in the URI is used to determine mime type, not 
one on the file system (which might not be present at all).  

> 
> Please try this patch
> 
> Index: src/http/modules/ngx_http_static_module.c
> ===================================================================
> --- src/http/modules/ngx_http_static_module.c	(revision 4892)
> +++ src/http/modules/ngx_http_static_module.c	(working copy)
> @@ -224,6 +224,9 @@
>          return NGX_HTTP_INTERNAL_SERVER_ERROR;
>      }
> 
> +    r->uri = path;
> +    ngx_http_set_exten(r);
> +
>      if (ngx_http_set_content_type(r) != NGX_OK) {
>          return NGX_HTTP_INTERNAL_SERVER_ERROR;
>      }

The patch is completely incorrect.  While it might work for you in 
this particular case, it 

a) Breaks the behaviour which is expected to work (in contrast to 
the above), e.g. like this:

    location = /foo.js {
        alias /path/to/a/file;
    }

b) Breaks unrelated things like the $uri variable.


-- 
Maxim Dounin
http://nginx.com/support.html



More information about the nginx-devel mailing list