Implement Efficient Cache Policy on Apache HTTP Server

By bhagwatchouhan
Implement Efficient Cache Policy on Apache HTTP Server

We can always configure the cache policies to leverage browser caching of websites and applications hosted on Apache HTTP Server. This tutorial provides the options to configure caching using the mod_expires module.

 

Add MIME Types

 

We can always add the appropriate MIME type in order to explicitly specify the cache duration. The most common is to add MIME type specific to font file types and static resources. We can also add the MIME types to file formats including SVG as shown below.

 

# Format - the extension is optional here
AddType <type> <extension>

# Add MIME types specifc to font files
AddType application/vnd.ms-fontobject .eot
AddType application/x-font-ttf .ttf
AddType application/x-font-opentype .otf
AddType application/x-font-woff .woff

# Add MIME type to support svg extension
AddType image/svg+xml .svg

 

Enable Caching

 

Enable the caching by adding the following directive.

 

# Enable caching
ExpiresActive On

 

Configure default Cache duration

 

The below-mentioned code shows the configuration to add default duration effective for all the MIME types and in the case when MIME type duration is not explicitly defined.

 

# Default cache duration to 1 yr
# A31536000 stands for 1 year in the future -> 31536000 = 365 * 24 * 60 * 60

# Below listed are the examples to set 1 yr
ExpiresDefault "access plus 1 year"
ExpiresDefault "access plus 12 months"
ExpiresDefault "access plus 365 days"
ExpiresDefault A31536000

# Default cache duration to 1 month
# A2592000 stands for 30 days in the future -> 2592000 = 30 * 24 * 60 * 60

# Below listed are the examples to set 1 month
ExpiresDefault "access plus 1 month"
ExpiresDefault "access plus 4 weeks"
ExpiresDefault "access plus 30 days"
ExpiresDefault A2592000

# Default cache duration to 1 day or 1 hour
# A86400 stands for 1 day in the future -> 86400 = 24 * 60 * 60
# A3600 stands for 1 hour in the future -> 3600 = 60 * 60

# Below listed are the examples to set 1 day or 1 hour
ExpiresDefault A86400
ExpiresDefault A3600

 

Cheatsheet

 

You can also refer to the below-listed cheatsheet having reference conversions from Seconds to Mins, Days, Weeks, and Months.

 

## Seconds  - Minutes
# 300 - 5 MINS - Example - A300
# 600 - 10 MINS
# 900 - 15 MINS
# 1800 - 30 MINS
# 2700 - 45 MINS

## Seconds - Hours
# 3600 - 1 HR
# 18000 - 5 HRS
# 36000 - 10 HRS
# 54000 - 15 HRS
# 86400 - 24 HRS

## Seconds - Days
# 86400 - 1 DAY
# 432000 - 5 DAYS

## Seconds - Weeks
# 604800 - 1 WEEK
# 1209600 - 2 WEEKS
# 1814400 - 3 WEEKS
# 2419200 - 4 WEEKS

## Seconds - Months
# 2419200 - 1 MONTH
# 12096000 - 5 MONTHS
# 24192000 - 10 MONTHS
# 29030400 - 12 MONTHS

 

Explicit cache duration

 

We can explicitly define the cache duration for a specific MIME type as shown below.

 

# Set 1 year for gif images
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/gif "access plus 12 months"
ExpiresByType image/gif "access plus 30 days"
ExpiresByType image/gif A31536000

# Examples to set 1 month for gif images
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/gif "access plus 4 weeks"
ExpiresByType image/gif "access plus 30 days"
ExpiresByType image/gif A2592000

 

Another way to explicitly define the cache duration specific to a set of file extensions is as shown below.

 

# One month duration for selected file types
<FilesMatch "\.(ico|pdf|avi|mov|doc|mp3|wmv|wav)$">
ExpiresDefault A2592000
</FilesMatch>

 

Complete Solution

 

The complete solution to implement the above-listed policies is as mentioned below defaulting to 1-year duration.

 

<ifModule mod_expires.c>
# Add font and image types
AddType application/vnd.ms-fontobject .eot
AddType application/x-font-ttf .ttf
AddType application/x-font-opentype .otf
AddType application/x-font-woff .woff
AddType image/svg+xml .svg

# Enable caching
ExpiresActive On

# Default cache duration to 1 yr
ExpiresDefault A31536000

# Enable caching of individual image file types
ExpiresByType image/gif A31536000
ExpiresByType image/png A31536000
ExpiresByType image/jpg A31536000
ExpiresByType image/jpeg A31536000
ExpiresByType image/x-icon A31536000
ExpiresByType image/icon A31536000
ExpiresByType image/svg+xml A31536000

# Enable caching of text types
ExpiresByType text/plain A31536000
ExpiresByType text/css A31536000
ExpiresByType text/javascript A31536000

# Enable caching of individual application types
ExpiresByType application/x-javascript A31536000
ExpiresByType application/javascript A31536000
ExpiresByType application/x-ico A31536000
ExpiresByType application/ico A31536000
ExpiresByType application/pdf A31536000
ExpiresByType application/vnd.ms-fontobject A31536000
ExpiresByType application/x-font-ttf A31536000
ExpiresByType application/x-font-opentype A31536000
ExpiresByType application/x-font-woff A31536000
</ifModule>

 

Alternate Solutions

 

Apart from using the mod_expires module, there are other ways to implement caching using mod_headers module.

 

# One month duration for selected file types
# max-age -> 30 days ( 60 * 60 * 24 * 30 )
<FilesMatch "\.(ico|pdf|avi|mov|doc|mp3|wmv|wav)$">
Header set Cache-Control "max-age=2592000, public"
</FilesMatch>

 

share on :

Profile picture for user bhagwatchouhan
bhagwatchouhan