Nginx X-Accel-Redirect stripping Content-Encoding header

Maxim Dounin mdounin at
Fri Jun 28 10:38:21 UTC 2013


On Fri, Jun 28, 2013 at 06:21:08AM -0400, Danack wrote:

> I have Nginx setup to allow requests to be served with the X-Accel-Redirect
> header. This works fine for images, but I'm trying to get it to work for
> Javascript files that are already gzip'ed on the disk.
> It appears Nginx is stripping off the 'Content-Encoding: gzip' header. This
> makes the browser not unzip the content when it receives it, which obviously
> makes it not work.
> Is it possible to make Nginx preserve the Content-Encoding header to allow
> pre-gzipped content through X-Accel-Redirect? Or is there another way to
> allow this work?

Any headers from the original response (the one with X-Accel-Redirect) 
might be preserved using the $upstream_http_* variables.  Something 
like this should work:

    location /files/ {
        add_header Content-Encoding $upstream_http_content_encoding;

This might not work well with nginx gzip filter though.

Better solution might be to just return X-Accel-Redirect to an 
unrompressed file, and use gzip_static to serve precompressed 
files if they are available and supported by a client, see

Maxim Dounin

More information about the nginx mailing list