```json
{
    "title": "Hacking mod_deflate for Apache 2.0.44 and lower",
    "url": "https://performancezen.com/2006/10/03/hacking-mod_deflate-for-apache-2044-and-lower-2/",
    "datePublished": "2006-10-03",
    "dateModified": "2022-03-31",
    "language": "en-US",
    "description": "NOTE: This hack is only relevant to Apache 2.0.44 or lower. Starting with Apache 2.0.45, the server contains the DeflateCompressionLevel directive, which allows for user-configured compression levels in the httpd.conf…",
    "author": "spierzchala",
    "publisher": "Performance Zen"
}
```

# Hacking mod_deflate for Apache 2.0.44 and lower

NOTE: This hack is only relevant to Apache 2.0.44 or lower. Starting with Apache 2.0.45, the server contains the [DeflateCompressionLevel](http://httpd.apache.org/docs-2.0/mod/mod_deflate.html#deflatecompressionlevel) directive, which allows for user-configured compression levels in the httpd.conf file.

One of the complaints leveled against *mod_deflate* for Apache 2.0.44 and below has been the lower compression ratio that it produces when compared to *mod_gzip* for Apache 1.3.x and 2.0.x. This issue has been traced to a decision made by the author of mod_deflate to focus on fast compression versus maximum compression.

In discussions with the author of mod_deflate and the maintainer of mod_gzip, the location of the issue was quickly found. The level of compression can be easily modified by changing the ZLIB compression setting in *mod_deflate.c* from **Z_BEST_SPEED** (equivalent to "zip -1") to **Z_BEST_COMPRESSION** (equivalent to "zip -9"). These defaults can also be replaced with a numeric value between 1 and 9. A "hacked" version of the mod_deflate.c code is available [here](http://mod_deflate.txt).

In this file, the compression level has been set to 6, which is regarded as a good balance between speed and compression (and also happens to be ZLIB's default ratio). Some other variations are highlighted below.

**Original Code**

```
zRC = deflateInit2(&ctx->stream, *Z_BEST_SPEED*, Z_DEFLATED, c->windowSize, c->memlevel, Z_DEFAULT_STRATEGY);
```

**Hacked Code**

```
**1. **zRC = deflateInit2(&ctx->stream, *Z_BEST_COMPRESSION*, Z_DEFLATED, c->windowSize, c->memlevel, Z_DEFAULT_STRATEGY);
```

```
**2. **zRC = deflateInit2(&ctx->stream, *6*, Z_DEFLATED, c->windowSize, c->memlevel, Z_DEFAULT_STRATEGY);
```

```
**3. **zRC = deflateInit2(&ctx->stream, *9*, Z_DEFLATED, c->windowSize, c->memlevel, Z_DEFAULT_STRATEGY);
```

A change has been made to mod_deflate in Apache 2.0.45 that adds a directive named **DeflateCompressionLevel** to the mod_deflate options. This will accept a numeric value between 1 (Best Speed) and 9 (Best Compression), with the default set at 6.
