默认情况下,apache安装完以后,是不允许被cache的。如果外接了cache或squid服务器要求进行web加速的话,就需要在htttpd.conf里进行设置,当然前提是在安装apache的时候要激活mod_cache的模块。
以下简单介绍一下安装与配置的步骤:
1. apache版本:httpd-2.0.49.tar.gz
2. 安装httpd-2.0.49.tar.gz:
# tar –zxvf httpd-2.0.49.tar.gz
# cd httpd-2.0.49
#./configure --enable-cache --enable-disk-cache --enable-mem-cache
#mke
#make install
3. 检验是否安装了cache模块
/usr/local/apache2/bin/apachectl –l
如果有mod_cache.c
mod_disk_cache.c
mod_mem_cache.c
这3个模块,说明该apache可以支持cache了
4.更改httpd.conf的设置
vi /usr/local/apache2/conf/httpd.conf
Apache 的缓存方式有两种,一种是基于硬盘文件的缓存,由 mod_disk_cache 实现,另一种是使用内存缓存,由 mod_mem_cache 实现,不过它们都是依赖 mod_cache 模块的,mod_cache 模块提供了一些缓存配置的指令供它们使用,而 mod_file_cache 模块是搭配 mod_mem_cache 模块使用的,下面分别进行介绍。
1、基于硬盘文件的缓存
基于硬盘文件存储的缓存由 mod_disk_cache 模块实现,先看个简单的配置例子:
<IfModule mod_cache.c>
CacheDefaultExpire 86400
<IfModule mod_disk_cache.c>
CacheEnable disk /
CacheRoot /tmp/apacheCache
CacheDirLevels 4
CacheDirLength 5
CacheMaxFileSize 1048576
CacheMinFileSize 10
</IfModule>
</IfModule>
把上面的配置加到 Apache 的 httpd.conf 文件中,如果缓存相关的模块都已经编译进了 Apache 的核心,则无需加载模块,直接就能使用上面的指令。指令的详细说明如下:
CacheDefaultExpire:设定缓存过期的时间(秒),默认是1小时,只有当缓存的文档没有设置过期时间或最后修改时间时这个指令才会生效
CacheEnable:启用缓存,第1个参数是缓存类弄,这里当然是 disk了,第2个参数是缓存路径,指的是 url 路径,这里是缓存所有的东西,直接写上“/”即可,如“/docs”则只缓存 /docs 下的所有文件
CacheRoot:缓存文件所在的目录,运行 Apache 的用户(如daemon 或 nobody)要能对其进行读写,如果不清楚的话可以直接设置成 777,请手动建立该目录并设置好访问权限
CacheDirLevels:缓存目录的深度,默认是3,这里设置为5
CacheDirLength:缓存目录名的字符长度,默认是4,这里设置为5
CacheMaxFileSize 和 CacheMaxFileSize:缓存文件的最大值和最小值(byte),当超过这个范围时将不再缓存,这里设置为 1M 和 10bytes
基于硬盘文件存储的文件基本上就这些内容,设置好后重启 Apache 应该就能使用了。一切正常的话,可以在缓存目录下看到 Apache 自动建立的一些目录和缓存的数据文件。
2、基于内存的缓存
基于内存的缓存主要由 mod_mem_cache 模块实现,还是看个简单的配置吧,这样比较直观:-)
<IfModule mod_cache.c>
<IfModule mod_mem_cache.c>
CacheEnable mem /
MCacheMaxObjectCount 20000
MCacheMaxObjectSize 1048576
MCacheMaxStreamingBuffer 65536
MCacheMinObjectSize 10
MCacheRemovalAlgorithm GDSF
MCacheSize 131072
</IfModule>
</IfModule>
简单说一下上面一些指令的意思:
CacheEnable:启用缓存,使用基于内存的方式存储
MCacheMaxObjectCount:在内存中最多能存储缓存对象的个数,默认是1009,这里设置为20000
MCacheMaxObjectSize:单个缓存对象最大为 1M,默认是10000bytes
MCacheMaxStreamingBuffer:在缓冲区最多能够放置多少的将要被缓存对象的尺寸,这里设置为 65536,该值通常小于100000或 MCacheMaxObjectSize 设置的值
MCacheMinObjectSize:单个缓存对象最小为10bytes,默认为1bytes
MCacheRemovalAlgorithm:清除缓存所使用的算法,默认是 GDSF,还有一个是LRU,可以查一下 Apache 的官方文档,上面有些介绍
MCacheSize:缓存数据最多能使用的内存,单位是 kb,默认是100kb,这里设置为128M
保存重启 Apache 基于内存的缓存系统应该就能生效了,根据需要可以使基于内存的存储或硬盘文件的存储方式一起使用,只要指明不同的URL路径即可。
3、注意事项
使用缓存需要注意如下事项:
要使用缓存,必须使用指令 CacheEnable 启用它,目前可用的缓存类型为 disk 或 mem,禁止缓存可以使用 CacheDisable,如 CacheDisable /private
待缓存的 URL 返回的状态值必须为: 200、203、300、301 或 410
URL 的请求方式必须是 GET 方式
发送请求时,头部中包含 “Authorization: ”的字符串时,返回的内容将不会被缓存
URL 包含查询字符串,如问号?后的那些东西,除非返回的内容包含“Expires:”,否则不会被缓存
如果返回的状态值是 200,则返回的头部信息必须包含以下的一种才会被缓存:Etag、Last-Modified、Expires,除非设置了指令 CacheIgnoreNoLastMod On
如果返回内容的头部信息“Cache-Control:”中包含“private”,除非设置了指令 CacheStorePrivate On,否则不会被缓存
如果返回内容的头部信息“Cache-Control:”中包含“no-sotre”,除非设置了指令 CacheStoreNoStore On,否则不会被缓存
如果返回内容的头部信息“Vary:”中包含了“*”,不会被缓存
4、其它一些指令的介绍
如果你的网站有几个文件的访问非常频繁而又不经常变动,则可以在 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 时则跳过不进行缓存操作
CacheIgnoreHeaders Set-Cookie
有时候需要缓存的时候跳过 URL 中的查询字符串?使用如下指令:
CacheIgnoreQueryString On
Apache 的缓存系统不仅可以缓存服务器本身的文件,也可以缓存通过代理得到的内容,对了,Apache 可以像 Squid 一样做代理,而且做的还不错,下篇文章就介绍一下 Apache 的代理功能吧。善用 Apache 的缓存功能,可以让你的网站速度提升不少。做为一个网站来说,虽然可用的各种缓存方案很多,但在 Web 服务器层做缓存的效率还是很值得一试的。
/bin/rm: cannot remove `libtoolT’: No such file or directory 解决方案
这时直接打开 configure,把 $RM “$cfgfile” 那行删除掉,重新再运行 ./configure 就可以了。
apache利用mod_cache缓存图片等
一,引言
以前我写过二篇有关图片,静态文件的缓存文章,一个是用varnish来缓存,一个用squid来缓存,apache当然也可以用来做图片,静态文件的缓存,下面我将详细说明一下,怎么完装和配置
二,安装mod_cache,mod_mem_cache,mod_disk_cache
先查一下,安装apache的时候,有没有安装这些模块,如果没有安装就安装一下,请参考apache怎么安装模块,查看是否安装
[zhangy@BlackGhost error]$ /usr/local/apache2/bin/httpd -l
如果没有mod_cache.c,mod_mem_cache.c,mod_disk_cache.c说明没有装mod_mem_cache,mod_disk_cache不一定要都装,你可以二选一
三,内存缓存配置
nano /usr/local/apache2/conf/httpd.conf
- LoadModule cache_module modules/mod_cache.so
- <IfModule mod_cache.c>
- LoadModule mem_cache_module modules/mod_mem_cache.so
- <IfModule mod_mem_cache.c>
- CacheEnable mem /images
- MCacheSize 4096
- MCacheRemovalAlgorithm LRU
- MCacheMaxObjectCount 100
- MCacheMinObjectSize 1
- MCacheMaxObjectSize 2048
- CacheMaxExpire 864000
- CacheDefaultExpire 86400
- CacheDisable /php
- </IfModule>
- </IfModule>
LoadModule cache_module modules/mod_cache.so
<IfModule mod_cache.c>
LoadModule mem_cache_module modules/mod_mem_cache.so
<IfModule mod_mem_cache.c>
CacheEnable mem /images
MCacheSize 4096
MCacheRemovalAlgorithm LRU
MCacheMaxObjectCount 100
MCacheMinObjectSize 1
MCacheMaxObjectSize 2048
CacheMaxExpire 864000
CacheDefaultExpire 86400
CacheDisable /php
</IfModule>
</IfModule>
说明:
1,CacheEnable mem /images 缓存images下面的内容,这里的 mem只是一个缓存类型,指示mod_cache使用内存的存储管理器通过实施mod_mem_cache 。缓存类型disk指示mod_cache使用基于磁盘的存储管理的实施mod_disk_cache 。缓存类型,fd指示mod_cache使用文件描述符缓存实施mod_mem_cache
2,MCacheSize最大内存使用量,插入在缓存和对象大小的对象是大于剩余内存,将被删除,直到新的对象可以被缓存。 被删除的对象选择使用指定的算法MCacheRemovalAlgorithm
3,MCacheRemovalAlgorithm缓存算法:
-
LRU
(最近最少使用)
-
LRU
删除文件,没有时间最长的被访问的。
-
GDSF
(GreadyDual尺寸)
-
GDSF
分配一个优先的文件缓存文件的费用的基础上,缓存大小和怀念。以最低的优先权文件被删除第一次。
4,MCacheMaxObjectCount最大缓存对像个数
5,MCacheMaxObjectCount最大缓存对像字节数
6,MCacheMinObjectSize最小缓存对像字节数
7,CacheMaxExpire 最大缓存结止时间
8,CacheDefaultExpire 默认缓存结止时间
9,CacheDisable /php 不缓存php下面的内容
查看内存是不是缓存了东西
apache查看有没有在内存中缓存东西,不是很好查,没有专门的工具来查看,我的方法如下,
1,浏览图片http://localhost/images/http_imgload.cgi.jpeg
2,查看一下[zhangy@BlackGhost error]$ top -b -n1
3,浏览图片http://localhost/images/myself.jpeg
4,查看一下[zhangy@BlackGhost error]$ top -b -n1
6018 zhangy 20 0 52612 8172 2484 S 0 0.8 0:00.03 httpd
6020 zhangy 20 0 52604 8168 2488 S 0 0.8 0:00.02 httpd
6021 zhangy 20 0 52604 8100 2440 S 0 0.8 0:00.00 httpd
6022 zhangy 20 0 52604 8100 2440 S 0 0.8 0:00.00 httpd
6033 zhangy 20 0 6584 1808 1396 S 0 0.2 0:00.02 bash
6076 zhangy 20 0 52612 8136 2464 S 0 0.8 0:00.02 httpd
6077 zhangy 20 0 52612 8124 2448 S 0 0.8 0:00.05 httpd
6078 zhangy 20 0 52612 8168 2488 S 0 0.8 0:00.12 httpd
6079 zhangy 20 0 52612 8168 2488 S 0 0.8 0:00.03 httpd
6080 zhangy 20 0 52612 8168 2488 S 0 0.8 0:00.06 httpd
6081 zhangy 20 0 52612 8116 2448 S 0 0.8 0:00.00 httpd
通过上面的4步操作,你可以发现上面加粗部分的RES是不断增加的,由起可见,配置已经成功。
四,硬盘缓存配置
nano /usr/local/apache2/conf/httpd.conf
- LoadModule cache_module modules/mod_cache.so
- <IfModule mod_cache.c>
- LoadModule disk_cache_module modules/mod_disk_cache.so
- <IfModule mod_disk_cache.c>
- CacheRoot /home/zhangy/cachetest
- #CacheSize 256
- CacheEnable disk /
- CacheDirLevels 4
- #CacheMaxFileSize 64000
- #CacheMinFileSize 1
- #CacheGcDaily 23:59
- CacheDirLength 3
- </IfModule>
- </IfModule>
LoadModule cache_module modules/mod_cache.so
<IfModule mod_cache.c>
LoadModule disk_cache_module modules/mod_disk_cache.so
<IfModule mod_disk_cache.c>
CacheRoot /home/zhangy/cachetest
#CacheSize 256
CacheEnable disk /
CacheDirLevels 4
#CacheMaxFileSize 64000
#CacheMinFileSize 1
#CacheGcDaily 23:59
CacheDirLength 3
</IfModule>
</IfModule>
说明:
1,cacheroot /home/zhangy/cachetest 缓存存放的目录
2,#CacheSize 256 缓存空间大小单位KB
3,CacheEnable disk / 设置缓存方式
4,#CacheMaxFileSize 64000 最大缓存文件大小
5,#CacheMinFileSize 1 最小缓存文件大小
6,#CacheGcDaily 23:59 缓存清理时间
7,CacheDirLength 3 缓存文件夹名子字符长度
8,CacheDirLevels 4 缓存目录,子目录层次
注释掉的部分,我的apache版本不支持。官方手册上面有。具体需求请参考官方网站
查看缓存:
1,查看cacheroot有没有东西
apache cache
如果CacheRoot下面有东西,说明已经OK了。
2,用htcacheclean来查看
[root@BlackGhost cache]# /usr/sbin/htcacheclean -v -p /home/zhangy/cachetest -l 1024M
Statistics:
size limit 1024.0M
total size was 29.2K, total size now 29.2K
total entries was 3, total entries now 3
htcacheclean 部分参数说明下
-d 每隔多长时间清一个缓存
-D 模拟清除缓存,但不是真的清
-v 显示统计信息
-r 彻底清除
-t 清除空目录
-p 缓存目录
-l 限定缓存大小
收藏、分享这篇文章!
转载请注明
作者:海底苍鹰
地址:http://blog.51yip.com/apachenginx/898.html
今天在安装服务器的apache的时候,下载最新的httpd2.2.22源码包进行编译,发现在make的时候报
byterange_filter.c.text+0x12c1): undefined reference to `apr_array_clear'
collect2: ld returned 1 exit status
make[1]: *** [httpd] Error 1
make[1]: Leaving directory `/tmp/httpd-2.2.22'
make: *** [all-recursive] Error 1
的错误,
解决方案:
编译apache之前应该先安装apr和apr-util,然后编译选项加上apr和apr-util的安装路径
./configure --prefix=/usr/local/apache --with-included-apr --with-apr=/usr/local/Hash/apr-1.3.8/ --with-apr-util=/usr/local/Hash/apr-util-1.3.8/ --enable-so --enable-rewrite --enable-ssl
APACHE安装_cannot install `libaprutil-1.la' to a directory解决
在linux上安装了默认的apache2目录后,想安装apache3,进入安装,
执行了configure,make后
make install时出错:
/bin/sh /usr/local/httpd-2.2.3/srclib/apr/libtool --mode=install /usr/bin/install -c -m 755 libaprutil-1.la /usr/local/apache2/lib
libtool: install: error: cannot install `libaprutil-1.la' to a directory not ending in /usr/local/apache2/lib www.2cto.com
make[2]: *** [install] Error 1
猜测可能是以前安装用过./configure 来直接安装到/usr/local/apache2
导致安装文件已经不太“干净”
解决方法:
1、执行make clean后,重新编译安装。
2、删除source code目录,重新解压apache安装包,进行编译安装,可解决上面的问题。
另外,在处理FCGI安装时,也会默认安装到 apache2 目录,这时你需要 修改 Makefile 文件,将里面的目录进行更改。
采用apache mod_expires缓存静态文件的好处:
采用静态文件缓存能提高服务器的性能,有以下好处:
1.缩短服务的响应时间
2.减轻服务器负担
3.减少网络带宽使用量
程序修正方法
在每次更改静态内容(css,js等)时,对名称也进行更改。
附加版本号或Build编号。
<link href="/html/std.css?v=2.5.3.text" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="html/std.css?_v=804120090827100441.css" />
服务器端实际的css文件名仍然为std.css,在html页面里需要添加版本号。
添加版本号之后,每次更新css或者js用户不用CTRL+F5刷新,就可以看到修改后的页面。
Apache的修正方法:
在安装apache的时Configure步骤中添加--enable-expires 。
安装之后,在apache安装目录的modules目录里会有:mod_expires.so
同时在Httpd.conf会自动添加
LoadModule expires_module modules/mod_expires.so
Httpd.conf配置
ExpiresActive on
#缓存3天。
ExpiresBytype text/css "access plus 3 days
ExpiresByType application/x-javascript "access plus 3 days "
ExpiresByType image/jpeg "access plus 3 days "
Expiresbytype image/gif "access plus 3 days "