Configuring Content Compression
1. Enabling Deflate Module
| Directive | Values | Description |
|---|---|---|
| LoadModule | deflate_module modules/mod_deflate.so |
Loads the deflate module to enable content compression |
Example: Load Deflate Module
<IfModule mod_deflate.c>
LoadModule deflate_module modules/mod_deflate.so
</IfModule>
Note: Ensure the module file path is correct for your Apache installation.
2. Configuring Compression by MIME Type
| MIME Type | Compression Directive | Notes |
|---|---|---|
| text/html | mod_deflate |
Default compression for HTML content |
| text/css | mod_deflate |
Compresses CSS files for faster delivery |
| application/javascript | mod_deflate |
Compresses JavaScript files to reduce bandwidth |
| application/json | mod_deflate |
Compresses JSON responses for API endpoints |
| text/xml | mod_deflate |
Compresses XML content for better performance |
| application/xml | mod_deflate |
Compresses XML content for better performance |
Example: Enabling Compression for Specific MIME Types
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/json
</IfModule>
3. Setting Compression Level
| Directive | Values | Description |
|---|---|---|
| DeflateCompressionLevel | 0-9 |
Sets the compression level for deflate encoding. Default is 6. |
| GzipCompressionLevel | 0-9 |
Sets the compression level for gzip encoding. Default is 6. |
Example: Setting Compression Level
<IfModule mod_deflate.c>
DeflateCompressionLevel 9
</IfModule>
<IfModule mod_filter.c>
GzipCompressionLevel 7
</IfModule>
Note: Higher compression levels (9) provide better compression ratios but use more CPU. Lower levels (1-3) are faster but less efficient.
4. Excluding Content from Compression
| Directive | Description | Default | Notes |
|---|---|---|---|
| SetEnvIf | Conditionally set environment variables based on request properties | None | Used in conjunction with BrowserMatch or mod_deflate directives |
| BrowserMatch | Matches browser-specific patterns to apply compression rules | None | Allows fine-grained control over which browsers receive compressed content |
| DeflateFilterNote | Enables logging of compression statistics | None | Useful for debugging and monitoring compression effectiveness |
Example: Exclude Images from Compression
<IfModule mod_deflate.c>
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.(?:ico|svg)$ no-gzip dont-vary
</IfModule>
Example: Exclude Specific MIME Types
<IfModule mod_deflate.c>
<span class="highlight">AddOutputFilterByType</span> DEFLATE text/html text/css application/json
<span class="highlight">BrowserMatch</span> ^Mozilla/4\.0[^(]*\(compatible; MSIE 6\.0\) no-gzip
</IfModule>
Note: The
no-gzip environment variable prevents compression for matched requests.
Warning: Be cautious when excluding content from compression as it may increase bandwidth usage.
5. Compressing Text Content
| Directive | Description | Default | Notes |
|---|---|---|---|
| AddOutputFilterByType | Applies output filters based on MIME type | None | Used to compress specific content types |
| SetOutputFilter | Sets the output filter for all content | None | Can be used to apply compression globally |
Example: Enabling Gzip Compression for Text Content
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>
Example: Compressing JavaScript and CSS Files
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE text/css
</IfModule>
Note: Ensure that
mod_deflate is loaded before using these directives.
Warning: Compressing already-compressed content (e.g., images, videos) can increase file size and degrade performance.
6. Using Gzip Encoding
| Directive | Values | Description |
|---|---|---|
| AddOutputFilterByType | DEFLATE text/html |
Enable compression for specific content types |
| AddOutputFilterByType | DEFLATE application/json |
Compress JSON responses |
| AddOutputFilterByType | DEFLATE application/javascript |
Compress JavaScript files |
Example: Enabling Gzip Compression
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE application/json
AddOutputFilterByType DEFLATE application/javascript
</IfModule>
Note: Ensure
mod_deflate is loaded before using these directives.
7. Configuring Brotli Compression
| Directive | Description | Default | Notes |
|---|---|---|---|
| ModBrotli | Enables the Brotli compression module | Off | Must be loaded before use |
| BrotliOn | Enables Brotli compression for content | Off | Can be set per directory or location |
| BrotliLevel | Compression level (1-11) | 6 | Higher levels = better compression, more CPU |
| BrotliWindow | Window size in bits (10-24) | 22 | Higher = better compression, more memory |
| BrotliFilter | Applies Brotli filter to content | Off | Can be used with other compression methods |
Example: Enabling Brotli Compression
<IfModule mod_brotli.c>
BrotliOn On
BrotliLevel 6
BrotliWindow 22
</IfModule>
Note: Ensure mod_brotli is installed and enabled in your Apache configuration before using these directives.
8. Setting Compression Buffer Size
| Directive | Values | Description |
|---|---|---|
| ModCompression | on |
Enables content compression module |
| ModCompressionBuffer | 1024 to 65536 |
Size of the buffer used for compression in bytes |
Example: Setting Compression Buffer Size
<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
ModCompressionBuffer 32768
</IfModule>
9. Handling Pre-Compressed Files
When pre-compressed files are available (e.g., file.html.gz), Apache can serve them directly if the client supports the encoding. This avoids on-the-fly compression and improves performance.
| Directive | Description | Default | Notes |
|---|---|---|---|
| ModCompress | Enables the mod_deflate module for compression |
Off | Required to enable compression features |
| BrowserMatch | Matches user agents to apply compression | None | Used to define which browsers support compression |
| SetOutputFilter | Applies output filters to content | None | Can be used to apply compression filters |
Example: Serving Pre-Compressed Files
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html
</IfModule>
# Serve pre-compressed files if available
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule ^(.*)$ $1.gz [R,L]
</IfModule>
Note: Ensure that the pre-compressed files are generated and maintained separately, typically via a build process or script.
10. Testing Compression
Example: Check if compression is working
curl -H "Accept-Encoding: gzip" -I http://example.com/file.js
| Header | Value | Description |
|---|---|---|
| Content-Encoding | gzip |
Indicates the content is compressed with gzip |
| Content-Type | application/javascript |
MIME type of the compressed content |
Note: The
Content-Encoding header is only present if the content was actually compressed by the server.
Example: Using browser dev tools
1. Open browser dev tools
2. Go to Network tab
3. Reload page
4. Find a JS/CSS file
5. Check Response Headers for "Content-Encoding: gzip"
11. Monitoring Compression Ratio
| Directive | Description | Default | Notes |
|---|---|---|---|
| mod_deflate | Module for content compression | Not loaded by default | Must be enabled to use compression features |
| DeflateCompressionLevel | Compression level (1-9) | 6 | Higher levels = better compression, more CPU usage |
| DeflateBufferSize | Buffer size for compression (bytes) | 8192 | Adjust based on server memory and performance needs |
Example: Enabling Compression and Setting Level
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
DeflateCompressionLevel 7
</IfModule>
Note: Compression ratio can vary depending on content type and size. Monitor server logs to analyze the effectiveness of compression.
12. Optimizing Compression Performance
| Directive | Description | Default | Notes |
|---|---|---|---|
| ModCompression | Enables or disables content compression | On | Requires mod_deflate or mod_brotli |
| DeflateCompressionLevel | Compression level (1-9) | 6 | Higher levels = better compression, more CPU |
| DeflateBufferSize | Buffer size for compression (bytes) | 8192 | Adjust based on typical response sizes |
| DeflateFilterNote | Log compression ratio in error logs | Off | Useful for performance monitoring |
Example: Enabling Compression with Performance Tuning
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/css text/plain
DeflateCompressionLevel 7
DeflateBufferSize 16384
DeflateFilterNote On
</IfModule>
Note: Higher compression levels increase CPU usage. For high-traffic sites, balance between bandwidth savings and server load.