compression-at-edge, in front of varnish reverse proxy, gzip-compresses some content, but not other ?
Ben DJ
bendj095124367913213465 at gmail.com
Wed Apr 28 03:19:16 CEST 2010
nginx compression-at-edge (in front of a reverse proxy) compresses
some content, not other ?
I've an nginx + varnish + apache2 stack. Nginx serves as redirector,
ssl handshake, and gzip compression. Varnish serves as a
reverse-proxy, and apache 'just' hosts apps & serves content.
I'm trying to get gzip compression behaving properly. I'm getting
intermittent results -- some content seems to be gzipped, some not.
I'm looking for some help figuring out WHERE the problem lies, and
what to do to fix it.
In nginx conf, I've,
...
http {
...
gzip on;
gzip_http_version 1.0;
gzip_comp_level 9;
gzip_proxied any;
gzip_buffers 16 8k;
gzip_min_length 0;
gzip_types text/plain text/css text/xml text/javascript
application/x-javascript;
gzip_disable "MSIE [1-6].(?!.*SV1)";
gzip_vary on;
upstream varnish {
server 127.0.0.1:8090 weight=10 max_fails=3 fail_timeout=15s;
}
server {
listen x.y.z.w:443;
...
location / {
proxy_pass http://varnish;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Client-Verify SUCCESS;
proxy_set_header X-SSL-Subject $ssl_client_s_dn;
proxy_set_header X-SSL-Issuer $ssl_client_i_dn;
}
}
...
In varnish config, per chat @ #irc, I've replaced,
if (req.url ~ "\.(jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$") {
# No point in compressing these
remove req.http.Accept-Encoding;
} elsif (req.http.Accept-Encoding ~ "gzip") {
# if the browser supports it, we'll use gzip
set req.http.Accept-Encoding = "gzip";
} elsif (req.http.Accept-Encoding ~ "deflate") {
# next, try deflate if it is supported
set req.http.Accept-Encoding = "deflate";
} else {
# unknown algorithm. Probably junk, remove it
remove req.http.Accept-Encoding;
}
with a,
...
if (req.http.Accept-Encoding) {
remove req.http.Accept-Encoding;
}
...
clause, since the compression is to be done only at the nginx 'edge'.
Apache's compression (gzip, default, or otherwise), is completely disabled.
Atm, a check of my test site with YSlow complains that .js's are NOT
being compressed. Checking with LiveHTTPHeaders Firefox plugin,
shows, e.g., the .js in question NOT being gzipped, but a .gif *is*,
e.g.
...
----------------------------------------------------------
https://my.site.com/main/apostrophePlugin/js/jquery.keycodes-0.2.js
GET /main/apostrophePlugin/js/jquery.keycodes-0.2.js HTTP/1.1
Host: my.site.com
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.4)
Gecko/20100417
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: https://my.site.com/main/
Cookie: SESS6fa8cdc2d7064704bbda0c83e2c2588c=94889db68945e19ed6f666b7e00cdd36;
symfony=3KOH8Qk0hV%2C%2CvXLi0PK5YmdenP1
If-Modified-Since: Tue, 27 Apr 2010 18:18:18 GMT
If-None-Match: "362e4-1008-4853810064180"
Authorization: Digest username="admin", realm="AUTH my.site.com",
nonce="5GopBDmFBAA=99f7be8796e018dde459a07178393d235366ecd9",
uri="/main/apostrophePlugin/js/jquery.keycodes-0.2.js", algorithm=MD5,
response="b04cb995cd1f86a67197aab3b5a5dbc9", qop=auth, nc=000001c9,
cnonce="9dbeaefee4d57b12"
Cache-Control: max-age=0
HTTP/1.1 304 Not Modified
Server: nginx/0.8.35
Date: Wed, 28 Apr 2010 00:39:48 GMT
Connection: keep-alive
Etag: "362e4-1008-4853beaefee80"
Expires: Sat, 01 May 2010 00:39:48 GMT
Cache-Control: max-age=259200
Content-Length: 0
X-Varnish: 940462008
Age: 0
Via: 1.1 varnish
----------------------------------------------------------
https://my.site.com/apostrophePlugin/images/a-special-blank.gif
GET /apostrophePlugin/images/a-special-blank.gif HTTP/1.1
Host: my.site.com
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.4)
Gecko/20100417
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: https://my.site.com/main/
Cookie: SESS6fa8cdc2d7064704bbda0c83e2c2588c=94889db68945e19ed6f666b7e00cdd36;
symfony=3KOH8Qk0hV%2C%2CvXLi0PK5YmdenP1
HTTP/1.1 404 Not Found
Server: nginx/0.8.35
Date: Wed, 28 Apr 2010 00:39:48 GMT
Content-Type: text/html; charset=iso-8859-1
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding, accept-language,accept-charset
Content-Language: en
X-Varnish: 940462009 940461993
Age: 87
Via: 1.1 varnish
Content-Encoding: gzip
----------------------------------------------------------
...
where, iiuc, the presence/absence of "Content-Encoding: gzip" defines
whether or not the item in question was succesfully gzipped.
Any ideas why/where the .js is not getting gzipped?
Thanks,
Ben
More information about the varnish-misc
mailing list