基于 Ubuntu 编译 Apache2.2
准备工作
1. 下载Apache2.2 地址:http://httpd.apache.org/download.cgi
2. 安装依赖包 apt-get build-dep apache
开始安装
1. 解包源文件
tar xvf httpd-2.2.11.tar.bz2
2. 安装apr
cd httpd-2.2.11/srclib/apr
./configure --prefix=/usr/local/apr
make
make install
3. 安装apr-util
cd ../apr-util
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make
make install
4. 正式安装apache2
./configure --prefix=/usr/local/apache2 --enable-so --enable-cache --enable-disk-cache --enable-mem-cache --enable-file-cache --enable-mods-shared=most --enable-ssl --enable-http --enable-rewrite --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-mpm=worker
make
make install
5. 设置自动启动
ln -s /usr/local/apache2/bin/apachectl /etc/init.d/apachectl
chmod +x /usr/local/apache2/bin/apachectl
sysv-rc-conf
(实际上是将apachectl添加为服务,sysv-rc-conf为服务管理器)
找到apachectl 将其2,3,4,5都选中
q退出
| 参数 | 说明 |
|---|---|
| –enable-so | 如果希望核心能够装载 DSO,而不实际编译任何动态模块,则要明确指定 –enable-modules=so 或者 –enable-so”,所以前面的顺序不能交换顺序。 |
| –enable-cache | Apache 的缓存方式有两种,一种是基于硬盘文件的缓存,由 mod_disk_cache 实现,另一种是使用内存缓存,由 mod_mem_cache 实现,不过它们都是依赖 mod_cache 模块的,mod_cache 模块提供了一些缓存配置的指令供它们使用,而 mod_file_cache 模块是搭配 mod_mem_cache 模块使用的,下面分别进行介绍。 |
| –enable-disk-cache | 基于硬盘文件的缓存
基于硬盘文件存储的缓存由 mod_disk_cache 模块实现,先看个简单的配置例子: CacheDefaultExpire 86400 CacheEnable disk / CacheRoot /tmp/apacheCache CacheDirLevels 5 CacheDirLength 5 CacheMaxFileSize 1048576 CacheMinFileSize 10 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 自动建立的一些目录和缓存的数据文件。 |
| –enable-mem-cache | 基于内存的缓存
基于内存的缓存主要由 mod_mem_cache 模块实现,还是看个简单的配置吧,这样比较直观:-) MCacheMaxObjectCount 20000 MCacheMaxObjectSize 1048576 MCacheMaxStreamingBuffer 65536 MCacheMinObjectSize 10 MCacheRemovalAlgorithm GDSF MCacheSize 131072 CacheEnable:启用缓存,使用基于内存的方式存储 MCacheMaxObjectCount:在内存中最多能存储缓存对象的个数,默认是1009,这里设置为20000 MCacheMaxObjectSize:单个缓存对象最大为 1M,默认是10000bytes MCacheMaxStreamingBuffer:在缓冲区最多能够放置多少的将要被缓存对象的尺寸,这里设置为 65536,该值通常小于100000或 MCacheMaxObjectSize 设置的值 MCacheMinObjectSize:单个缓存对象最小为10bytes,默认为1bytes MCacheRemovalAlgorithm:清除缓存所使用的算法,默认是 GDSF,还有一个是LRU,可以查一下 Apache 的官方文档,上面有些介绍 MCacheSize:缓存数据最多能使用的内存,单位是 kb,默认是100kb,这里设置为128M 保存重启 Apache 基于内存的缓存系统应该就能生效了,根据需要可以使基于内存的存储或硬盘文件的存储方式一起使用,只要指明不同的URL路径即可。 |
| –enable-file-cache | 如果你的网站有几个文件的访问非常频繁而又不经常变动,则可以在 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 服务器层做缓存的效率还是很值得一试的。 |
| –enable-mods-shared=most | 这将编译大部分的模块为动态模块,这样后期可以动态的调入。 |
| –with-mpm=worker | 使用多进程,每个进程包含多线程的方式。每个线程一次处理一个连接。worker对于高流量的服务器通常是一个好的选择,因为它比prefork MPM占用更少的内存。 |