I’ve an nginx + varnish + apache2 stack. Nginz server 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, I’ve 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
Posted at Nginx Forum: