apache中mod_cache mod_disk_cache

来源:互联网 发布:开通淘宝客要多少钱 编辑:程序博客网 时间:2024/05/29 11:13
1. /usr/local/apache/bin/httpd -k gracefulhttpd: Syntax error on line 56 of /usr/local/apache/conf/httpd.conf: Cannot load /usr/local/apache/modules/mod_cache.so into server: /usr/local/apache/modules/mod_cache.so: undefined symbol: cache_generate_key_default解决方法:加入缓存支持的父模块mod_cache.c,该文件必须和cache_util.c cache_cache.c cache_storage.c cache_pqueue.c cache_hash.c一起编译/usr/local/apache/bin/apxs -i -c ./mod_cache.c cache_util.c cache_cache.c cache_storage.c cache_pqueue.c cache_hash.c2. CacheDirLevels*CacheDirLength value must not be higher than 20解决办法:CacheDirLevels最大值为:5CacheDirLength最大值为:4二者的乘积最大不能超过20以上两个问题是在安装mod_cache,mod_disk_cache扩展并配置了httpd.conf重启apache后报出的错误。浏览器的刷新有以下三种情况:1. 强制刷新: windows快捷键(control+shift+F5) mac快捷键(command+shift+R)此操作在刷新页面时,不会走本地缓存而是每次都会直接向web服务器发送请求。2. F5或者转到按钮: windows快捷键(F5) mac快捷键(command+R)此操作在刷新页面时,会发送上次的last-modified到web服务器,服务器端获取if-since-modified来判断文件在某时间内是否修改过或过期,如果修改过或者过期了则返回新内容,否则返回http头, HTTP/1.1 304 Not Modified。3. 地址栏输入地址回车或者超链接跳转:此操作刷新页面时,如果页面头中包含Expires过期时间, 如果页面未过期,则直接使用本地缓存,不会再向web服务器发送请求,否则则会再次向web服务器发送请求。针对mod_cache模块,其又提供了两种数据存储模块mod_dis_cache(存储至磁盘), mod_mem_cache(存储至内存)本操作采用将缓存数据存储至磁盘。1. httpd.conf配置如下:LoadModule cache_module modules/mod_cache.so//加载mod_cache.so模块<IfModule mod_cache.c>CacheEnable disk ///启用磁盘存储。参数1:存储类型disk or mem, 参数2:路径 /代表根目录下的所有文件CacheDefaultExpire 60//缓存默认过期时间单位秒CacheIgnoreNoLastMod On//忽略last-modifiedLoadModule disk_cache_module modules/mod_disk_cache.so//加载mod_disk_cache模块<IfModule mod_dis_cache.c>CacheRoot /var/www/htdocs/caches//缓存文件存储目录  指定的目录必须有写入权限CacheDirLevels 3//创建的缓存目录级数CacheDirLength 2//目录名字包含字符数</IfModule></IfModule>如1所示的mod_cache与mod_disk_cache配置,如果web服务器响应的页面中未提供last-modified或者expire,CacheDefaultExpire才会生效。通常对于未提供last-modified的页面服务器不会缓存,所以此时需要忽略last-modified,因此需要设置CacheIgnoreNoLastMod为On此时测试上面提到的三种刷新机制:(假定页面的缓存文件已经生成)1. 强制刷新每次都会向web服务器发送请求2. F5或者转到按钮每次都会向web服务器发送请求3. 地址栏输入地址回车或者超链接跳转如果未过期则使用本地缓存2. httpd.conf配置如下:LoadModule cache_module modules/mod_cache.so//加载mod_cache.so模块<IfModule mod_cache.c>CacheEnable disk ///启用磁盘存储。参数1:存储类型disk or mem, 参数2:路径 /代表根目录下的所有文件LoadModule disk_cache_module modules/mod_disk_cache.so//加载mod_disk_cache模块<IfModule mod_dis_cache.c>CacheRoot /var/www/htdocs/caches//缓存文件存储目录  指定的目录必须有写入权限CacheDirLevels 3//创建的缓存目录级数CacheDirLength 2//目录名字包含字符数</IfModule></IfModule>如2所示的mod_cache与mod_disk_cache配置, 此情况需要在web程序中设置响应头信息如:<?php if(php_sapi_name() == 'apache2handler' || php_sapi_name() == 'apache') { $headers = apache_request_headers(); if(isset($headers['If-Modified-Since']) && !empty($headers['If-Modified-Since'])) { if(time() - strtotime($headers['If-Modified-Since']) <= 60) { header("HTTP/1.1 304 Not Modified"); exit; } } }  //省略mysql查询的操作⋯⋯  header("Last-modified:".gmdate("D, d M Y H:i:s", time())." GMT"); header("Expires:".gmdate("D, d M Y H:i:s", time() + 60)." GMT"); header("Cache-Control:max-age=60");?>此时测试上面提到的三种刷新机制:(假定页面的缓存文件已经生成)1. 强制刷新每次都会向web服务器发送请求2. F5或者转到按钮向服务器发送请求头last-modified,如果未过期则使用本地缓存3. 地址栏输入地址回车或者超链接跳转如果未过期则使用本地缓存注:firefox与chrome查看缓存,需在浏览器输入about:cache对于apache中的cache请参考官网:http://httpd.apache.org/docs/2.2/caching.htmlhttp://httpd.apache.org/docs/2.2/mod/mod_cache.htmlhttp://httpd.apache.org/docs/2.2/mod/mod_disk_cache.html对于mod_disk_cache,如果disk中的缓存文件过大,需要定期清除disk中的文件,此时可以使用htcacheclean具体请参考官网:http://httpd.apache.org/docs/2.2/programs/htcacheclean.html

原创粉丝点击