Skip to main content

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.

Performance Optimization Tips

  • Use DeflateCompressionLevel 6-7 for a good balance
  • Increase DeflateBufferSize if responses are typically large
  • Monitor error logs for compression ratios using DeflateFilterNote
  • Compress only text-based content (HTML, CSS, JS, JSON)

Was this article helpful?