1. 系统环境

① centos版本:5.5

命令:cat /etc/redhat-release

② linux内核版本: 2.6.18-238.el5

命令:uname -a



2. 适应范围:源码编译,手工安装。



3. 安装apache版本:2.2.19

① 下载apache(http://httpd.apache.org/download.cgi#apache22)

http://labs.renren.com/apache-mirror//httpd/httpd-2.2.19.tar.gz

② 上传到指定目录(例如:/Uploadfile)

③ 切换到指定目录cd /Uploadfile

④ 解压文件 tar –zxvf httpd-2.2.19.tar.gz

⑤ 进入解压包目录 cd httpd-2.2.19

⑥配置./configure --prefix=/usr/local/webservers/apache

--enable-cgi --enable-rewrite --enable-so --enable-ssl --enable-mods-shared=most

参数说明:

--enable-mods-shared=most

动态加载模块(文章最后有说明),告诉编译器将所有标准模块都动态编译为DSO模块。

(--enable-mods-shared=all意思是动态加载所有模块,如果去掉-shared话,是静态加载所有模块。)

--prefix 指定程序安装的路径

--enable-cgi 启用CGI scripts支持

--enable-rewrite 支持地址重写功能

--enable-so 用来提供DSO支持的apache核心模块

--enable-ssl 启用SSL/TLS support (mod_ssl)支持

⑦ 编译 make

⑧ 安装 make install

⑨ 配置apache(httpd.conf)

1) 文档根目录 DocumentRoot "/usr/local/webservers/htdocs"

2) 去掉目录浏览权限

Options FollowSymLinks

3) 日志配置

#每24个小时(86400)生成一个错误日志

ErrorLog "|/usr/sbin/rotatelogs /usr/local/webservers/apache/logs/error-%Y-%m-%d.log 86400 480"

#每24个小时(86400)生成一个访问日志

CustomLog "|/usr/sbin/rotatelogs /usr/local/webservers/apache/logs/access-%Y-%m-%d.log 86400 480" common

⑩ 启动apache /usr/local/webservers/apache/bin/apachectl -k start

(这里为什么不是service httpd start,因为我们是手动安装apache,而service 是机器服务控制命令
,如果是用rpm包安装,应该需要使用service httpd start,这个本人没有求证过,大家可以试试)



【安全问题】

<Directory "/downloadfile">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
当目录里面没有index.html文件时 默认会将/downloadfile/MexFile目录列出来
修改 Options Indexes FollowSymLinks ,将 Indexes 参数去掉



【指定目录日志记录】

使用模块 SetEnvIf
vi httpd.conf

找到 LoadModule 的地方 在下面添加
LoadModule setenvif_module modules/mod_setenvif.so
然后找到日志格式设置的地方

LogFormat下面添加

SetEnvIf Request_URI "^/MexFile/.*$" ok

这句说明:只记录对MexFile目录下面的访问日志,其他路径下面的访问不会被记录日志

然后在CustomLog 最后加上 env=ok

CustomLog "logs/access_log" common env=ok



【按天生成日志】

编辑配置文件

vi httpd.conf

找到

CustomLog "logs/access_log" common env=log

添加

CustomLog "|/usr/local/apache/bin/rotatelogs /日志路径/日志名.%Y%m%d 28800 480"

重启apache即可



【说明】:

--enable-mods-shared=most

这句是表示动态加载的,模块加载分为动态和静态



静态

在使用./configure编译的时候,如果不指定某个模块为动态,即没有使用:

enable-mods-shared=module或者enable-module=shared这个2个中的一个,那么所有的默认模块为静态。那么何谓静态?其实就是编译的时候所有的模块自己编译进httpd这个文件中(我们启动可以使用这个执行文件,如:./httpd &),启动的时候这些模块就已经加载进来了,也就是可以使用了,通常为:<ifmodule> </ifmodule>来配置。所以大家看到的配置都是<ifmodule module.c> ,很显然,module.c这个东西已经存在httpd这个文件中了。

动态:

就是编译的时候,使用enable-module=shared或者enable-modules-shared=module来动态编译。那么什么是动态?静态是直接编译进httpd中,那么动态显然就不编译进去了,也就是你启动的时候根本不会加载这个模块,而是给你一个module.so文件,你一定要使用loadmodule这个语法来加载,这个模块才有效。



那么区别就出来了:静态的模块通常是<ifmodule></ifmodule>来配置,动态使用loadmoule来加载,然后再配置。