apache中mod_cache mod_disk_cache

5 篇文章 0 订阅
2 篇文章 0 订阅
1. /usr/local/apache/bin/httpd -k graceful
httpd: 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.c


2. CacheDirLevels*CacheDirLength value must not be higher than 20
解决办法:
CacheDirLevels最大值为:5
CacheDirLength最大值为: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-modified
	
	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>

如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.html
http://httpd.apache.org/docs/2.2/mod/mod_cache.html
http://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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值