Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

Our web servers are running IIS 7 and are configured to compress dynamic and static content. When I hit these servers directly, gzip compression works.

I recently placed nginx in front of them, and gzip compression has stopped. I was able to work around this by explicitly enabling gzip compression on nginx itself, but that seems a little inefficient considering I have half a dozen backends and only one active nginx box.

It appears that nginx is stripping out the Accept-Encoding header. Does anyone have any advice for how to 'correct' this behavior?

A sample configuration:

upstream backend {
  server 127.0.0.1:8080;
}

server {
  listen   80;
  proxy_set_header        Host            $host;
  proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

  location / {
    proxy_pass http://backend;
  }
}
share|improve this question
add comment

2 Answers

up vote 3 down vote accepted

Nginx is a HTTP/1.0 reverse proxy, gzip compression was not in the HTTP specification until HTTP/1.1.

Thus nginx will not send gzip accept-encoding header because it simply doesn't accept it. The proper way to implement gzip handling in nginx is to either talk fastcgi to the backend or to gzip using nginx.

share|improve this answer
    
That explains it - thank you for the clear explanation. –  Michael Gorsuch May 17 '10 at 22:29
add comment

Apparently it is possible to do this! Via email:

[nginx does do HTTP/1.0], but you can totally do gzip over HTTP 1.0 and we do. The gzip'd content is passed through untouched by nginx, we pre gzip level 9 all our static content, so this is optimal.

nginx can be configured to identify browsers that can do gzip and either foward all the correct headers to the backend and/or do the gzip itself

I think the primary reason nginx doesn't support 1.1 to the backends to because of chunked encoding. (which it does support on the front end) It adds to the complexity of dealing with connections that die mid-stream.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.