承接上篇,本文编译安装http2.4,之后根据2.4版本内容具体讲解httpd。

   本文主要内容

   编译前环境确认

   安装支持程序

   编译安装httpd2.4

   配置其他文件

一、总体架构

   http2.4的编译安装需要一系列的支持程序,因此需要实现安装好以来程序。之后就可以,编译安装httpd,完成后,需要将应用程序路径添加到path环境变量中;导出头文件;设置man文件配置。

Linux入门之web服务(二)---应用实例httpd编译安装_httpd 最近版本httpd编译安装

二、编译安装前的环境确认

   在编译安装前,一定要确认gcc编译环境安装配置好了。确认是否安装

[root@station145 ~]# gcc --version
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4)
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[root@station145 ~]#

   出现如上所示说明已配置好了。若无,使用一下命令安装

[root@station145 ~]# yum groupinstall -y "Development tools"
[root@station145 ~]# yum groupinstall -y "Server Platfrom Development"

三、安装支持程序

   在编译安装前需要先安装如下程序

aprapr-1.5.0.tar.bz2    编译安装
apr-utilapr-util-1.5.3.tar.bz2    编译安装
pcreyum源安装

APR(Apache portable Run-time libraries,Apache可移植运行库)的目的如其名称一样,主要为上层的应用程序提供一个可以跨越多操作系统平台使用的底层支持接口库。在早期 的Apache版本中,应用程序本身必须能够处理各种具体操作系统平台的细节,并针对不同的平台调用不同的处理函数。随着Apache的进一步开 发,Apache组织决定将这些通用的函数独立出来并发展成为一个新的项目。这样,APR的开发就从Apache中独立出来,Apache仅仅是使用 APR而已。

APR-util是apr的工具。

pcre是一个perl脚本的函数库,广泛用于开源软件

1、yum安装pcre


[root@station145 ~]# yum install -y pcre

2、从本地ftp服务器获取最上面图表中给出的特定版本的源码包,这里需要注意的是,httpd2.4需要较新版本的apr及其工具,因此务必注意版本问题。上述版本已测试,可以正常编译安装

   获取到相关源码:

Linux入门之web服务(二)---应用实例httpd编译安装_httpd 最近版本httpd编译安装_02

读者也可以从相关程序的官网上下载

解压安装apr

#解压源码包
tar xf apr-1.5.0.tar.bz2
#切换到源码包目录
cd apr-1.5.0
#设置配置文件目录
./configure --prefix=/usr/local/apr
#编译安装
make && make install

解压安装apr-util

#解压源码包
tar xf apr-util-1.5.3.tar.bz2
#切换工作目录
cd apr-util-1.5.3
#设置配置文件路径,这里还需要说明apr的路径
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
#编译安装
make && make install

三、编译安装http2.4

   编译安装http2.4


#解压源码包
tar xf httpd-2.4.9.tar.bz2
#切换工作目录
cd httpd-2.4.9
#配置相关选项
./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --enable-modules=most --enable-mpms-shared=all --with-mpm=event
#编译安装
make && make install

这里说明下httpd2.4 configure的配置选项,以上述为例


--prefix=/usr/local/apache指明程序安装目录
--sysconfdir=/etc/httpd24指明配置文件路径
--enable-soapache核心装载DSO,但是不实际编译任何动态模块
--enable-ssl支持ssl模块
--enable-cgi支持cgi功能
--enable-rewrite支持url重新
--with-zlib包含zlib库文件
--with-pcre包含pcre函数
--with-apr=/usr/local/apr指明apr的路径
--with-apr-util=/usr/local/apr-util/指明apr-util路径
--enable-modules=most支持模块
--enable-mpms-shared=all支持共享模块,可以为all,most
--with-mpm=event加载模块event

这里简单补充下httpd2.4新增的功能

   1) MPM支持在运行时装载;

       --enable-mpms-shared=all --with-mpm=event

   2) 支持event

   3) 异步读写

   4) 在每模块及每目录上指定日志级别

   5) 每请求配置;<If>, <Elseif>

   6) 增强版的表达式分析器

   7) 毫秒级的keepalive timeout

   8) 基于FQDN的虚拟主机不再需要NameVirtualHost指令

   9) 支持使用自定义变量

新增的模块

mod_proxy_fcgi, mod_ratelimit, mod_request, mod_remoteip

重要改变

对于基于IP的访问控制做了修改,不再支持使用order, allow, deny这些机制;而是统一使用require进行。例如

 允许某个网络IP访问直接写成Require ip IPADDR即可。

四、配置其他文件

   1、导出man手册

   修改/etc/man.config,添加MANPATH条目


#vim /etc/man.config
#添加条目
MANPATH /usr/man
MANPATH /usr/share/man
MANPATH /usr/local/man
MANPATH /usr/local/share/man
MANPATH /usr/X11R6/man
#添加此条目
MANPATH /usr/local/apache/man

如果系统中原来存在其他版本的httpd,需要查看man手册,则需要使用

man -M /usr/local/apache/man httpd

   2、导出头文件

   导出头文件其实就是给/usr/local/apache/include目录创建一个软链接至/usr/include目录中

ln -sv /usr/local/apache/include  /usr/include/httpd

   3、输出二进制程序

   在/etc/profile.d/目录下创建一个新的配置文件,将httpd的二进制程序路径添加到PATH环境变量前

#新建配置文件
vim /etc/profile.d/httpd.sh
#导出二进制程序,httpd没有sbin目录
export PATH=/usr/local/apache/bin:$PATH

   4、httpd没有提供相关的库文件,如果存在库文件,还需要创建新的配置文件,输出库文件路径,并且更新库文件缓存。这里一般情况下

   使用如下命令

#创建配置文件
vim /etc/ld.so.conf.d/?.conf
#输出库文件路径
usr/local/?/lib
#更新库缓存
ldconfig

五、启动

   到此,我们就完成了全部的工作,使用apachectl start即可启动服务。我们可以监控到相关的服务进程


[root@station145 httpd24]# ps aux | grep httpd
root     33955  0.0  0.2  76968  2252 ?        Ss   06:07   0:00 /usr/local/apache/bin/httpd
daemon   33957  0.0  0.4 421228  4116 ?        Sl   06:07   0:02 /usr/local/apache/bin/httpd
daemon   33958  0.0  0.4 421228  4112 ?        Sl   06:07   0:02 /usr/local/apache/bin/httpd
daemon   33959  0.0  0.4 421228  4124 ?        Sl   06:07   0:02 /usr/local/apache/bin/httpd
root     34255  0.0  0.0 103252   828 pts/1    S+   07:38   0:00 grep httpd

我们看到服务正常启动运行。但是,服务不能自动启动,这里我们给一个服务脚本,并且添加到系统自动启动。


参考httpd2.2的服务脚本,这里编写httpd2.4的服务脚本

#复制2.2的服务脚本,然后做以修改
cp /etc/init.d/httpd /etc/init.d/httpd24
#!/bin/bash
#
# httpd        Startup script for the Apache HTTP Server
#
# chkconfig: - 85 15
# description: The Apache HTTP Server is an efficient and extensible  \
#              server implementing the current HTTP standards.
# processname: httpd
# config: /etc/httpd/conf/httpd.conf
# config: /etc/sysconfig/httpd
# pidfile: /var/run/httpd/httpd.pid
#
### BEGIN INIT INFO
# Provides: httpd
# Required-Start: $local_fs $remote_fs $network $named
# Required-Stop: $local_fs $remote_fs $network
# Should-Start: distcache
# Short-Description: start and stop Apache HTTP Server
# Description: The Apache HTTP Server is an extensible server
#  implementing the current HTTP standards.
### END INIT INFO
# Source function library.
. /etc/rc.d/init.d/functions
if [ -f /etc/sysconfig/httpd ]; then
        . /etc/sysconfig/httpd
fi
# Start httpd in the C locale by default.
HTTPD_LANG=${HTTPD_LANG-"C"}
# This will prevent initlog from swallowing up a pass-phrase prompt if
# mod_ssl needs a pass-phrase from the user.
INITLOG_ARGS=""
# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
# with the thread-based "worker" MPM; BE WARNED that some modules may not
# work correctly with a thread-based MPM; notably PHP will refuse to start.
# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/local/apache/bin/apachectl
httpd=/usr/local/apache/bin/httpd
prog=httpd
pidfile=/var/run/httpd24.pid
lockfile=/var/lock/subsys/httpd24
RETVAL=0
STOP_TIMEOUT=${STOP_TIMEOUT-10}
# The semantics of these two functions differ from the way apachectl does
# things -- attempting to start while running is a failure, and shutdown
# when not running is also a failure.  So we just do it the way init scripts
# are expected to behave here.
start() {
        echo -n $"Starting $prog: "
        LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}
# When stopping httpd, a delay (of default 10 second) is required
# before SIGKILLing the httpd parent; this gives enough time for the
# httpd parent to SIGKILL any errant children.
stop() {
        echo -n $"Stopping $prog: "
        killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpd
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
    echo -n $"Reloading $prog: "
    if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
        RETVAL=6
        echo $"not reloading due to configuration syntax error"
        failure $"not reloading $httpd due to configuration syntax error"
    else
        # Force LSB behaviour from killproc
        LSB=1 killproc -p ${pidfile} $httpd -HUP
        RETVAL=$?
        if [ $RETVAL -eq 7 ]; then
            failure $"httpd shutdown"
        fi
    fi
    echo
}
# See how we were called.
case "$1" in
  start)
        start
        ;;
        ;;
  status)
        status -p ${pidfile} $httpd
        RETVAL=$?
        ;;
  restart)
        stop
        start
        ;;
  condrestart|try-restart)
        if status -p ${pidfile} $httpd >&/dev/null; then
                stop
                start
        fi
        ;;
  force-reload|reload)
        reload
        ;;
  graceful|help|configtest|fullstatus)
        $apachectl $@
        RETVAL=$?
        ;;
  *)
        echo $"Usage: $prog {start|stop|restart|condrestart|try-restart|force-reload|reload|status|fullstatus|graceful|help|configtest}"
        RETVAL=2
esac
exit $RETVAL

在httpd.conf中添加PidFile "/var/run/httpd24.pid

然后,停止httpd服务 killall httpd,添加至系统启动

[root@station145 init.d]# chkconfig --add httpd24

启动服务

[root@station145 init.d]# service httpd24 start

重新监控下相关进程

[root@station145 usr]# ps aux | grep  local/apache
root     33955  0.0  0.2  76968  2252 ?        Ss   06:07   0:00 /usr/local/apache/bin/httpd
daemon   33957  0.0  0.4 421228  4116 ?        Sl   06:07   0:02 /usr/local/apache/bin/httpd
daemon   33958  0.0  0.4 421228  4112 ?        Sl   06:07   0:02 /usr/local/apache/bin/httpd
daemon   33959  0.0  0.4 421228  4124 ?        Sl   06:07   0:02 /usr/local/apache/bin/httpd
root     34300  0.0  0.0 103252   828 pts/2    S+   07:47   0:00 grep local/apache

可以看到,相关进程已经启动运行


下篇,依据httpd的配置文件,详细讲述httpd的功能特性。