天天看點

【httpd】04、編譯安裝httpd-2.4及其新特性

一、編譯安裝httpd-2.4.25

1、環境

OS:CentOS6.5 x86_64

已安裝了常用的開發包組:

[root@Node4 ~]# yum grouplist
Loaded plugins: fastestmirror
Setting up Group Process
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * epel: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
epel/group_gz                                                         | 150 kB     00:00     
Installed Groups:
   Additional Development
   Desktop Platform Development     #桌面平台開發
   Development tools                #開發工具
   E-mail server
   Fonts
   General Purpose Desktop
   Graphical Administration Tools
   Input Methods
   Legacy X Window System compatibility
   Milkymist
   Perl Support
   Security Tools
   Server Platform Development    #伺服器平台開發
Installed Language Groups:
   Chinese Support [zh]      

從官網擷取軟體包,并驗證其來源合法性及完整性:

驗證方法:

% pgpk -a KEYS

% pgpv httpd-2.4.25.tar.gz.asc 

or 

% pgp -ka KEYS

% pgp httpd-2.4.25.tar.gz.asc 

or 

% gpg --import KEYS

% gpg --verify httpd-2.4.25.tar.gz.asc httpd-2.4.25.tar.gz      

驗證:

[root@Node4 ~]# 
[root@Node4 ~]# cd src
[root@Node4 src]# ls
apr-1.5.2.tar.gz  apr-util-1.5.4.tar.gz  httpd-2.4.25.tar.gz  httpd-2.4.25.tar.gz.asc  KEYS
[root@Node4 src]# gpg --import KEYS 
.
.
.
gpg: Total number processed: 64
gpg:           w/o user IDs: 4
gpg:              unchanged: 60
[root@Node4 src]# gpg --verify httpd-2.4.25.tar.gz.asc httpd-2.4.25.tar.gz
gpg: Signature made Sat 17 Dec 2016 02:25:00 AM CST using RSA key ID 791485A8
gpg: Good signature from "Jim Jagielski (Release Signing Key) <[email protected]>"   #出現這一行說明這個簽名是有效的
gpg:                 aka "Jim Jagielski <[email protected]>"
gpg:                 aka "Jim Jagielski <[email protected]>"
gpg: WARNING: This key is not certified with a trusted signature!
                                          #這個警告是因為本地密鑰庫不信任該公鑰
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: A93D 62EC C3C8 EA12 DB22  0EC9 34EA 76E6 7914 85A8
[root@Node4 src]#      

2、安裝httpd-2.4.25依賴的包

 1)pcre

httpd支援正規表達式依賴于pcre(正規表達式函數庫),需要安裝其開發包pcre-devel

[root@Node4 ~]# rpm -qa|grep pcre     
pcre-7.8-6.el6.x86_64
[root@Node4 ~]# yum install httpd  -y    #使用yum安裝pcre-devel包      

注意:

  可以不解除安裝系統上yum安裝httpd和其依賴包,但一定要關閉httpd并禁止其開機啟動。建議删掉

 2)apr及apr-util

httpd-2.4 依賴于較高版本的apr(1.5以上)和apr-util

apr:apache portable runtime  apache可移植執行環境

   是一個api,一個底層庫,實作讓apache能夠跨平台的工具

[root@Node4 ~]# rpm -qa|grep apr     
                    #系統中自帶(或yum安裝)的apr版本低了,需編譯安裝apr及apr-util
apr-1.3.9-5.el6_2.x86_64
apr-util-ldap-1.3.9-3.el6_0.1.x86_64
apr-util-1.3.9-3.el6_0.1.x86_64      

編譯安裝apr:

[root@Node4 src]# tar xf apr-1.5.2.tar.gz 
[root@Node4 src]# cd apr-1.5.2
[root@Node4 apr-1.5.2]# ls
apr-config.in  buildconf         dso         libapr.rc     NOTICE         support
apr.dep        build.conf        emacs-mode  LICENSE       NWGNUmakefile  tables
apr.dsp        build-outputs.mk  encoding    locks         passwd         test
apr.dsw        CHANGES           file_io     Makefile.in   poll           threadproc
apr.mak        CMakeLists.txt    helpers     Makefile.win  random         time
apr.pc.in      config.layout     include     memory        README         tools
apr.spec       configure         libapr.dep  misc          README.cmake   user
atomic         configure.in      libapr.dsp  mmap          shmem
build          docs              libapr.mak  network_io    strings
[root@Node4 apr-1.5.2]# ./configure --prefix=/usr/local/apr

[root@Node4 apr-1.5.2]# make && make install

[root@Node4 apr-1.5.2]# ls /usr/local/apr/
bin  build-1  include  lib      

編譯安裝apr-util:

[root@Node4 apr-1.5.2]# cd ..
[root@Node4 src]# tar xf apr-util-1.5.4.tar.gz 
[root@Node4 src]# cd apr-util-1.5.4
[root@Node4 apr-util-1.5.4]# ls
aprutil.dep     buildconf         dbd                libaprutil.dsp  NWGNUmakefile
aprutil.dsp     build.conf        dbm                libaprutil.mak  README
aprutil.dsw     build-outputs.mk  docs               libaprutil.rc   README.cmake
aprutil.mak     CHANGES           encoding           LICENSE         renames_pending
apr-util.pc.in  CMakeLists.txt    export_vars.sh.in  Makefile.in     strmatch
apr-util.spec   config.layout     hooks              Makefile.win    test
apu-config.in   configure         include            memcache        uri
buckets         configure.in      ldap               misc            xlate
build           crypto            libaprutil.dep     NOTICE          xml
[root@Node4 apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr            #apr-util依賴于apr是以要使用with-apr指定apr程式的位置
             
[root@Node4 apr-util-1.5.4]# make && make install

[root@Node4 apr-util-1.5.4]# ls /usr/local/apr-util/
bin  include  lib      

3、編譯安裝httpd-2.4.25

[root@Node4 apr-util-1.5.4]# cd ..
[root@Node4 src]# tar xf httpd-2.4.25.tar.gz
[root@Node4 src]# cd httpd-2.4.25
[root@Node4 httpd-2.4.25]# ls
ABOUT_APACHE     BuildBin.dsp    emacs-style     LAYOUT        NOTICE            srclib
acinclude.m4     buildconf       httpd.dep       libhttpd.dep  NWGNUmakefile     support
Apache-apr2.dsw  CHANGES         httpd.dsp       libhttpd.dsp  os                test
Apache.dsw       CMakeLists.txt  httpd.mak       libhttpd.mak  README            VERSIONING
apache_probes.d  config.layout   httpd.spec      LICENSE       README.cmake
ap.d             configure       include         Makefile.in   README.platforms
build            configure.in    INSTALL         Makefile.win  ROADMAP
BuildAll.dsp     docs            InstallBin.dsp  modules       server      

httpd編譯參數詳解:

[root@Node4 httpd-2.4.25]# ./configure --prefix=/usr/local/apache \  #安裝路徑
> --sysconfdir=/etc/httpd24 \     #配置檔案路徑
> --enable-so \                   #啟用支援動态共享子產品                 
> --enable-ssl \                  #支援ssl
> --enable-cgi \                  #支援cgi
> --enable-rewrite \              #支援URL重寫
> --with-zlib \                   #依賴zlib庫檔案,網絡上發送資料封包時通用壓縮庫的API
> --with-pcre \   #指定依賴pcre包,不指定路徑,系統就會去系統中查找(rpm包的安裝路徑)
> --with-apr=/usr/local/apr \     #指定依賴apr包路徑
> --with-apr-util=/usr/local/apr-util \     #指定依賴apr-util包路徑
> --enable-modules=most|all \               #安裝大多數子產品或全部子產品
> --enable-mpms-shared=all \                #以動态共享子產品方式安裝全部MPM
> --with-mpm=event                          #指定預設使用event MPM      

啟動并測試:

[root@Node4 httpd-2.4.25]# cd /usr/local/apache/
[root@Node4 apache]# ls
bin  build  cgi-bin  error  htdocs  icons  include  logs  man  manual  modules
[root@Node4 apache]# ls bin
ab         apxs      dbmmanage  envvars-std  htcacheclean  htdigest  httpd      logresolve
apachectl  checkgid  envvars    fcgistarter  htdbm         htpasswd  httxt2dbm  rotatelogs
[root@Node4 apache]# ./bin/apachectl start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.10.4. Set the 'ServerName' directive globally to suppress this message
httpd (pid 32245) already running      
【httpd】04、編譯安裝httpd-2.4及其新特性

4、後續的配置

導出二進制程式:

# vim /etc/profile.d/apache.sh
  export PATH=/usr/local/apache/bin:$PATH      

導出頭檔案:

[root@Node4 apache]# ln -sv /usr/local/apache/include/ /usr/include/httpd
`/usr/include/httpd' -> `/usr/local/apache/include/'      

導出庫檔案:沒有生成庫檔案

導出man手冊:

# vi /etc/man.conf 
添加 MANPATH /usr/local/apache/man
或者直接使用指令:man -M /usr/local/apache/man apache      

建立SysV(System V)風格的服務腳本:

最簡單的方法是修改原yum安裝的httpd服務腳本

編譯安裝後httpd預設的pid檔案路徑為:

[root@Node4 apache]# ls logs
access_log  error_log  httpd.pid      

指定pid檔案路徑:

  在/etc/httpd2.4/httpd.conf中添加一行:PidFile "/var/run/httpd2.4.pid"  #我這裡不修改

修改原yum安裝的http服務腳本:/etc/rc.d/init.d/httpd

# 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-/usr/local/apache/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      

測試:

[root@Node4 ~]# service httpd
Usage: httpd {start|stop|restart|condrestart|try-restart|force-reload|reload|status|fullstatus|graceful|help|configtest}
[root@Node4 ~]# service httpd status
httpd (pid  49500) is running...
[root@Node4 ~]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
[root@Node4 ~]# service httpd status
httpd (pid  49620) is running...
[root@Node4 ~]# chkconfig --list httpd
service httpd supports chkconfig, but is not referenced in any runlevel (run 'chkconfig --add httpd')
[root@Node4 ~]# chkconfig --add httpd
[root@Node4 ~]# chkconfig --list httpd
httpd          	0:off	1:off	2:off	3:off	4:off	5:off	6:off
[root@Node4 ~]# chkconfig httpd on
[root@Node4 ~]# chkconfig --list httpd
httpd          	0:off	1:off	2:on	3:on	4:on	5:on	6:off      

   編譯安裝2.4版本的主配置檔案/etc/apache2.4沒有像yum安裝的2.2版本的主配置檔案/etc/httpd/conf/httpd.conf一樣分為三段,分段配置檔案為/etc/apache2.4/extra/*.conf

[root@Node4 apache]# cd /etc/httpd24/
[root@Node4 httpd24]# ls
extra  httpd.conf  magic  mime.types  original
[root@Node4 httpd24]# ls extra/
httpd-autoindex.conf  httpd-languages.conf           httpd-ssl.conf
httpd-dav.conf        httpd-manual.conf              httpd-userdir.conf
httpd-default.conf    httpd-mpm.conf                 httpd-vhosts.conf
httpd-info.conf       httpd-multilang-errordoc.conf  proxy-html.conf
[root@Node4 httpd24]#      

httpd-vhost.conf:配置虛拟主機

httpd-ssl.conf:配置ssl

httpd-mpm.conf:配置MPM

二、httpd-2.4新特性

1、MPM支援(DSO)運作時裝載

   在httpd-2.2中MPM如何切換的?

編譯時使用下面的選項開啟該功能:

  --enable-mpms-shared=all  編譯所有支援的MPM

  --with-mpm=event       設定預設啟用的MPM

2、支援event MPM

3、支援異步讀寫

4、在每子產品及每目錄上指定日志級别

5、每請求配置:<If>,<Elseif>

6、增強版的表達分析器

7、毫秒級的keepalive timout

8、基于FQDN的虛拟主機不再需要NameVirtualHost指令

9、配置檔案支援使用自定義變量

10、新增了一些子產品:mod_proxy_fcgi,mod_ratelimit,mod_request,mod_remoteip

  對于基于IP的通路控制做了修改:不再支援用order,allow,deny這些機制而是統一使用require進行;中心主機和虛拟主機都必須明确定義權限才可以通路,否則無權限通路

11、基于IP通路控制

  不再支援使用order,allow,deny這些機制,而是統一使用require

允許所有主機通路:Require all granted

拒絕所有主機通路:Require all deny

控制某主機的通路:

   Require ip IPADDR

   Require not ip IPADDR

         IPADDR可使用的格式:

            可以是單個IP位址,     例如:172.16.100.7

            可以是network/netmask   例如:172.16.0.0/255.255.0.0

                 network/Length  例如:172.16.0.0/16

                        Net   例如:172.16              

   Require host HOSTNAME

   Require not host HOSTNAME

         Hostname可使用的格式:

            FQDN:具體的主機    例如:www.magedu.com

          DOMAIN: 域名        例如:.magedu.com

三、啟用伺服器狀态

   mod_status子產品可以讓管理者檢視伺服器的執行狀态,它通過一個HTML頁面展示了目前伺服器的統計資料。這些資料通常包括但不限于:

(1) 處于工作狀态的worker程序數;

(2) 空閑狀态的worker程序數;

(3) 每個worker的狀态,包括此worker已經響應的請求數,及由此worker發送的内容的位元組數;

(4) 目前伺服器總共發送的位元組數;

(5) 伺服器自上次啟動或重新開機以來至目前的時長;

(6) 平均每秒鐘響應的請求數、平均每秒鐘發送的位元組數、平均每個請求所請求内容的位元組數;

檢視是否裝載了該子產品:

[root@Node4 ~]# /usr/local/apache/bin/httpd -M|grep status
 status_module (shared)      

啟用狀态頁面的方法很簡單,隻需要在httpd主配置檔案中添加如下内容即可:

<Location /server-status>
    SetHandler server-status
    Require all granted
</Location>      

   需要提醒的是,這裡的狀态資訊不應該被所有人随意通路,是以,應該限制僅允許某些特定位址的用戶端檢視。比如使用Require ip 172.16.0.0/16來限制僅允許指定網段的主機檢視此頁面。

繼續閱讀