httpd是由apache軟件基金會開發的一款著名的web服務器軟件。因爲其開放源代碼,而且擁有跨平臺、功能強大、安全穩定等特性,而被普遍使用。早期httpd是在修修補補的基礎上成長起來的,因此早期也叫做a pachey server,因爲開發httpd的組織叫做apache,所以httpd也被稱做apache。httpd有三個長線維護版本,分別是httpd2.0、httpd2.2和httpd2.4。使用最爲普遍的仍是2.2和2.4的版本,雖然兩個版本看起來數字相差不大,可是這兩個版本改變仍是挺大。
httpd支持許多特性,大部分特性都是經過編譯模塊實現,所以httpd是以核心加模塊組成的方式工做。httpd的模塊分兩種,一種叫做動態可裝載模塊(DSO),另外一種叫做多道處理模塊(MPM)。DSO動態可裝模塊每一個模塊對應httpd的某項功能,也就是咱們普遍意義上理解的功能模塊。可是,MPM多道處理模塊和DSO不同,它並非指一種模塊,它表明的是httpd的一種工做特性,經常使用的MPM有,prefork、worker、event。html
prefork:多進程,每一個請求用一個進程響應,這個過程會用到select機制來通知。web
worker:多線程,一個進程能夠生成多個線程,每一個線程響應一個請求,但通知機制仍是select不過能夠接受更多的請求。數據庫
event:基於異步I/O模型,一個進程或線程,每一個進程或線程響應多個用戶請求,它是基於事件驅動(也就是epoll機制)實現的apache
若是不用「--with-mpm」顯式指定某種MPM,prefork就是Unix平臺上缺省的MPM.它所採用的預派生子進程方式也是 Apache1.3中採用的模式。prefork自己並無使用到線程,2.0版使用它是爲了與1.3版保持兼容性;另外一方面,prefork用單獨的子進程來處理不一樣的請求,進程之間是彼此獨立的,這也使其成爲最穩定的MPM之一。centos
相對於prefork,worker是2.0版中全新的支持多線程和多進程混合模型的MPM。因爲使用線程來處理,因此能夠處理相對海量的請求,而系統資源的開銷要小於基於進程的服務器。可是,worker也使用了多進程,每一個進程又生成多個線程,以得到基於進程服務器的穩定性,這種MPM的工做方 式將是Apache2.0的發展趨勢。api
一個進程響應多個用戶請求,利用callback機制,讓套接字複用,請求過來後進程並不處理請求,而是直接交由其餘機制來處理,經過epoll機制來通知請求是否完成;在這個過程當中,進程自己一直處於空閒狀態,能夠一直接收用戶請求。能夠實現一個進程程響應多個用戶請求。支持持海量併發鏈接數,消耗更少的資源。瀏覽器
在經過yum安裝httpd時在CentOS 6 中默認的是httpd-2.2版本。而CentOS 7中默認安裝的是httpd-2.4。建議若是沒有什麼特殊的版本需求在安裝中儘可能使用yum安裝這樣很容易維護,同時也很方便。緩存
# yum install -y httpd httpd-devel
配置文件安全
/etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf
服務腳本服務器
/etc/rc.d/init.d/httpd
腳本配置文件
/etc/sysconfig/httpd
主程序文件
/usr/sbin/httpd /usr/sbin/httpd.event /usr/sbin/httpd.worker
日誌文件
/var/log/httpd/*.log
站點文檔
/var/www/html
模塊文件路徑
/usr/lib64/httpd/modules
服務控制和啓動
chkconfig httpd on|off service httpd {start|stop|restart|status|configtest|reload}
配置文件
/etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf
模塊相關的配置文件
/etc/httpd/conf.modules.d/*.conf
systemd unit file
/usr/lib/systemd/system/httpd.service
主程序文件
/usr/sbin/httpd
日誌文件
/var/log/httpd/*.log
站點文檔
/var/www/html
模塊文件路徑
/usr/lib64/httpd/modules
服務控制
systemctl enable|disable httpd.service systemctl {start|stop|restart|status} httpd.service
Apache擁有4層結構,從核心到外層的module。而外層的module能夠用經過靜態和動態兩種方式與Apache共同工做。這也就引入下文的「動態」和「靜態」兩種編譯安裝方式:
靜態編譯: 編譯的時候,全部的模塊本身編譯進 httpd 這個文件中 ,啓動Apache的時候這些模塊就已經加載進來了,能夠直接來使用,而不用再 httpd.conf 中在 LoadModule 來加載,只要在 中來配置就能夠了。
動態編譯: 編譯的時候,使用enable-MODULE=shared 或者enable-mods-shared=MODULE來動態編譯。 動態顯然就不編譯到httpd裏面去了,啓動的時候根本不會加載這個模塊, 而是給你一個 module.so文件。若是使用,就在httpd.conf中使用 loadmodule 這個語法來加載,這個模塊纔有效。
區別是:
靜態的模塊一般在http.conf中用 來配置,動態的要先loadmoule來加載,而後再配置。
在安裝httpd-2.4以前須要在系統中安裝apr-1.4+和apr-util-1.4+,在CentOS7中的版本符合要求,可是在CentOS 6中並不符合要求須要專門源碼安裝apr和apr-util。
安裝apr
# ./configure --prefix=/usr/local/apr # make && make install
安裝apr-util
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr # make && make install
安裝httpd
# yum install -y openssl-devel pcre-devel zlib-devel # ./configure --prefix=/usr/local/apache24 --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=all # make && make install
編譯時默認是以動態編譯的模式把模塊加載進去,若是想要用靜態編譯則須要用--enable-mods-static=MODULE-LIST 來編譯。
編譯最好使用動態編譯也是默認的編譯方式進行,這麼使用能夠靈活的添加使用的模塊。
httpd-2.4中默認的mpm模式是event,若是想要使用prefork或者worker模式則須要在編譯的時候指定編譯全部的mpm模塊並指定其中一個爲默認的。
本身測試使用動態編譯和靜態編譯混合使用容易出現問題,因此仍是不建議混合使用編譯。
本身編譯測試中若是指定mpm模塊是event則編譯爲靜態模塊,若是編譯三個mpm模塊並切默認的mpm模塊不是event則這三個模塊默認編譯成動態的 .so 模塊。
模塊列表:
基本(B)模塊默認包含,必須明確禁用;擴展(E)/實驗(X)模塊默認不包含,必須明確啓用
模塊名稱 狀態 簡要描述
mod_actions (B) 基於媒體類型或請求方法,爲執行CGI腳本而提供
mod_alias (B) 提供從文件系統的不一樣部分到文檔樹的映射和URL重定向
mod_asis (B) 發送本身包含HTTP頭內容的文件
mod_auth_basic (B) 使用基本認證
mod_authn_default (B) 在未正確配置認證模塊的狀況下簡單拒絕一切認證信息
mod_authn_file (B) 使用純文本文件爲認證提供支持
mod_authz_default (B) 在未正確配置受權支持模塊的狀況下簡單拒絕一切受權請求
mod_authz_groupfile (B) 使用純文本文件爲組提供受權支持
mod_authz_host (B) 供基於主機名、IP地址、請求特徵的訪問控制
mod_authz_user (B) 基於每一個用戶提供受權支持
mod_autoindex (B) 自動對目錄中的內容生成列表,相似於"ls"或"dir"命令
mod_cgi (B) 在非線程型MPM(prefork)上提供對CGI腳本執行的支持
mod_cgid (B) 在線程型MPM(worker)上用一個外部CGI守護進程執行CGI腳本
mod_dir (B) 指定目錄索引文件以及爲目錄提供"尾斜槓"重定向
mod_env (B) 容許Apache修改或清除傳送到CGI腳本和SSI頁面的環境變量
mod_filter (B) 根據上下文實際狀況對輸出過濾器進行動態配置
mod_imagemap (B) 處理服務器端圖像映射
mod_include (B) 實現服務端包含文檔(SSI)處理
mod_isapi (B) 僅限於在Windows平臺上實現ISAPI擴展
mod_log_config (B) 容許記錄日誌和定製日誌文件格式
mod_mime (B) 根據文件擴展名決定應答的行爲(處理器/過濾器)和內容(MIME類型/語言/字符集/編碼)
mod_negotiation (B) 提供內容協商支持
mod_nw_ssl (B) 僅限於在NetWare平臺上實現SSL加密支持
mod_setenvif (B) 根據客戶端請求頭字段設置環境變量
mod_status (B) 生成描述服務器狀態的Web頁面
mod_userdir (B) 容許用戶從本身的主目錄中提供頁面(使用"/~username")
mod_auth_digest (X) 使用MD5摘要認證(更安全,可是隻有最新的瀏覽器才支持)
mod_authn_alias (E) 基於實際認證支持者建立擴展的認證支持者,併爲它起一個別名以便於引用
mod_authn_anon (E) 提供匿名用戶認證支持
mod_authn_dbd (E) 使用SQL數據庫爲認證提供支持
mod_authn_dbm (E) 使用DBM數據庫爲認證提供支持
mod_authnz_ldap (E) 容許使用一個LDAP目錄存儲用戶名和密碼數據庫來執行基本認證和受權
mod_authz_dbm (E) 使用DBM數據庫文件爲組提供受權支持
mod_authz_owner (E) 基於文件的全部者進行受權
mod_cache (E) 基於URI鍵的內容動態緩衝(內存或磁盤)
mod_cern_meta (E) 容許Apache使用CERN httpd元文件,從而能夠在發送文件時對頭進行修改
mod_charset_lite (X) 容許對頁面進行字符集轉換
mod_dav (E) 容許Apache提供DAV協議支持
mod_dav_fs (E) 爲mod_dav訪問服務器上的文件系統提供支持
mod_dav_lock (E) 爲mod_dav鎖定服務器上的文件提供支持
mod_dbd (E) 管理SQL數據庫鏈接,爲須要數據庫功能的模塊提供支持
mod_deflate (E) 壓縮發送給客戶端的內容
mod_disk_cache (E) 基於磁盤的緩衝管理器
mod_dumpio (E) 將全部I/O操做轉儲到錯誤日誌中
mod_echo (X) 一個很簡單的協議演示模塊
mod_example (X) 一個很簡單的Apache模塊API演示模塊
mod_expires (E) 容許經過配置文件控制HTTP的"Expires:"和"Cache-Control:"頭內容
mod_ext_filter (E) 使用外部程序做爲過濾器
mod_file_cache (X) 提供文件描述符緩存支持,從而提升Apache性能
mod_headers (E) 容許經過配置文件控制任意的HTTP請求和應答頭信息
mod_ident (E) 實現RFC1413規定的ident查找
mod_info (E) 生成Apache配置狀況的Web頁面
mod_ldap (E) 爲其它LDAP模塊提供LDAP鏈接池和結果緩衝服務
mod_log_forensic (E) 實現"對比日誌",即在請求被處理以前和處理完成以後進行兩次記錄
mod_logio (E) 對每一個請求的輸入/輸出字節數以及HTTP頭進行日誌記錄
mod_mem_cache (E) 基於內存的緩衝管理器
mod_mime_magic (E) 經過讀取部分文件內容自動猜想文件的MIME類型
mod_proxy (E) 提供HTTP/1.1的代理/網關功能支持
mod_proxy_ajp (E) mod_proxy的擴展,提供Apache JServ Protocol支持
mod_proxy_balancer (E) mod_proxy的擴展,提供負載平衡支持
mod_proxy_connect (E) mod_proxy的擴展,提供對處理HTTP CONNECT方法的支持
mod_proxy_ftp (E) mod_proxy的FTP支持模塊
mod_proxy_http (E) mod_proxy的HTTP支持模塊
mod_rewrite (E) 一個基於必定規則的實時重寫URL請求的引擎
mod_so (E) 容許運行時加載DSO模塊
mod_speling (E) 自動糾正URL中的拼寫錯誤
mod_ssl (E) 使用安全套接字層(SSL)和傳輸層安全(TLS)協議實現高強度加密傳輸
mod_suexec (E) 使用與調用web服務器的用戶不一樣的用戶身份來運行CGI和SSI程序
mod_unique_id (E) 爲每一個請求生成惟一的標識以便跟蹤
mod_usertrack (E) 使用Session跟蹤用戶(會發送不少Cookie),以記錄用戶的點擊流
mod_version (E) 提供基於版本的配置段支持
mod_vhost_alias (E) 提供大批量虛擬主機的動態配置支持
說明:以上模塊信息可能會不許因此請以官網爲準。