« SEO Redirects without mod_rewriteApache Authentication in htaccess »
Speed up your site with Caching and cache-control
April 10th, 2007
Caching with .htaccess and Apache will take your website and your web skills to the next level. This is some technical and advanced methods condensed to simple htaccess code examples for you. But you must take the time to understand caching with cache-control and other headers and HTTP options before you implement on a production server.
More detailed article: Speed Up Sites with htaccess Caching.
NOTE: Stay tuned I'm working on the update!
« mod_rewrite tips and tricks | .htaccess Tutorial Index | » Apache Authentication in htaccess
Easy Apache Speed Tips Articles
- Turn On Compression
- Add Future Expires Header
- Add Cache-Control Headers
- Turn Off ETags
- Remove Last-Modified Header
Caching with both mod_expires + mod_headers
# Turn on Expires and set default to 0 ExpiresActive On ExpiresDefault A0 # Set up caching on media files for 1 year (forever?) <filesMatch "\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav)$"> ExpiresDefault A29030400 Header append Cache-Control "public" </filesMatch> # Set up caching on media files for 1 week <filesMatch "\.(gif|jpg|jpeg|png|swf)$"> ExpiresDefault A604800 Header append Cache-Control "public" </filesMatch> # Set up 2 Hour caching on commonly updated files <filesMatch "\.(xml|txt|html|js|css)$"> ExpiresDefault A7200 Header append Cache-Control "proxy-revalidate" </filesMatch> # Force no caching for dynamic files <filesMatch "\.(php|cgi|pl|htm)$"> ExpiresActive Off Header set Cache-Control "private, no-cache, no-store, proxy-revalidate, no-transform" Header set Pragma "no-cache" </filesMatch>
Caching with mod_headers
# 1 YEAR <filesMatch "\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav)$"> Header set Cache-Control "max-age=29030400, public" </filesMatch> # 1 WEEK <filesMatch "\.(jpg|jpeg|png|gif|swf)$"> Header set Cache-Control "max-age=604800, public" </filesMatch> # 3 HOUR <filesMatch "\.(txt|xml|js|css)$"> Header set Cache-Control "max-age=10800" </filesMatch> # NEVER CACHE <filesMatch "\.(html|htm|php|cgi|pl)$"> Header set Cache-Control "max-age=0, private, no-store, no-cache, must-revalidate" </filesMatch>
Caching with mod_expires
ExpiresActive On ExpiresDefault A0 # 1 YEAR <filesMatch "\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav)$"> ExpiresDefault A29030400 </filesMatch> # 1 WEEK <filesMatch "\.(jpg|jpeg|png|gif|swf)$"> ExpiresDefault A604800 </filesMatch> # 3 HOUR <filesMatch "\.(txt|xml|js|css)$"> ExpiresDefault A10800" </filesMatch>
Other Speed Tips
To truly speed up your site, you will want to implement a server-side caching technique. Or you can read more about caching and web cache.
Apache Caching Guide
This document supplements the <a href="http://askapache.info/trunk/mod/mod_cache.html" title="Apache mod_cache">mod_cache</a>, <a href="http://askapache.info/trunk/mod/mod_disk_cache.html" title="Apache mod_disk_cache">mod_disk_cache</a>, <a href="http://askapache.info/trunk/mod/mod_mem_cache.html" title="Apache mod_mem_cache">mod_mem_cache</a>, <a href="http://askapache.info/trunk/mod/mod_file_cache.html" title="Apache mod_file_cache">mod_file_cache</a> and htcacheclean reference documentation.
It describes how to use Apache's caching features to accelerate web and proxy serving, while avoiding common problems and misconfigurations.
htaccess time cheatsheet
# 300 5 MIN # 600 10 MIN # 900 15 MIN # 1800 30 MIN # 2700 45 MIN # 3600 1 HR # 7200 2 HR # 10800 3 HR # 14400 4 HR # 18000 5 HR # 36000 10 HR # 39600 11 HR # 43200 12 HR # 46800 13 HR # 50400 14 HR # 54000 15 HR # 86400 1 DAY # 172800 2 DAY # 259200 3 DAY # 345600 4 DAY # 432000 5 DAY # 518400 6 DAY # 604800 1 WEEK # 1209600 2 WEEK # 1814400 3 WEEK # 2419200 4 WEEK # 4838400 2 MONTH # 7257600 3 MONTH # 9676800 4 MONTH # 12096000 5 MONTH # 14515200 6 MONTH # 16934400 7 MONTH # 19353600 8 MONTH # 21772800 9 MONTH # 24192000 10 MONTH # 26611200 11 MONTH # 29030400 12 MONTH
htaccess Guide Sections
- htaccess tricks for Webmasters
- HTTP Header control with htaccess
- PHP on Apache tips and tricks
- SEO Redirects without mod_rewrite
- mod_rewrite examples, tips, and tricks
- HTTP Caching and Site Speedups
- Authentication on Apache
- htaccess Security Tricks and Tips
- SSL tips and examples
- Variable Fun (mod_env) Section
- .htaccess Security with MOD_SECURITY
- SetEnvIf and SetEnvIfNoCase Examples
« mod_rewrite tips and tricks | .htaccess Tutorial Index | » Apache Authentication in htaccess
Please Comment!
Reader Comments
-
What if I want to disable cache specifically for a single IP address, while everyone else who browses the site gets a standard length? Right now I'm trying this code below, but it's disabling the cache for everyone, not just the intended target.
allow from xxx.xxx.xxx.xxx Header set Cache-Control "private, no-cache, no-store, proxy-revalidate, no-transform" Header set Pragma "no-cache" allow from all Header set Cache-Control "max-age=86400, public"
Is this possible?
-
I found this site as I was editing the .htaccess to improve performance and to block spammer and proxies.
Your site explained it very well. Almost everywhere else was just badly written.
Perhaps if your interested I can send you an optimized htaccess file that blocks most content scraper, spam bots and lots of caching (browser as well as server side)...
-
And what about ppl using Nginx ?
-
Hi, very interesting stuff! I just noticed a little mistake in the "caching with mod_expires" part, the
ExpiresDefaultparameter for 1 year should beA29030400instead ofA9030400according to the time cheatsheet. Thanks again for your article. -
I used Caching with both mod_expires + mod_headers but I received a 500 error. Website is being hosted by earthlink.
-
this solved my problem .thanks for this useful post
-
Thank you for this post, easy to follow and has really decreased our load time. Thank you again!
-
Thanks for the article. I have been searching for a long time trying to figure out how to use header expires, this was extremely helpful. You can count on me for a few links here and there!
- Pingback: Understanding Web Caching - dgendill.com
-
This definitely helped!
I have a client with a wildy popular blog and they were having lots of site slow-downs.
After setting this up in httpd.conf, the rest was history!
Everything is a bit faster now! Thanks so much.
-
One of the greatest articles i found on the web. Thanks.
- Pingback: Two Drifters » Blog Archive » Seiten beschleunigen
-
thanks... very useful article that saved me from searching.
good luck -
I find these code quite interesting and i have noticed a better performance in my blog already. What i would like to know if i can use the first code at the beginning of this page:
# Turn on Expires and set default to 0 ExpiresActive On ExpiresDefault A0 # Set up caching on media files for 1 year (forever?) ExpiresDefault A29030400 Header append Cache-Control "public" # Set up caching on media files for 1 week ExpiresDefault A604800
... with this other one:
# 1 YEAR Header set Cache-Control "max-age=29030400, public" # 1 WEEK Header set Cache-Control "max-age=604800, public" # 2 DAYS Header set Cache-Control "max-age=172800, proxy-revalidate" # 1 MIN Header set Cache-Control "max-age=60, private, proxy-revalidate"
Since i am not into these things it looks like if i use both of them my website is faster, but i would like an input from you to see if i am right or now.
Also, i understand the second code i wrote in this comment but.. what is the difference between these two codes simply put? thanks and i hope to get a reply from you
-
I was wondering. Say I want to my .css files to be cached for 15 minutes, my .html files for another 30 minutes and no cache at all for my .php files. How can I do this easily ?
-
Thanks for the article. I have been searching for a long time trying to figure out how to use header expires, this was extremely helpful. You can count on me for a few links here and there!
-
I couldn't understand some parts of this article o.us poetry, but I guess I just need to check some more resources regarding this, because it sounds interesting.
@Mike
Yes. Try using the
RequestHeaderto rewrite the cache headers for specific IPs. Or set an environment variable when the visitor IP is the single IP to target, then only send the various anti-cachingHeaderdirectives when that environment variable is present.