编译安装httpd2.4

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编译安装httpd2.4相关的知识,希望对你有一定的参考价值。

httpd-2.4需要较新版本的apr和apr-util,因此需要事先对其进行升级。升级方式有两种,一种是通过源代码编译安装,一种是直接升级rpm包。

这里选择使用编译源代码的方式进行

1、解决依赖关系

yum groupinstall -y "Development Tools" "Server Platform Development"

yum install -y pcre-devel

 

下载软件包

apr-1.5.0.tar.bz2

apr-util-1.5.3.tar.bz2

httpd-2.4.25.tar.bz2

(1) 编译安装apr

编译安装 apr 

解压并进入目录

./configure --prefix=/usr/local/apr

make && make install

(2) 编译安装apr-util

解压进入目录

./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr 需要指定apr路径

 

(3)编译安装httpd2.4

./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

补充:

 

(1)构建MPM为静态模块

在全部平台中,MPM都可以构建为静态模块。在构建时选择一种MPM,链接到服务器中。如果要改变MPM,必须重新构建。为了使用指定的MPM,请在执行configure脚本 时,使用参数 --with-mpm=NAME。

NAME是指定的MPM名称。编译完成后,可以使用 ./httpd -l 来确定选择的MPM。 此命令会列出编译到服务器程序中的所有模块,包括 MPM。

 

(2)构建 MPM 为动态模块

 

在Unix或类似平台中,MPM可以构建为动态模块,与其它动态模块一样在运行时加载。 构建 MPM 为动态模块允许通过修改LoadModule指令内容来改变MPM,而不用重新构建服务器程序。

在执行configure脚本时,使用--enable-mpms-shared选项即可启用此特性。当给出的参数为all时,所有此平台支持的MPM模块都会被安装。

还可以在参数中给出模块列表。默认MPM,可以自动选择或者在执行configure脚本时通过--with-mpm选项来指定,然后出现在生成的服务器配置文件中。编辑LoadModule指令内容可以选择不同的MPM。

 

 

3、修改httpd的主配置文件,设置其Pid文件的路径

 

编辑/etc/httpd/httpd.conf,添加如下行即可:

PidFile  "/var/run/httpd.pid"

 

4、提供SysV服务脚本/etc/rc.d/init.d/httpd,内容如下:

 

#!/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 [email protected]

  RETVAL=$?

  ;;

  *)

  echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"

  exit 1

esac

 

exit $RETVAL

 

而后为此脚本赋予执行权限:

# chmod +x /etc/rc.d/init.d/httpd

 

加入服务列表:

# chkconfig --add httpd

 

 

接下来就可以启动服务进行测试了。

[[email protected]Linux bin]# service httpd restart

AH00557: httpd: apr_sockaddr_info_get() failed for linux.64.114

AH00558: httpd: Could not reliably determine the server‘s fully qualified domain

name, using 127.0.0.1. Set the ‘ServerName‘ directive globally to suppress this

message

解决方法

[[email protected] httpd24]# pwd

/etc/httpd24

[[email protected] httpd24]# vim httpd.conf

 

修改ServerName www.example.com:80  ServerName localhost:80

3、继续执行checking whether to enable mod_ssl... configure: error: mod_ssl has been requested but can not be built due to prerequisite failures,这是因为缺少openssl

[[email protected] httpd-2.4.18]# yum install openssl-devel

4、最后出现的一个报错是configure: error: MPM most does not support dynamic loading.

从字面上可以了解,此时将--enbale-mpm-shared改为all即可


以上是关于编译安装httpd2.4的主要内容,如果未能解决你的问题,请参考以下文章

centos7编译安装httpd2.4.25

CentOS 6.5 编译安装httpd2.4安装

CentOS 6.10源码编译及使用ansible编译安装httpd2.4.39

centos6.9编译安装httpd2.4

Linux源码安装httpd:Centos7

centos6.8简易编译安装httpd2.4