apr-1.4及以上版本
apr-util-1.4及以上版本
而直接升级apr和apr-util会覆盖直接版本的程序,影响其他程序的依赖关系,所以一般使用编译安装的方式安装apr和apr-util,然后编译安装httpd2.4。
具体步骤如下:
1、准备安装环境和源码包
[root@localhost ~] # yum groupinstall "Development Tools" "Server Platform Development" -y [root@localhost ~] # yum install pcre-devel -y
下载源码包,这里我用到的是:
apr-1.5.0.tar.bz2
apr-util-1.5.3.tar.bz2
httpd.2.4.9.tar.bz2
2、编译安装apr和apr-util
[root@localhost ~] # tar xf apr-1.5.0.tar.bz2 [root@localhost ~] # cd apr-1.5.0 [root@localhost apr-1.5.0 ] # ./configure --prefix=/usr/local/apr // 为避免影响原有版本apr,将新版本apr安装到新的目录/usr/local/apr,--prefix选项为指定安装 目录 [root@localhost apr-1.5.0 ] # make && make install [root@localhost ~] # tar xf apr-util-1.5.3.tar.bz2 [root@localhost ~] # cd apr-util-1.5.3 [root@localhost apr-util-1.5.3] # ./configure --prefix=/usr/local/apr-util --with-apr=/usr /local/apr // 同样将apr-util安装到新的目录,--with-apr指定apr所在目录 [root@localhost apr-util-1.5.3 ] # make && make install
3、编译安装httpd2.4
[root@localhost ~] # tar xf httpd-2.4.9.tar.bz2 [root@localhost ~] # cd httpd-2.4.9 [root@localhost httpd-2.4.9 ] # ./configure --prefix=/usr/local/apache --sysconf=/etc/http d24 --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=prefork // --prefix=/usr/local/apache :安装位置 // -sysconf=/etc/httpd24 :配置文件位置 // --enable-so :支持DSO动态装载模块 // --enable-ssl :支持SSL/TLS,可实现https协议访问,需要安装openssl-devel // --enable-cgi :支持CGI脚本 // --enable-rewrite :支持URL重写 // --with-zlib :使用指定的zlib压缩库,不指定路径会自动寻找 // --with-pcre :使用指定的pcre库,增强的正则表达式分析工具;不指定路径会自动寻找,需要安装 pcre-devel // --with-apr=/usr/local/apr :指定依赖的apr程序安装位置 // --with-apr-util=/usr/local/apr-util :指定依赖的apr-util程序安装位置 // --enable-modules=most :支持动态启用模块:all:所有;most:常用 // --enable-mpms-shared=all :编译并共享的模块 // --with-mpm=event :默认启用的mpm模块;可选项有prefork|worker|event [root@localhost httpd-2.4.9 ] # make && make install
4、安装后配置
(1)添加环境变量,并重读文件
因为是编译安装的httpd,所以PATH环境变量里并没有我们所安装的目录,需要手动添加
[root@localhost ~] # vim /etc/profile.d/httpd24.sh export PATH=/usr/local/apache/bin:$PATH [root@localhost ~] # source /etc/profile.d/httpd24.sh
添加完成后,执行httpd命令时,就可以正常使用,如果不添加到环境变量,则需要在绝对路径下使用,十分不便。
(2)导出头文件
[root@localhost ~] # ln -sv /usr/local/apache/include /usr/include/httpd
不需要复制,创建软链接即可
(3)导出man手册
[root@localhost ~] # vim /etc/man.confg
(4)编写服务脚本
[root@localhost ~]# vim /etc/rc.d/init.d/httpd #!/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=${HTTPD-/usr/sbin/httpd} prog=httpd pidfile=${PIDFILE-/var/run/httpd/httpd24.pid} lockfile=${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() { status -p ${pidfile} $httpd > /dev/null if [[ $? = 0 ]]; then echo -n $"Stopping $prog: " killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpd else echo -n $"Stopping $prog: " success fi 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 ;; stop) stop ;; 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 $RETVA
编写完服务脚本后,需要将服务脚本设为开机启动
[root@localhost ~]# chkconfig --add httpd [root@localhost ~]# chkconfig httpd on
写的比较潦草,如有遗漏错误和争议之处,欢迎大家的批评指正和讨论,谢谢。
原文地址:http://blog.51cto.com/11367661/2047998