httpd有rpm和源码编译的方法,下面介绍一下源码编译安装的方法:

操作系统版本:

# cat /etc/redhat-release 

Red Hat Enterprise Linux Server release 6.5 (Santiago)


软件版本:httpd-2.4.18.tar.bz2 下载地址:http://apache.fayea.com/httpd/


因为2.4版本的http的依赖apr-util、apr和pcre,所以还需要分别安装

软件版本:apr-1.5.2.tar.gz,apr-util-1.5.4.tar.bz2 下载地址:http://apache.fayea.com/apr/

软件版本:pcre-8.37.tar.bz2  下载地址 http://pcre.org/  进入下地址ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/


1、安装apr

# tar xvf apr-1.5.2.tar.gz 

# cd apr-1.5.2

# ./configure --prefix=/usr/local/apr &&  make && make install


2、安装apr-util

# tar xvf apr-util-1.5.4.tar.bz2 

# cd apr-util-1.5.4

# ./configure --prefix=/usr/local/apr-util  --with-apr=/usr/local/apr && make && make install


3、安装pcre 

# tar xvf pcre-8.37.tar.bz2 

# cd pcre-8.37

# ./configure --prefix=/usr/local/pcre && make && make install

  

4、安装httpd

# tar xvf  httpd-2.4.18.tar.bz2

# cd httpd-2.4.18

# ./configure --help #查看编译参数

# ./configure --prefix=/usr/local/apache  --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre=/usr/local/pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-mpms-shared=all  --with-mpm=event  --enable-proxy --enable-proxy-http --enable-proxy-ajp   --enable-proxy-balancer   --enable-lbmethod-heartbeat --enable-heartbeat  --enable-slotmem-shm  --enable-slotmem-plain  --enable-watchdog 

 


--enable-modules=MODULE-LIST  #--enable-modules=most ,大多数模块都会启用

                          Space-separated list of modules to enable | "all" |

                          "most" | "few" | "none" | "reallyall"

 

--sysconfdir=/etc/httpd  #可以将配置文件放在/etc/httpd下面


如果安装有RPM版本的httpd,可以先卸载 ,卸载RPM版本的httpd的方法:

rpm -e httpd-2.2.15 --nodeps

rm /etc/httpd/ -rf

# make install



5、添加PATH环境变量

# cat /etc/profile.d/apache.sh 

# export PATH=$PATH:/usr/local/apache/bin

# . /etc/profile.d/apache.sh 



6、编辑配置httpd.conf配置文件

# cp /usr/local/apache/conf/httpd.conf  /usr/local/apache/conf/httpd.conf.orig

# vim /usr/local/apache/conf/httpd.conf  

LoadModule slotmem_shm_module modules/mod_slotmem_shm.so #取消注释,否则启动会报下面的错误


tailf /usr/local/apache/logs/error_log 

[Thu Feb 04 10:36:40.825258 2016] [proxy_balancer:emerg] [pid 61695:tid 139808143390464] AH01177: Failed to lookup provider 'shm' for 'slotmem': is mod_slotmem_shm loaded??

[Thu Feb 04 10:36:40.825457 2016] [:emerg] [pid 61695:tid 139808143390464] AH00020: Configuration Failed, exiting


# apachectl configtest

Syntax OK

# apachectl start


# lsof -i:80

COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

httpd   61998   root    4u  IPv6 180028      0t0  TCP *:http (LISTEN)

httpd   61999 daemon    4u  IPv6 180028      0t0  TCP *:http (LISTEN)

httpd   62000 daemon    4u  IPv6 180028      0t0  TCP *:http (LISTEN)

httpd   62001 daemon    4u  IPv6 180028      0t0  TCP *:http (LISTEN)



编译安装Apache(httpd-2.4.18)_http


# tailf /usr/local/apache/logs/error_log 

[Thu Feb 04 11:09:45.677198 2016] [lbmethod_heartbeat:notice] [pid 62105:tid 140002822612736] AH02282: No slotmem from mod_heartmonitor

[Thu Feb 04 11:09:45.679312 2016] [mpm_event:notice] [pid 62105:tid 140002822612736] AH00489: Apache/2.4.18 (Unix) configured -- resuming normal operations

[Thu Feb 04 11:09:45.679563 2016] [core:notice] [pid 62105:tid 140002822612736] AH00094: Command line: '/usr/local/apache/bin/httpd'


上面的[lbmethod_heartbeat:notice] [pid 62105:tid 140002822612736] AH02282: No slotmem from mod_heartmonitor的警告暂时不用管,当加了mod-jk配置文件或者mod_proxy配置文件之后会消失


# apachectl stop





7、编写启动脚本,方便开机自启动

#!/bin/bash
#
# httpd        Startup script for the Apache HTTP Server
#
# chkconfig: - 85 15
# description: Apache is a World Wide Web server.  It is used to serve \
#       HTML files and CGI.
# processname: httpd
# config: /etc/httpd/conf/httpd.conf
# config: /etc/sysconfig/httpd
# pidfile: /var/run/httpd.pid
# 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=${HTTPD-/usr/local/apache/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/var/run/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
RETVAL=0
start() {
        echo -n $"Starting $prog: "
        LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}
stop() {
echo -n $"Stopping $prog: "
killproc -p ${pidfile} -d 10 $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=$?
        echo $"not reloading due to configuration syntax error"
        failure $"not reloading $httpd due to configuration syntax error"
    else
        killproc -p ${pidfile} $httpd -HUP
        RETVAL=$?
    fi
    echo
}
# See how we were called.
case "$1" in
  start)
start
;;
  stop)
stop
;;
  status)
        status -p ${pidfile} $httpd
RETVAL=$?
;;
  restart)
stop
start
;;
  condrestart)
if [ -f ${pidfile} ] ; then
stop
start
fi
;;
  reload)
        reload
;;
  graceful|help|configtest|fullstatus)
$apachectl $@
RETVAL=$?
;;
  *)
echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
exit 1
esac
exit $RETVAL


因为自启动脚本中httpd的pid配置在/var/run/httpd.pid下面,所以还需要修改httpd.conf的配置文件

vim /usr/local/apache/conf/httpd.conf  


PidFile "/var/run/httpd.pid"


# apachectl configtest

Syntax OK


# /etc/init.d/httpd start

Starting httpd:                                            [  OK  ]

# /etc/init.d/httpd stop

Stopping httpd:                                            [  OK  ]


# httpd -D DUMP_MODULES  #查看http的支持的模块

Loaded Modules:
 core_module (static)
 so_module (static)
 http_module (static)
 authn_file_module (shared)
 authn_core_module (shared)
 authz_host_module (shared)
 authz_groupfile_module (shared)
 authz_user_module (shared)
 authz_core_module (shared)
 access_compat_module (shared)
 auth_basic_module (shared)
 reqtimeout_module (shared)
 filter_module (shared)
 mime_module (shared)
 log_config_module (shared)
 env_module (shared)
 headers_module (shared)
 setenvif_module (shared)
 version_module (shared)
 proxy_module (shared)
 proxy_connect_module (shared)
 proxy_ftp_module (shared)
 proxy_http_module (shared)
 proxy_fcgi_module (shared)
 proxy_scgi_module (shared)
 proxy_wstunnel_module (shared)
 proxy_ajp_module (shared)
 proxy_balancer_module (shared)
 proxy_express_module (shared)
 slotmem_shm_module (shared)
 lbmethod_byrequests_module (shared)
 lbmethod_bytraffic_module (shared)
 lbmethod_bybusyness_module (shared)
 lbmethod_heartbeat_module (shared)
 mpm_event_module (shared)
 unixd_module (shared)
 status_module (shared)
 autoindex_module (shared)
 dir_module (shared)
 alias_module (shared)


Apache模块的目录:

# ls /usr/local/apache/modules/


至此:用两种方式都可以启动

# lsof -i:80 # httpd没有启动

# apachectl start

# lsof -i:80

COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

httpd   62448   root    4u  IPv6 181067      0t0  TCP *:http (LISTEN)

httpd   62449 daemon    4u  IPv6 181067      0t0  TCP *:http (LISTEN)

httpd   62450 daemon    4u  IPv6 181067      0t0  TCP *:http (LISTEN)

httpd   62451 daemon    4u  IPv6 181067      0t0  TCP *:http (LISTEN)

# apachectl stop

# lsof -i:80

# /etc/init.d/httpd start

Starting httpd:                                            [  OK  ]

# lsof -i:80

COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

httpd   62544   root    4u  IPv6 181205      0t0  TCP *:http (LISTEN)

httpd   62546 daemon    4u  IPv6 181205      0t0  TCP *:http (LISTEN)

httpd   62547 daemon    4u  IPv6 181205      0t0  TCP *:http (LISTEN)

httpd   62548 daemon    4u  IPv6 181205      0t0  TCP *:http (LISTEN)

# /etc/init.d/httpd stop

Stopping httpd:                                            [  OK  ]

# lsof -i:80