用缓存需要注意如下事项:
要使用缓存,必须使用指令CacheEnable启用它,目前可用的缓存类型为disk或mem,禁止缓存可以使用CacheDisable,如CacheDisable/private
待缓存的URL返回的状态值必须为:200、203、300、301或410
URL的请求方式必须是GET方式
发送请求时,头部中包含“Authorization:”的字符串时,返回的内容将不会被缓存
URL包含查询字符串,如问号?后的那些东西,除非返回的内容包含“Expires:”,否则不会被缓存
如果返回的状态值是200,则返回的头部信息必须包含以下的一种才会被缓存:Etag、Last-Modified、Expires,除非设置了指令CacheIgnoreNoLastModOn
如果返回内容的头部信息“Cache-Control:”中包含“private”,除非设置了指令CacheStorePrivateOn,否则不会被缓存
如果返回内容的头部信息“Cache-Control:”中包含“no-sotre”,除非设置了指令CacheStoreNoStoreOn,否则不会被缓存
如果返回内容的头部信息“Vary:”中包含了“*”,不会被缓存
其它一些指令的介绍:
如果你的网站有几个文件的访问非常频繁而又不经常变动,则可以在Apache启动的时候就把它们的内容缓存到内存中(当然要启用内存缓存系统),使用的是mod_file_cache模块,具体如下:
有多个文件可以用空格格开
MMapFile/var/www/html/index.html/var/www/html/articles/index.html
上面是缓存文件的内容到内存中,除此之外,还可以只缓存文件的打开句柄到内存中,当有请求进来的时候,Apache直接从内存中获取文件的句柄,返回内容,和MMapFile指令很像,具体如下:
CacheFile/var/www/html/index.html/var/www/html/articles/index.html
上面两个指令所缓存的文件如果有修改的话,必须重启Apache或使用graceful之类的方式强制使Apache更新缓存数据,否则当用户访问的时候获取的不是最新的数据。
有时候需要根据某些特殊的头部信息来决定是否进行缓存,则可以使用如下指令:
当头部信息中包含Set-Cookie时则跳过不进行缓存操作
CacheIgnoreHeadersSet-Cookie
有时候需要缓存的时候跳过URL中的查询字符串?使用如下指令:
CacheIgnoreQueryStringOn
Apache的缓存系统不仅可以缓存服务器本身的文件,也可以缓存通过代理得到的内容,对了,Apache可以像Squid一样做代理,而且做的还不错,善用Apache的缓存功能,可以让你的网站速度提升不少。