How do I go about setting the cache control headers for specific files on my web server? I'm running a LAMP environment. I don't want to set the cache control sitewide, just for a few files. I am using CloudFront to distribute content from one of my domains. There is no S3 tie-in here. By default, content expires after 24 hours, which is fine for most of the data on the website, however, there are a few pages that I'd like to have only a 1 hour cache limit on.
You can specify a longer expiration time by using the Cache-Control, Pragma, or Expires header on the object in the origin server. [...] CloudFront does not restrict their maximum values.
The minimum expiration time you can specify is one hour. If you specify a minimum time of less than one hour, CloudFront uses one hour.
Thus you will have to orchestrate your LAMP stack to apply the desired
Cache-Control: max-age=3600 header specifically to those objects/pages, which will be picked up automatically by CloudFront during its origin fetch thereafter.
How this is done in particular depends on the tools/technologies used to serve the content of course, e.g.:
- Apache - a good tutorial with several example configurations and tips on how to do that with Apache seems to be How to enable file caching with .htaccess in Apache
- PHP - a concise tutorial featuring a good example for PHP in particular seems to be HTTP Caching
For an excellent overview about caching in general I recommend Mark Nottingham's Caching Tutorial.
Fyi, the answer above is still correct but slightly out of date in one respect, as Cloudfront now supports a minimum TTL of 0.
Amazon Developer Guide: Expiration1