1 安裝
通過yum或apt-get的方式不在此說明,下面說明原始碼安裝的問題。
Linux下源碼安裝比較常規,最一般的即./configure;make;make install. 但由於不同版本對系統依賴的包不同,在安裝過程中如果遇到依賴的情況需要安裝相應的依賴。
1.1 安裝路徑
安裝apache的httpd需要注意的問題是安裝路徑問題,由於Linux系統分支眾多,安裝過程中會將檔案安裝到不同的路徑下。為此apache在安裝時可以配置這些路徑參數,具體通過configure的參數實現。
--prefix 指定安裝的根目錄,預設為/usr/local/apache2,使用者可以自己指定,make install時會將bin lib等安裝到此目錄下,更詳細的還可以設定如下幾個比較重要的參數。
--bindir=DIR user executables [EPREFIX/bin]
--sbindir=DIR system admin executables [EPREFIX/sbin]
--libexecdir=DIR program executables [EPREFIX/libexec]
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--libdir=DIR object code libraries [EPREFIX/lib]
為了簡化配置過程,源碼包提供了config.layout,使用者可以在修改其中定義的模板,並在configure時通過--enable-layout='name'來定義自己的目錄路徑方式。
config.layout中定義了眾多的模板,基本上針對每種類型的系統都有定義,如Debian、MAC OS、AIX、等等等,下面可以看一個apache自己預設的定義
<Layout RedHat> prefix: /usr exec_prefix: ${prefix} bindir: ${prefix}/bin sbindir: ${prefix}/sbin libdir: ${prefix}/lib libexecdir: ${prefix}/lib/apache mandir: ${prefix}/man sysconfdir: /etc/httpd/conf datadir: /var/www installbuilddir: ${datadir}/build errordir: ${datadir}/error iconsdir: ${datadir}/icons htdocsdir: ${datadir}/html manualdir: ${datadir}/manual cgidir: ${datadir}/cgi-bin includedir: ${prefix}/include/apache localstatedir: /var runtimedir: ${localstatedir}/run logfiledir: ${localstatedir}/log/httpd proxycachedir: ${localstatedir}/cache/httpd</Layout>
當我們在redhat/centos/fedora系統下yum安裝httpd,實際按layout中定義的redhat的布局進行存放。
1.2 安裝時特性配置
apache本身是模組化的,在配置時我們可以選擇apache支援的模組以及對模組的支援方式,如so或是靜態方式。
--enable-modules=mod-list 可以用all或most代替,表示靜態編譯的模組
--enable-mods-shared=mod-list 同上 ,表示編譯為動態載入的共用模組
具體參考第3節
通常模組功能較大,模組具有比較多的特性,特性也可以通過配置來開啟和關閉,具體可以通過configure --help 查看,如
--enable-charset-lite 支援字元轉換
--enable-deflate 支援壓縮
--enable-ldap 支援ldap
--enable-usertrack 支援使用者會話跟蹤
這裡要重點說下MPM功能支援,此模組用於控制進程使用模型,在配置時可以指定將哪種進程模型編譯為靜態模組,不同的系統下有不同的預設MPM
--with-mpm = {beos|event|worker|prefork|mpmt_os2|winnt} Unix下支援prefork/worker/event Winnt下支援winnt
在2.4版本中mpm支援以動態方式編譯,可以通過 --enable-mpms-shared方式說明,然後在LoadModule中載入不同的MPM模組,
具體可參考官方文檔:http://httpd.apache.org/docs/2.4/mpm.html
1.3 編譯和安裝
在確認配置參數後,如前所述執行configure會產生Makefile
然後即可執行make和make install
這樣到layout指定的目錄下即可看到安裝好的檔案。
2 httpd的運行控制和狀態監控
2.1 httpd的進程式控制制
一種方式是直接操作httpd進程,可以直接運行命令加上合適的參數。終止用pkill或kill
一種方式是採用apachectl這個指令碼,這個指令碼實際只是對httpd進行了簡單的封裝,設定一些系統內容,最主要是設定檔案描述符開啟個數,並通過系統命令獲得進程狀態
啟動httpd後,開啟瀏覽器即可訪問。如果遇到提示檔案存取權限問題,則問題可能是三方面的:1 SELinux策略 2 Directory目錄許可權配置錯誤 3 ServerRoot及上級目錄許可權錯誤
2.2 httpd參數說明
-k start|restart|graceful|graceful-stop|stop 控制httpd進程的啟動和終止
-d dir 指定ServerRoot路徑
-f file 指定啟動時使用httpd.conf檔案路徑,通過指定不同的設定檔及連接埠,可以啟動多個apache進程
-l 列出編譯到apache中的模組
-L 列出當前配置指示
-M 列出當前載入的模組
-D 通過命令列設定宏,可以傳遞給設定檔中的<ifDefine name>... </ifDefine>,從而實現配置的選擇性載入
-t 檢查設定檔,但不啟動
-C/-c 向httpd傳遞配置指令,從而對靜態配置進行修改
2.3 apache運行狀態監控
2.3.1 內建模組支援
mod_status 與 mod_info分別提供了運行狀態和配置資訊的監控,如需啟用,需要在設定檔件開啟相應的配置
## Allow server status reports generated by mod_status,# with the URL of http://servername/server-status# Change the ".example.com" to match your domain to enable.#<Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from .example.com</Location>## Allow remote server configuration reports, with the URL of# http://servername/server-info (requires that mod_info.c be loaded).# Change the ".example.com" to match your domain to enable.#<Location /server-info> SetHandler server-info Order deny,allow Deny from all Allow from .example.com</Location>
對以上配置進行修改,通過瀏覽器開啟http://usr/server-status即可
2.3.2 三方工具的監控
開源工具比較多,如zabbix和nagios,不在此說明
3 apache的模組管理和支援
3.1 模組的類型
apache模組分為三類:核心模組,標準模組和第三方模組。
核心模組:如core,mpm等,其為apache的基本 必須模組,無法刪除。
標準模組:由apache自身維護,並作為apache的一部分發布,可以載入和刪除,前提是需要靜態安裝了mod_so模組
三方模組:由第三方開發,與apache不在一起發布
3.2 模組的載入
模組可以通過靜態方式編譯到httpd中,從而提高執行速度,通過在配置時指定./configure --enable-modules=most
模組也可以動態方式載入,從而減小httpd的大小,通過在配置時指定./configure --enable-mods-shared=most,這樣我們可以在httpd.conf中來載入需要的模組。
LoadModule可以載入ServerRoot/modules/下的模組,格式為LoadModule xxx_module modules/mod_xxx.so
LoadFile用來載入任意位置的模組,格式為LoadFile /usr/lib/modules/libphp5.so
值得注意的是,對於載入的模組,按照後進先出的方式進行去處理URL
3.3 增加新模組
增加新的模組有不同的方式,比較簡單的是下載相應的.so檔案,然後存放到指定的位置再通過LoadModule來載入
如果需要通過源碼編譯,則需要通過apxs進行,例如PHP在編譯時間,可以指定--with-apxs2=path即可調用相關指令碼將產生的.so檔案產生到對應位置
三方模組比較難以靜態方式編譯,如果模組支援以靜態方式編譯到apache中,則可以查看其編譯文檔。
參考文獻
MPM prefork工作原理:http://httpd.apache.org/docs/2.4/mod/prefork.html
MPM worker工作原理:http://httpd.apache.org/docs/2.4/mod/worker.html
MPM event工作原理:http://httpd.apache.org/docs/2.4/mod/event.html
Apache prefork與workers工作原理 http://blog.csdn.net/gulaizi/article/details/4005523