httpd編譯安裝

httpd編譯安裝
===========================================
官網:http://httpd.apache.org/
包:httpd-2.4.20.tar.bz2   
註釋:此處只考慮 2.4+ 的安裝與配置,基於CentOS 6 和 CentOS 7。

(1)環境準備。
    ~]# yum -y install gcc gcc-c++ apr-devel apr-util-devel pcre pcre-devel openssl openssl-devel
    ~]# tar -axf httpd-2.4.20.tar.bz2
    ~]# cd httpd-2.4.20/

(2)注意事項。
    CentOS 6:注意事項
        apr 與 apr-util 官網下載地址:http://apr.apache.org/download.cgi
        版本要求:
            (1) apr             version >= 1.4+
                ~]# ./configure  --prefix=/usr/local/apr
                ~]# make && make install

            (2) apr-util        version >= 1.4+
                ~]# ./configure  --prefix=/usr/local/apr-util  --with-apr=/usr/local/apr
                ~]# make && make install

(3)編譯安裝。
    CentOS 6:
            ~]# ./configure --prefix=/usr/local/httpd --sysconfdir=/etc/httpd --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=all --enable-mpms-shared=all --with-pcre --with-libxml2 --enable-cgi  --with-mpm=prefork
    CentOS 7:
            ~]#   ./configure --prefix=/usr/local/httpd --sysconfdir=/etc/httpd --enable-modules=all --enable-mpms-shared=all --with-pcre --with-libxml2 --enable-cgi  --with-mpm=prefork

    ~]# make && make install

    註釋:
        (1)--enable-mods-shared=all --enable-mods-static=all 只能選擇一個,選擇了 shared 之後還可以選擇部分 static。(非必選)
        (2) --enable-load-all-modules 開啓所有的選項,不要使用,開啓了所有的會存在一些衝突,當需要的時候手動開啓即可。
        (2)--enable-cgi 爲模塊。--with-pcre --with-libxml2 爲擴展。(非必選)
        (3)--with-mpm=prefork 指定默認工作模型。(非必選)
        (4)--with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util  爲 CentOS 6 系統的依賴。(CentOS 6 必選)

    查看編譯了那些模塊:
            ~]# ls /usr/local/httpd/modules

    查看加載了那些模塊:
            ~]# /usr/local/httpd/bin/httpd -M
===============================================
常用選項解釋:
Configuration:
    -h, --help             顯示幫助文檔並退出

Installation directories:
  --prefix=PREFIX         指定安裝路徑

Fine tuning of the installation directories:
    --sysconfdir=DIR        指定配置文件路徑

Optional Features:
  --enable-load-all-modules     開啓所有的加載模塊
  --enable-modules=MODULE-LIST  開啓模塊 | "all" |"most" | "few" | "none" | "reallyall"
  --enable-mods-shared=MODULE-LIST    共享模塊 |"all" | "most" | "few" | "reallyall"
  --enable-mods-static=MODULE-LIST   靜態模塊 |"all" | "most" | "few" | "reallyall"
  --enable-ssl            SSL/TLS :構建 https
  --enable-mpms-shared=MPM-LIST    共享模塊 | "all"
  --enable-rewrite        url 重寫
  --enable-vhost-alias    虛擬主機
  --enable-proxy-fcgi     FastCGI 模塊
  --enable-so            允許運行時加載DSO模塊

Optional Packages:
    --with-apr=PATH         prefix for installed APR or the full path to apr-config
    --with-apr-util=PATH    prefix for installed APU or the full path to  apu-config
    --with-mpm=MPM        指定apache默認工作模式:MPM={event|worker|prefork|winnt}
    --with-pcre=PATH        perl語言兼容正則表達式)是一個用C語言編寫的正則表達式函數庫。
    --with-libxml2=PATH     Libxml2 是一個xml c語言版的解析器,還支持c++、PHP、Pascal、Ruby、Tcl等語言的綁定

========================================================
系統服務,啓動,庫,環境變量等設置。

(1)測試是否正常。
        自帶啓動腳本:
            /usr/local/httpd/bin/apachectl (start | stop | restart | graceful | graceful-stop)
        查看端口80是否被監聽:
            ss -tnl

(2)加入環境變量
    臨時生效:
        ~]# export PATH=/usr/local/httpd/bin:$PATH

    永久生效:
        ~]# vim /etc/profile.d/httpd.sh
           export PATH=/usr/local/httpd/bin:$PATH
        ~]# source /etc/profile.d/httpd.sh

    測試:(apachectl 現在是一個命令)
        ~]# apachectl (start | stop | restart | graceful | graceful-stop)

(3)導出庫文件:
        ~]# ln -s /usr/local/httpd/include /usr/include/httpd

(4)導出man手冊
    CentOS 6:
        ~]# vim /etc/man.config
    CentOS 7:
        ~]# vi /etc/man_db.conf

    寫入:
        MANPATH /usr/local/httpd/man


(5)服務腳本文件
    CentOS 6:新加啓動腳本。
~]# vi /etc/rc.d/init.d/httpd
-------------------------------------start----------------------------------------------
#!/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/httpd/bin/apachectl
httpd=${HTTPD-/usr/local/httpd/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/usr/local/httpd/logs/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
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
    ;;
  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 $RETVAL
---------------------------------------------------end------------------------------------------------


CentOS 7 新加啓動腳本:
~]# vi 
---------------------------------------------------start------------------------------------------------

---------------------------------------------------end------------------------------------------------


(6)開機啓動
CentOS 6:
    ~]# chkconfig --add httpd
    ~]# chkconfig --level 345 httpd on
    ~]# chkconfig --list httpd
        httpd          0:off   1:off   2:off   3:on    4:on    5:on    6:off

CentOS 7:
    

(7)系統啓動與停止
    CentOS 6:
        service httpd (start | stop | restart)
    CentOS 7:
        systemctl (start | stop | restart) httpd.service

(7)語法測試
    httpd -t

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章