.
In this blog I will talk about dynamic compression of static files.
We have also implemented caching of compressed data
for static files. We have added a new service function
"compress-file" which will
compress static files (if the compressed file doesn't exist) and serves
it from the cache if the compressed version already exists.
Lets say if I want to create .gz files on the fly for static
files, all I have to do is to modify obj.conf as shown below. Use it
with
find-compressed SAF.
Add it before
send-file
function.
<Object
name="default">
...
NameTrans fn="assign-name" from="*.html" name="find-compressed"
...
Service method=(GET|HEAD|POST)
type=*~magnus-internal/* fn=compress-file subdir=".compressed-files"
Service method=(GET|HEAD|POST) type=*~magnus-internal/* fn=send-file
...
</Object>
<Object name="find-compressed">
PathCheck fn="find-compressed"
</Object> |
Note that subdir is a directory name only relative to the
directory in which the original
non-compressed file is located. "." means use the
same directory as the original file to create compressed files.
Parameters
this new
"compress-file" SAF takes are
subdir,
check-age(true), vary(true), compression-level(6), min-size(256),
max-size(1048576).
Let me take an example, if we have a static file in the docroot
static1.txt.
#
ls -al
-rwxr--r-- 1 root root 1386 Aug 1
21:16 static1.txt
Send a
GET request with
Accept-Encoding: gzip header,
it returns the compressed content,
#
telnet 0 2701
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
GET /static1.txt HTTP/1.0
Accept-Encoding:
gzip
HTTP/1.1 200 OK
Server:
Sun-Java-System-Web-Server/7
Date: Mon, 01 Aug 2005 15:47:11
GMT
Content-length: 892
Content-type: text/plain
Vary: accept-encoding
Content-encoding: x-gzip
Last-modified: Mon, 01 Aug 2005
15:47:11 GMT
Accept-ranges: bytes
Connection: close
z`B®(¼?øKä0¢TeÑB¨÷Q$A
....
O9êÓÌ
iñÂ6ì¹ ³Í§8z
ªè)óÍ6
We can verify that the Web Server creates a .gz file in
.compressed-files subdirectory.
# ls -la
drwxr-xr-x 2 webservd webservd
512 Aug 1 21:17 .compressed-files
-rwxr-xr-x 1 root root 1386 Aug 1
21:16 static1.txt
# ls -l .compressed-files/
total 2
-rw------- 1 webservd webservd
892 Aug 1 21:17 static1.txt.gz
Also note that the content length on access file is the same as the .gz
file in the
.compressed-files
directory.
#
tail ../logs/access
format=%Ses->client.ip% -
%Req->vars.auth-user% [%SYSDATE%] "%Req->reqpb.clf-request%"
%Req->srvhdrs.clf-status% %Req->srvhdrs.content-length%
abc.def.com - -
[01/Aug/2005:21:17:11 +0530] "GET /static1.txt HTTP/1.0" 200 892
...