所需源码包:
/usr/local/src/Apache-2.2.25/httpd-2.2.25.tar.gz
编译安装 Apache2.2.25
#切换到源码目录
cd /usr/local/src/Apache-2.2.25
tar -xzvf ./httpd-2.2.25.tar.gz
cd ./httpd-2.2.25
#生成configure
./configure --prefix=/usr/local/apache --with-included-apr --enable-so --enable-deflate=shared --enable-expires=shared --enable-ssl=shared --enable-headers=shared --enable-rewrite=shared --enable-static-support --with-mpm=prefork
#编译
make && make install
编译参数解释:
--prefix=/usr/local/apache :指定安装目录
--with-included-apr : 在编译时强制使用当前源代码中绑定的APR版本
--enable-so : 允许运行时加载DSO模块(注意:so模块需静态(static)编译)
--enable-deflate=shared : 将deflate模块编译为DSO
--enable-expires=shared : 将expires模块编译为DSO
--enable-ssl=shared : 将ssl模块编译为DSO
--enable-headers=shared : 将headers模块编译为DSO
--enable-rewrite=shared : 将rewrite模块编译为DSO
--enable-static-support : 使用静态连接(默认为动态连接)编译所有二进制支持程序
--with-mpm=prefork : 使用prefork形式的mpm
更详细的编译参数解释:http://lamp.linux.gov.cn/Apache/ApacheMenu/programs/configure.html
cp ./build/rpm/httpd.init /etc/init.d/httpd #使用init脚本管理httpd
chmod 755 /etc/init.d/httpd #增加执行权限
chkconfig --add httpd #添加httpd到服务项
chkconfig --level 2345 httpd on #设置开机启动
chkconfig --list httpd #查看是否设置成功 mv /etc/httpd /etc/httpd_old #移走旧的httpd文件夹
ln -s /usr/local/apache /etc/httpd #建立httpd的软链接,
#到时候,Apache的配置文件路径为 /etc/httpd/conf/httpd.conf,其实真实路径为 /usr/local/apache/conf/httpd.conf ln -sf /usr/local/apache/bin/httpd /usr/sbin/httpd #设置软链接以适应init脚本
ln -sf /usr/local/apache/bin/apachectl /usr/sbin/apachectl rm -rf /var/log/httpd/
ln -s /usr/local/apache/logs /var/log/httpd groupadd apache #添加apache用户组及用户
useradd -g apache -s /usr/sbin/nologin apache
chown -R apache:apache /usr/local/apache
配置防火墙,开启80端口
vim /etc/sysconfig/iptables
#添加如下规则到22端口这条规则的下面即可
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
#重启防火墙
service iptables restart # 或 /etc/init.d/iptables restart
启动Apache
service httpd start # 或 /etc/init.d/httpd start
关于mpm模式的选择,“海哥CentOS博客”的“LAMP一键安装包”推荐如下:
===================================================
echo "select the mpm of apache"
echo "1) prefork (Recommend)"
echo "2) worker (Multi-threaded)"
echo "3) event (Multi-threaded,not support ssl.)"
===================================================
附:Apache常用2种工作模式prefork和worker比较
在Apache的源码目录,运行命令 ./configure -help 可查看所有编译参数解释:
【官网编译参数详解:http://lamp.linux.gov.cn/Apache/ApacheMenu/programs/configure.html】
Apache以模块的形式扩展自己,而模块编译分为 静态(static)编译 和 动态(shared)编译,静态编译的模块会直接编译进Apache的核心,而动态编译的模块,还需修改Apache的配置文件,方可被加载。以下是摘自Apache的官方手册,解释模块的编译参数。
模块选项
有两种使用模块的方法:一是静态连接进核心,二是作为DSO模块动态加载;如果编译中包含任何DSO模块,则mod_so会被自动包含进核心。如果希望核心能够装载DSO,但不实际编译任何DSO模块,则需明确指定"--enable-so=static"。
一般语法
一般情况下你可以使用如下语法启用或者禁用某个模块:
上述 MODULE-LIST 可以是:
(1)用引号界定并且用空格分隔的模块名列表
--enable-mods-shared='headers rewrite dav'
(2)"most
"(大多数模块[遇见错误模块时忽略该模块而不中断配置过程])
(3)"all
"(所有模块[遇见错误模块时中断配置过程并报错])
--enable-mods-shared=most
--disable-MODULE
禁用MODULE模块(仅用于基本模块)
--enable-MODULE=shared
将MODULE编译为DSO(可用于所有模块)
--enable-MODULE=static
将MODULE静态连接进核心(仅用于扩展和实验模块)
--enable-mods-shared=MODULE-LIST
将MODULE-LIST中的所有模块都编译成DSO(可用于所有模块)
--enable-modules=MODULE-LIST
将MODULE-LIST静态连接进核心(可用于所有模块)
注意
configure
将忽略MODULE和MODULE-LIST中的拼写错误,注意仔细拼写。用于MODULE和MODULE-LIST中的名称是"mod_NAME
"中去掉"mod_
"并将剩余部分中的下划线"_
"替换为连字符"-
"以后的结果,比如"mod_log_config
"模块应当表示为"log-config"。
模块列表
基本(B)模块默认包含,必须明确禁用;扩展(E)/实验(X)模块默认不包含,必须明确启用。
模块名称 | 状态 | 简要描述 |
mod_actions |
(B) | 根据特定的媒体类型或请求方法,激活特定的CGI脚本 |
mod_alias |
(B) | 提供从文件系统的不同部分到文档树的映射和URL重定向 |
mod_asis |
(B) | 发送自己包含HTTP头内容的文件 |
mod_auth_basic |
(B) | 使用基本认证 |
mod_authn_default |
(B) | 在未正确配置认证模块的情况下简单拒绝一切认证信息 |
mod_authn_file |
(B) | 使用纯文本文件为认证提供支持 |
mod_authz_default |
(B) | 在未正确配置授权支持模块的情况下简单拒绝一切授权请求 |
mod_authz_groupfile |
(B) | 使用纯文本文件为组提供授权支持 |
mod_authz_host |
(B) | 供基于主机名、IP地址、请求特征的访问控制 |
mod_authz_user |
(B) | 基于每个用户提供授权支持 |
mod_autoindex |
(B) | 自动对目录中的内容生成列表,类似于"ls"或"dir"命令 |
mod_cgi |
(B) | 在非线程型MPM(prefork )上提供对CGI脚本执行的支持 |
mod_cgid |
(B) | 在线程型MPM(worker )上用一个外部CGI守护进程执行CGI脚本 |
mod_dir |
(B) | 指定目录索引文件以及为目录提供"尾斜杠"重定向 |
mod_env |
(B) | 允许Apache修改或清除传送到CGI脚本和SSI页面的环境变量 |
mod_filter |
(B) | 根据上下文实际情况对输出过滤器进行动态配置 |
mod_imagemap |
(B) | 处理服务器端图像映射 |
mod_include |
(B) | 实现服务端包含文档(SSI)处理 |
mod_isapi |
(B) | 仅限于在Windows平台上实现ISAPI扩展 |
mod_log_config |
(B) | 允许记录日志和定制日志文件格式 |
mod_mime |
(B) | 根据文件扩展名决定应答的行为(处理器/过滤器)和内容(MIME类型/语言/字符集/编码) |
mod_negotiation |
(B) | 提供内容协商支持 |
mod_nw_ssl |
(B) | 仅限于在NetWare平台上实现SSL加密支持 |
mod_setenvif |
(B) | 根据客户端请求头字段设置环境变量 |
mod_status |
(B) | 生成描述服务器状态的Web页面 |
mod_userdir |
(B) | 允许用户从自己的主目录中提供页面(使用"/~username") |
mod_auth_digest |
(X) | 使用MD5摘要认证(更安全,但是只有最新的浏览器才支持) |
mod_authn_alias |
(E) | 基于实际认证支持者创建扩展的认证支持者,并为它起一个别名以便于引用 |
mod_authn_anon |
(E) | 提供匿名用户认证支持 |
mod_authn_dbd |
(E) | 使用SQL数据库为认证提供支持 |
mod_authn_dbm |
(E) | 使用DBM数据库为认证提供支持 |
mod_authnz_ldap |
(E) | 允许使用一个LDAP目录存储用户名和密码数据库来执行基本认证和授权 |
mod_authz_dbm |
(E) | 使用DBM数据库文件为组提供授权支持 |
mod_authz_owner |
(E) | 基于文件的所有者进行授权 |
mod_cache |
(E) | 基于URI键的内容动态缓冲(内存或磁盘) |
mod_cern_meta |
(E) | 允许Apache使用CERN httpd元文件,从而可以在发送文件时对头进行修改 |
mod_charset_lite |
(X) | 允许对页面进行字符集转换 |
mod_dav |
(E) | 允许Apache提供DAV协议支持 |
mod_dav_fs |
(E) | 为mod_dav 访问服务器上的文件系统提供支持 |
mod_dav_lock |
(E) | 为mod_dav 锁定服务器上的文件提供支持 |
mod_dbd |
(E) | 管理SQL数据库连接,为需要数据库功能的模块提供支持 |
mod_deflate |
(E) | 压缩发送给客户端的内容 |
mod_disk_cache |
(E) | 基于磁盘的缓冲管理器 |
mod_dumpio |
(E) | 将所有I/O操作转储到错误日志中 |
mod_echo |
(X) | 一个很简单的协议演示模块 |
mod_example |
(X) | 一个很简单的Apache模块API演示模块 |
mod_expires |
(E) | 允许通过配置文件控制HTTP的"Expires: "和"Cache-Control: "头内容 |
mod_ext_filter |
(E) | 使用外部程序作为过滤器 |
mod_file_cache |
(X) | 提供文件描述符缓存支持,从而提高Apache性能 |
mod_headers |
(E) | 允许通过配置文件控制任意的HTTP请求和应答头信息 |
mod_ident |
(E) | 实现RFC1413规定的ident查找 |
mod_info |
(E) | 生成Apache配置情况的Web页面 |
mod_ldap |
(E) | 为其它LDAP模块提供LDAP连接池和结果缓冲服务 |
mod_log_forensic |
(E) | 实现"对比日志",即在请求被处理之前和处理完成之后进行两次记录 |
mod_logio |
(E) | 对每个请求的输入/输出字节数以及HTTP头进行日志记录 |
mod_mem_cache |
(E) | 基于内存的缓冲管理器 |
mod_mime_magic |
(E) | 通过读取部分文件内容自动猜测文件的MIME类型 |
mod_proxy |
(E) | 提供HTTP/1.1的代理/网关功能支持 |
mod_proxy_ajp |
(E) |
mod_proxy 的扩展,提供Apache JServ Protocol支持 |
mod_proxy_balancer |
(E) |
mod_proxy 的扩展,提供负载平衡支持 |
mod_proxy_connect |
(E) |
mod_proxy 的扩展,提供对处理HTTP CONNECT 方法的支持 |
mod_proxy_ftp |
(E) |
mod_proxy 的FTP支持模块 |
mod_proxy_http |
(E) |
mod_proxy 的HTTP支持模块 |
mod_rewrite |
(E) | 一个基于一定规则的实时重写URL请求的引擎 |
mod_so |
(E) | 允许运行时加载DSO模块 |
mod_speling |
(E) | 自动纠正URL中的拼写错误 |
mod_ssl |
(E) | 使用安全套接字层(SSL)和传输层安全(TLS)协议实现高强度加密传输 |
mod_suexec |
(E) | 使用与调用web服务器的用户不同的用户身份来运行CGI和SSI程序 |
mod_unique_id |
(E) | 为每个请求生成唯一的标识以便跟踪 |
mod_usertrack |
(E) | 使用Session跟踪用户(会发送很多Cookie),以记录用户的点击流 |
mod_version |
(E) | 提供基于版本的配置段支持 |
mod_vhost_alias |
(E) | 提供大批量虚拟主机的动态配置支持 |
多路处理模块(MPM)
必须有而且只能有一个MPM被静态包含进核心,你可以使用下面的配置选项进行选择:
--with-mpm=MPM
其中,MPM
是你想要使用的多路处理模块的名字。如果你不使用这个选项,那么将会使用对应于各平台的默认MPM,可选的MPM如下:beos
, mpmt_os2
, prefork
, worker
延伸阅读:
CentOS6.x编译安装LAMP(2):编译安装 Apache2.2.25
CentOS6.x编译安装LAMP(2):编译安装 Apache2.4.6
CentOS6.x编译安装LAMP(3):编译安装 MySQL5.5.25
CentOS6.x编译安装LAMP(4):编译安装 PHP5.2.17
CentOS6.x编译安装LAMP(4):编译安装 PHP5.3.27