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;
}
}
I'm not sure since how long, but NGINX now DOES support HTTP/1.1 for it's backends, it's just not a standard feature. You can enable it by setting
proxy_http_version
. Very useful for when your backend servers are on vhosts. For example:Ref: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_http_version
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.
Apparently it is possible to do this! Via email: