詳細介紹
Apache HTTP Server(簡稱 Apache)是Apache軟體基金會的一個開放源碼的網頁伺服器,可以在大多數計算機作業系統中運行,由於其多平台和安全性被廣泛使用,是最流行的Web伺服器端軟體之一。它快速、可靠並且可通過簡單的API擴展,將Perl/Python等解釋器編譯到伺服器中。
Apache HTTP伺服器是一個模組化的伺服器,源於NCSAhttpd伺服器,經過多次修改,成為世界使用排名第一的Web伺服器軟體。
它可以運行在幾乎所有廣泛使用的計算機平台上。
Apache源於NCSAhttpd伺服器,經過多次修改,成為世界上最流行的Web伺服器軟體之一。Apache取自“a patchy server”的讀音,意思是充滿補丁的伺服器,因為它是自由軟體,所以不斷有人來為它開發新的功能、新的特性、修改原來的缺陷。Apache的特點是簡單、速度快、性能穩定,並可做代理伺服器來使用。
本來它只用於小型或試驗Internet網路,後來逐步擴充到各種Unix系統中,尤其對Linux的支持相當完美。Apache有多種產品,可以支持SSL技術,支持多個虛擬主機。Apache是以進程為基礎的結構,進程要比執行緒消耗更多的系統開支,不太適合於多處理器環境,因此,在一個Apache Web站點擴容時,通常是增加伺服器或擴充群集節點而不是增加處理器。到目前為止Apache仍然是世界上用的最多的Web伺服器,市場占有率達60%左右。世界上很多著名的網站如Amazon、Yahoo!、W3 Consortium、Financial Times等都是Apache的產物,它的成功之處主要在於它的原始碼開放、有一支開放的開發隊伍、支持跨平台的套用(可以運行在幾乎所有的Unix、Windows、Linux系統平台上)以及它的可移植性等方面。
Apache的誕生極富有戲劇性。當NCSAWWW伺服器項目停頓後,那些使用NCSAWWW伺服器的人們開始交換他們用於該伺服器的補丁程式,他們也很快認識到成立管理這些補丁程式的論壇是必要的。就這樣,誕生了Apache Group,後來這個團體在NCSA的基礎上創建了Apache。
Apacheweb伺服器軟體擁有以下特性:
1.支持最新的HTTP/1.1通信協定
2.擁有簡單而強有力的基於檔案的配置過程
3.支持通用網關接口
4.支持基於IP和基於域名的虛擬主機
5.支持多種方式的HTTP認證
6.集成Perl處理模組
7.集成代理伺服器模組
8.支持實時監視伺服器狀態和定製伺服器日誌
9.支持伺服器端包含指令(SSI)
10.支持安全Socket層(SSL)
11.提供用戶會話過程的跟蹤
12.支持FastCGI
13.通過第三方模組可以支持JavaServlets
如果你準備選擇Web伺服器,毫無疑問Apache是你的最佳選擇。
相關模組
1.SSO Module - LemonLDAP
LemonLdap 是 Apache 的一個實現了 Web SSO 的模組,可處理超過 20 萬的用戶。
2.並發限制模組 - limitipconn
limitipconn 是一個 Apache 的模組,用來限制每個 IP 的並發連線數。支持 Apache 1.x 和 2.x。
3.日誌監控模組
Apache Live Log 是一個 Perl 編寫的模組,可以在瀏覽器上直接實時的通過 Ajax 技術瀏覽和監控 Apache 的 日誌檔案。
4.負載均衡模組
mod_backhand 是一個Apache 的負載平衡模組 。它定義了每個請求的HTTP重定向在一個異構的Apache伺服器群集。每個請求的處理,並貫穿了一套“候選人的職能” ,以確定哪些伺服器是最適合的回應。請求然後代理到該伺服器。設施已到位,讓你寫您自己的動態載入決策算法。一切有關的要求和當前可用的資源可用於決策過 程。
5.圖像處理模組
mod_gfx 是一個對圖像進行即時處理的 Apache 模組,提供很多靈活的接口,包括:
Resizing
Resampling
Watermarking
Cropping
以後還將添加如下功能:
Add Text
Rotate
Draw Polygons
6. 壓縮模組
mod-gzip-disk 是一個使用磁碟進行存儲預壓縮頁面的 Apache 模組,與 mod-gzip 不同的是不需要每次請求的時候重新壓縮。
使用方法:
gunzip -c mod_gzip_disk-0.5.tar.gz | tar -xvpf -
cd mod_gzip_disk
sudo make module
7. 音樂模組
mod_musicindex 是一個 Apache 用來處理音頻檔案的模組,類似 Perl 的 Apache::MP3,支持音頻格式包括:MP3, Ogg Vorbis, FLAC, or MP4 / AAC ,可根據不同的音頻屬性進行排序列表、線上播放、下載、構建播放列表和搜尋等,提供 RSS 和 Podcast 輸出,支持多 CSS 和包下載。
8.LDAP 認證模組
LDAP 是輕量級目錄訪問協定,基於 X.500 標準,但更簡單,並可根據需要進行定製。mod_psldap 是 Apache 用來執行 LDAP 認證和授權的模組。同時可通過 Web 界面進行簡單的 LDAP 管理
9.頻寬限制模組
mod_cband 是一個用來限制請求占用頻寬的 Apache 模組。
10.CGI V8 引擎包
v8cgi 是一個很小的 C ++ 和 JS 檔案集合,允許開發者在伺服器端使用 JS 的模組,基本功能包括:IO, GD, MySQL, Sockets, templates, FastCGI and Apache module.
發展歷史
Apache 起初由伊利諾伊大學香檳分校的國家超級電腦套用中心(NCSA)開發。此後,Apache 被開放原始碼團體的成員不斷的發展和加強。Apache 伺服器擁有牢靠可信的美譽,已用在超過半數的網際網路站中-特別是幾乎所有最熱門和訪問量最大的網站。
Apache最開始是Netscape網頁伺服器之外的開放原始碼選擇。後來它開始在功能和速度超越其他的基於Unix的HTTP伺服器。1996年4月以來,Apache一直是Internet上最流行的HTTP伺服器: 1999年5月它在 57% 的網頁伺服器上運行;到了2005年7月這個比例上升到了69%。在2005年11月的時候達到接近70%的市占率,不過隨著擁有大量域名數量的主機域名商轉換為微軟IIS平台,Apache市占率近年來呈現些微下滑。而Google自己的網頁伺服器平台GWS推出後,加上Lighttpd這 個輕量化網頁伺服器軟體使用的網站慢慢增加,反應在整體網頁伺服器市占率上,根據netcraft在2007年7月的最新統計數據,Apache的市占率已經降為52.65%,8月時又滑落到50.92%。儘管如此,它仍舊是現階段網際網路市場上,市占率最高的網頁伺服器軟體。
廣泛的解釋是(也是最顯而易見的):這個名字來自這么一個事實:當Apache在1995年初開發的時候,它是由當時最流行的HTTP伺服器NCSA HTTPd 1.3 的代碼修改而成的,因此是“一個修補的(a patchy)”伺服器。然而在伺服器官方網站的FAQ中是這么解釋的:“‘Apache’這個名字是為了紀念名為Apache(印地語)的美洲印第安人土著的一支,眾所周知他們擁有高超的作戰策略和無窮的耐性”。無論如何,Apache 2.x 分支不包含任何 NCSA 的代碼。
安裝配置啟用
Apache 的安裝無外乎兩種方式:原始碼安裝和二進制包安裝。這兩種安裝類型各有特色,二進制包安裝不需要編譯,而原始碼安裝則需要先配置編譯再安裝,二進制包安裝在一個固定的位置下,選擇固定的模組,而原始碼安裝則可以讓你選擇安裝路徑,選擇你想要的模組。本文主要介紹二進制DEB包安裝方式(此方法只適用於Debian GNU/Linux 及其衍生版)。
系統:GNU/Linux Debian/etch
Apache當前版本: 2.4.2
1、安裝:
使用以下命令安裝:
tony@tonybox:~$sudo aptitude update aptitude install apache2 apache2-utils
其中apache2-utils提供了我們在配置維護過程中非常有用的一些工具
安裝完成後,可以使用下面的命令啟動Apache 服務:
tony@tonybox:~$ sudo /etc/init.d/apache2 start
停止Apache服務則是:
tony@tonybox:~$ sudo /etc/init.d/apache2 stop
也可以直接用 kill 命令強制殺死apache2進程
tony@tonybox:~$ sudo killall apache2
如有需要, 可以通過rcconf來控制是否在系統啟動時載入Apache 服務
啟動完成後打開瀏覽器, 使用URL http://localhost/ 來訪問已經啟動的Apache伺服器, 伺服器將會跳轉到 http://localhost/apache2-default/, 向瀏覽器返回一個Apache安裝成功的頁面。
註: 這取決於/etc/apache2/sites-available/default 配置檔案中, 是否取消了
RedirectMatch ^/$ /apache2-default/
行的注釋
2、 配置檔案說明
在Debian下, 安裝完成後, 軟體包為我們提供的配置檔案位於/etc/apache2目錄下:
tony@tonybox:/etc/apache2$ ls -l
total 72
-rw-r--r-- 1 root root 12482 2006-01-16 18:15 apache2.conf
-rw-r--r-- 1 root root 748 2006-01-16 18:05 envvars
-rw-r--r-- 1 root root 268 2006-06-30 13:56 httpd.conf
-rw-r--r-- 1 root root 12441 2006-01-16 18:15 magic
-rw-r--r-- 1 root root 10 2006-06-30 13:56 ports.conf
-rw-r--r-- 1 root root 2266 2006-01-16 18:15 README
drwxr-xr-x 2 root root 4096 2006-01-16 18:15ssl
其中
apache2.conf
為apache2伺服器的主配置檔案, 查看此配置檔案, 你會發現以下內容
# Include module configuration:
Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf
# Include all the user configurations:
Include /etc/apache2/httpd.conf
# Include ports listing
Include /etc/apache2/ports.conf
# Include generic snippets of statements
Include /etc/apache2/conf.d/[^.#]*
由此可見, apache2 根據配置功能的不同, 對配置檔案進行了分割, 這樣更利於管理
conf.d
下為配置檔案的附加片斷,默認情況下, 僅提供了 charset 片斷,
tony@tonybox:/etc/apache2/conf.d$ cat charset
AddDefaultCharset UTF-8
如有需要我們可以將默認編碼修改為 GB2312, 即檔案的內容為: AddDefaultCharset GB2312
httpd.conf
是個空檔案
magic
檔案中包含的是有關mod_mime_magic模組的數據, 一般不需要修改它。
ports.conf
則為伺服器監聽IP和連線埠設定的配置檔案,
tony@tonybox:/etc/apache2$ cat ports.conf
Listen 80
mods-available
目錄下是一些。conf和。load 檔案, 為系統中可以使用的載入各種模組的配置檔案, 而mods-enabled目錄下則是指向這些配置檔案的符號連線, 從配置檔案apache2.conf 中可以看出, 系統通過mods-enabled目錄來載入模組, 也就是說, 系統僅通過在此目錄下創建了符號連線的mods-available 目錄下的配置檔案來載入模組。同時系統還提供了兩個命令 a2enmod 和 a2dismod用於維護這些符號連線。這兩個命令由 apache2-common 包提供。命令各式也非常簡單: a2enmod [module] 或 a2dismod [module]
sites-available
目錄下為配置好的站點的配置檔案, sites-enabled 目錄下則是指向這些配置檔案的符號連線, 系統通過這些符號連線來起用站點 sites-enabled目錄下的符號連線附有一個數字前綴, 如000-default, 這個數字用於決定啟動順序, 數字越小, 啟動優先權越高。 系統提供了兩個命令 a2ensite 和 a2dissite 用於維護這些符號連線。這兩個命令由 apache2-common 包提供。
/var/www
默認情況下將要發布的網頁檔案應該置於/var/www目錄下,這一默認值可以同過主配置檔案中的DocumentRoot 選項修改。
注意:如果你在是windows下套用Apache伺服器,並且已經安裝IIS,那么在安裝Apache時請注意給Apache換個連線埠來監聽比如8080,否則Apache占用的連線埠會和IIS衝突,造成Apache伺服器不能正常啟動。
3.啟用SSL讓apache更安全
apache加密TCP/IP網路產品的標準是SSL ,對於Internet上普遍使用的超文本傳輸協定(HTTP)而言,其加密後的協定稱為 HTTPS,預設採用443連線埠。HTTPS數據是加密以後傳輸的,因此能有效保護在網路上傳輸的個人隱私信息。
對apache配置支持SSL需要經過如下的操作:
第一步:下載所需的軟體並解開到 /usr/local/src 目錄
Apache 1.3.24
Mod_ssl 2.8.8-1.3.24
Openssl-0.9.6c
每個 mod_ssl 的版本和特定的 Apache 版本有關,因此要下載相對應的 mod_ssl 版本。
第二步:編譯和安裝
安裝 OpenSSL 到 /usr/local/ssl: # pwd
/usr/local/src/openssl-0.9.6c
# ./config
# make
# make test
# make install
安裝 mod_ssl,編譯進 Apache 的源碼樹: # pwd
/usr/local/src/mod_ssl-2.8.8-1.3.24
# ./configure --with-apache=/usr/local/src/apache_1.3.24 \
--with-ssl=/usr/local/ssl
以 DSO 方式編譯 Apache: # pwd
/usr/local/src/apache_1.3.24
# ./configure --prefix=/usr/local/apache --enable-rule=SHARED_CORE \
--enable-module=ssl --enable-shared=ssl
# make
創建 SSL 證書,證書需要從商業的認證權威機構或者從內部的 CA 得到。
執行下面的步驟生成證書: # pwd
/usr/local/src/apache_1.3.24
# make certificate TYPE=custom
生成證書時會提示兩遍下面的信息:<> 內為示範數據。
第一遍: Country Name (2-letters)
State or Province Name
Locality Name
Organization Name
Organizational Unit Name
Common Name
Email Address
Certificate Validity <365>
第一遍會產生一個用於測試的 CA。"Common Name" 可以為任意文本。第二遍 Country Name (2-letters)
State or Province Name
Locality Name
Organization Name
Organizational Unit Name
Common Name
Email Address
Certificate Validity <365>
第二遍產生的是實際可用的證書,能被商業機構或者內部 CA 認證, "Common Name" 為 Web 伺服器的主機名。
安裝並運行 Apache # pwd
/usr/local/src/apache_1.3.24
# make install
啟動 Apache ,並測試 # pwd
/usr/local/apache/bin
# ./apachectl stop
# ./apachectl startssl
在瀏覽器上檢查你的站點正常與否即可,至此即可讓apache支持安全的SSL。
在Apache 1.4以後的版本,我們還可以用以下命令完成服務的完美重啟:
#./apachectl graceful
特點
apache日誌為什麼不記錄百度蜘蛛?這個問題相信很多初學者都基本碰到了,apache日誌默認是不記錄百度蜘蛛、谷歌和各大搜尋引擎的蜘蛛程式的,但只需要修改一個地方就可以解決這個問題
1、打開httpd.conf檔案找到以下部分:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedLogFormat "%h %l %u %t \"%r\" %>s %b" commonLogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
具體有關LogFormat的用法請參照:
2、接著繼續向下移動,找到虛擬主機配置段,也就是VirtualHost段,這個是由自己來配置的。本站的虛擬主機的日誌檔案是這樣設定的:
CustomLog /var/html/faq/logs/linux520-access.log combined如果你想記錄百度蜘蛛的訪問全稱,就按如上部分設定,如果不想記錄百度蜘蛛的頭部分,則如下設定:CustomLog /var/html/faq/logs/linux520-access.log common。
最佳化
性能最佳化
我們在使用Apache作為web伺服器的過程中,只有對Apache伺服器進行適當的最佳化配置,才能讓Apache發揮出更好的性能;再反過來說,如果Apache的配置非常糟糕,Apache可能無法正常為我們服務。因此,針對我們的套用需求對Apache伺服器的配置進行一定的最佳化是必不可少的。
硬體和作業系統
毫無疑問,要想讓Apache伺服器發揮出更好的性能,首先必須得保證硬體和作業系統能夠滿足Apache伺服器的負載需要。如果由於硬體和作業系統原因導致Apache的運行性能受到較大的影響,即使對Apache伺服器本身最佳化配置得再好也無濟於事,「想要馬兒跑得好,又想馬兒不吃草」當然是行不通的。
一般而言,影響web伺服器性能的最大的因素是記憶體。當記憶體不足時,作業系統將會使用記憶體交換機制。記憶體交換機制,簡而言之,就是將本地磁碟的一部分作為虛擬記憶體空間供程式使用。web伺服器想要更好地所有用戶服務,則其應該永遠不要使用記憶體交換機制,否則其性能將會受到較大的影響。不僅如此,由於伺服器使用了記憶體交換機制所產生的「滯後」,「滯後」的直接後果就是讓用戶感覺網站的訪問速度很慢,此時用戶極有可能會點擊【停止】或者【刷新】,如果用戶不停地點擊【刷新】,將會給伺服器帶來更大的負載,從而進入一個惡性循環。
對於Apache伺服器的記憶體需求量,我們可以通過作業系統相關命令查看伺服器正常運行時每個為用戶服務的進程(或執行緒)平均占用多少的記憶體,再根據需求或者相關數據得出單個伺服器所要支撐的最大並發負載數,從而計算出Apache伺服器的記憶體需求量。為Apache伺服器分配的記憶體最好能夠大於計算得來的需求量。
除此之外,硬體最好能夠保證有足夠快的CPU、足夠快的網卡(足夠的頻寬)、足夠快足夠大的硬碟。這裡的「足夠」是指能夠滿足web套用的實際需求。
至於作業系統,最好能夠選擇一個有利於伺服器運行的最新最穩定的版本並安裝好了對應的補丁程式。畢竟,隨著時代的發展,作業系統也在不斷進步。許多作業系統廠商都提供了可以顯著改善性能的TCP協定棧和執行緒庫。例如,如果你的作業系統支持sendfile()系統調用,Apache 2.x伺服器可以使用sendfile()從而更快地傳送靜態內容並且占用較少的CPU時間。
最佳化Apache配置
1.儘量使用IP位址代替域名
在Apache的配置檔案中,有許多可以針對具體請求來源進行相應操作的配置,例如 allow from 365mini.com表示允許域名為365mini.com的用戶訪問。在這種情況下,如果我們知道該域名或主機名與某個IP位址一一對應,則最好使用具體的IP位址來代替域名。否則Apache伺服器將要進行多次DNS查詢來確定該域名或主機名所對應的IP位址。
注意:可能存在一些例外情況,例如一個IP位址對應多個域名,或者一個域名對應多個IP位址或者對應一個變化的IP位址,此時仍然要使用域名或主機名。一般而言,只有域名或主機名與IP位址具有一一對應關係時,才使用IP位址來代替域名。請根據實際情況作出選擇。 |
2.啟用FollowSymLinks選項
當Apache處理請求時,如果對應的請求檔案所在目錄沒有啟用FollowSymLinks選項,或使用了SymLinksIfOwnerMatch選項,Apache就必須執行額外的系統調用來驗證符號連線的安全性。檔案名稱的每一個組成部分都需要一次額外的調用。因此,如果在安全性允許的情況下,為了得到更加良好的運行性能,應當放棄對符號連線的保護,在所有地方都設定FollowSymLinks,並放棄使用SymLinksIfOwnerMatch。
#啟用FollowSymLinks選項,如果子目錄沒有額外的設定,將會繼承該設定 <Directory /> Options FollowSymLinks </Directory> |
3.禁用AllowOverride
如果Apache的配置檔案中允許了AllowOverride指令,則Apache在處理每個請求路徑時,都會嘗試對檔案路徑的每一個組成部分都打開該目錄下的.htaccess檔案。
例如,當用戶請求訪問伺服器上的/static/test/hello.html,則Apache將會嘗試打開/static/test/.htaccess、/static/.htaccess、/.htaccess三個檔案。從而影響伺服器的運行性能。
因此,如果當前用戶擁有Apache配置檔案的編輯許可權,建議將.htaccess檔案中的配置內容直接寫在Apache對應的配置檔案(一般為httpd.conf)中,並禁用AllowOverride。
#禁用AllowOverride <Directory /> AllowOverride None </Directory> |
當然,如果用戶不具備Apache配置檔案的編輯許可權,又希望能夠對站點進行相應的管理設定,就需要管理員允許AllowOverride,以便於用戶編寫自己的.htaccess檔案。
4.儘量不使用通配符
在Apache的配置檔案中,我們可以指定每個目錄下的默認歡迎頁面,例如:
#以內容協商的方式指定歡迎頁面 <Directory /> DirectoryIndex index </Directory> |
使用上述配置後,當訪問當前目錄時,Apache將會在當前目錄下查找名稱形如index.*的檔案,並根據客戶端期望回響的類型自動返回一個最匹配的請求檔案(即內容協商)。
不過,這樣做將會導致一點性能損失,儘管內容協商的好處大於性能的損失,如果你仍然在意這一點性能損失的話,建議你不要使用上述通配符形式的配置,而是根據自己的需要,指定一個完整的index.*檔案列表。
#指定歡迎頁面 <Directory /> DirectoryIndex index.html index.cgi index.pl </Directory> |
使用上述配置後,Apache將按照從左到右的先後順序依次查找上述三個名稱的檔案,並回響最先找到的那個檔案。
5.選擇適當的多路處理模組(MPM)
由於多路處理模組的相關內容較多,請參考下面的 修改最大並發連線數。
6.修改Apache的並發連線配置
關於修改Apache的並發連線配置的具體內容,請同樣參考請參考下面的 修改最大並發連線數。
並發連線數
Apache是一個跨平台的web伺服器,由於其簡單高效、穩定安全的特性,被廣泛套用於計算機技術的各個領域。現在,Apache憑藉其龐大的用戶數,已成為用戶數排名第一的web伺服器。
儘管如此,在實際的生產環境中,我們仍然不可能直接使用默認配置的Apache來充當伺服器。畢竟,為了更充分合理地利用Apache伺服器,我們都應該根據自己的實際需要對Apache的默認配置作出一些必要的調整。而針對Apache的最佳化配置過程中,修改Apache的最大並發連線數 就顯得尤為重要。
在修改Apache的最大並發連線數 之前,我們需要預先了解一些Apache的相關知識。
眾所周知,Apache是一個跨平台的、採用模組化設計的伺服器。為了應對不同的平台和不同的環境產生的各種不同的需求,也為了在具體的平台或環境下達到最佳的效果,Apache在web伺服器的基礎功能方面(連線埠綁定、接收請求等)也同樣採用了模組化設計,這個Apache的核心模組就叫做多路處理模組(Multi-ProcessingModule,簡稱MPM)。
Apache針對不同的作業系統提供了多個不同的MPM模組,例如:mpm_beos、mpm_event、mpm_netware、mpmt_os2、mpm_prefork、mpm_winnt、mpm_worker。如果條件允許,我們可以根據實際需求將指定的MPM模組編譯進我們自己的Apache中(Apache的源碼是開放的,允許用戶自行編譯)。不過,如果在編譯時我們沒有選擇,Apache將按照如下表格根據不同的作業系統自行選擇對應的MPM模組,這也是Apache針對不同平台推薦使用的MPM模組。
不同作業系統上默認的MPM模組 | ||
作業系統 | MPM模組 | 描述 |
Windows | mpm_winnt | 不用介紹了吧:) |
Unix/Linux | mpm_prefork | 不用介紹了吧:) |
BeOS | mpm_beos | 由Be公司開發的一種多媒體作業系統,官方版已停止更新。 |
Netware | mpm_netware | 由NOVELL公司推出的一種網路作業系統 |
OS/2 | mpmt_os2 | 一種最初由微軟和IBM共同開發的作業系統,現由IBM單獨開發(微軟放棄OS/2,轉而開發Windows) |
mpm_event模組可以看作是mpm_worker模組的一個變種,不過其具有實驗性質,一般不推薦使用。
當然,Apache在其官方網站上也提供了根據不同作業系統已經編譯好對應MPM模組的成品Apache。你可以點擊此處進入Apache官方網站下載。
此外,如果我們想要知道某個Apache內部使用的是何種MPM模組,我們可以以命令行的方式進入Apache安裝目錄\bin,然後鍵入命令httpd-l,即可查看到當前Apache內部使用的何種MPM模組。
使用httpd-l命令查看編譯模組
由於在平常的開發工作中,BeOS、NetWare、OS/2等作業系統並不常見,這裡我們主要針對Windows和Unix/Linux作業系統上的MPM模組進行講解。在Windows和Unix/Linux作業系統上,MPM模組主要有mpm_winnt、mpm_prefork、mpm_worker三種。
mpm_prefork模組
mpm_prefork模組主要套用於Unix/Linux平台的Apache伺服器,其主要工作方式是:當Apache伺服器啟動後,mpm_prefork模組會預先創建多個子進程(默認為5個),當接收到客戶端的請求後,mpm_prefork模組再將請求轉交給子進程處理,並且每個子進程同時只能用於處理單個請求。如果當前的請求數將超過預先創建的子進程數時,mpm_prefork模組就會創建新的子進程來處理額外的請求。Apache總是試圖保持一些備用的或者是空閒的子進程用於迎接即將到來的請求。這樣客戶端的請求就不需要在接收後等候子進程的產生。
由於在mpm_prefork模組中,每個請求對應一個子進程,因此其占用的系統資源相對其他兩種模組而言較多。不過mpm_prefork模組的優點在於它的每個子進程都會獨立處理對應的單個請求,這樣,如果其中一個請求出現問題就不會影響到其他請求。同時,mpm_prefork模組可以套用於不具備執行緒安全的第三方模組(比如PHP的非執行緒安全版本),且在不支持執行緒調試的平台上易於調試。此外,mpm_prefork模組還具有比mpm_prefork模組更高的穩定性。
mpm_worker模組
mpm_worker模組也主要套用於Unix/Linux平台的Apache伺服器,它可以看作是mpm_prefork模組的改進版。mpm_worker模組的工作方式與mpm_prefork模組類似。不過,由於處理相同請求的情況下,基於進程(例如mpm_prefork)比基於執行緒的處理方式占用的系統資源要多。因此,與mpm_prefork模組不同的是,mpm_worker模組會讓每個子進程創建固定數量的服務執行緒和一個監聽執行緒,並讓每個服務執行緒來處理客戶端的請求,監聽執行緒用於監聽接入請求並將其傳遞給服務執行緒處理和應答。Apache總是試圖維持一個備用或是空閒的服務執行緒池。這樣,客戶端無須等待新執行緒或新進程的建立即可得到處理。
與mpm_prefork模組相比,mpm_worker模組可以進一步減少系統資源的開銷。再加上它也使用了多進程,每個進程又有多個執行緒,因此它與完全基於執行緒的處理方式相比,又增加了一定的穩定性。
mpm_winnt模組
mpm_winnt模組是專門針對Windows作業系統而最佳化設計的MPM模組。它只創建一個單獨的子進程,並在這個子進程中輪流產生多個執行緒來處理請求。
修改MPM模組配置
在對Apache的MPM模組具備一定了解後,我們就可以針對不同的MPM模組來修改Apache的最大並發連線數 配置了。
1、啟用MPM模組配置檔案
在Apace安裝目錄/conf/extra目錄中有一個名為httpd-mpm.conf的配置檔案。該檔案主要用於進行MPM模組的相關配置。不過,在默認情況下,Apache的MPM模組配置檔案並沒有啟用。因此,我們需要在httpd.conf檔案中啟用該配置檔案,如下所示:
2、 修改MPM模組配置檔案中的相關配置
在啟動MPM模組配置檔案後,我們就可以使用文本編輯器打開該配置檔案,我們可以看到,在該配置檔案中有許多<IfModule>配置節點,只有Apache使用對應MPM模組時,對應配置才會生效
此時,我們就需要根據當前Apache伺服器所使用的MPM模組,來修改對應<IfModule>節點下的參數配置。首先,我們來看看 mpm_winnt模組下的默認配置:
對應的配置參數作用如下:
參數名稱 | 參數作用 |
ThreadsPerChild | 每個子進程的最大並發執行緒數。 |
MaxRequestsPerChild | 每個子進程允許處理的請求總數。 (如果累計處理的請求數超過該值,該子進程將會結束(然後根據需要確定是否創建新的子進程),該值設為0表示不限制請求總數(子進程永不結束)。該參數建議設為非零的值,可以帶來以下兩個好處: 1.可以防止程式中可能存在的記憶體泄漏無限進行下去,從而耗盡記憶體。 2.給進程一個有限壽命,從而有助於當伺服器負載減輕的時候減少活動進程的數量。 ) |
注意:在以上涉及到統計請求數量的參數中,對於KeepAlive的連線,只有第一個請求會被計數。
接著,我們再來看看 mpm_perfork模組和 mpm_worker模組下的默認配置:
對應的配置參數作用如下表:
參數名稱 | 參數作用 |
StartServers | 啟動Apache時創建的子進程數。 |
MinSpareServers | 處於空閒狀態的最小子進程數。(所謂空閒子進程是指沒有正在處理請求的子進程。如果當前空閒子進程數少於MinSpareServers,那么Apache將以最大每秒一個的速度產生新的子進程。只有在非常繁忙機器上才需要調整這個參數。此值不宜過大。) |
MaxSpareServers | 處於空閒狀態的最大子進程數。(只有在非常繁忙機器上才需要調整這個參數。此值不宜過大。如果你將該指令的值設定為比MinSpareServers小,Apache將會自動將其修改成MinSpareServers+1。) |
MaxClients | 允許同時連線的最大請求數量。 1、任何超過MaxClients限制的請求都將進入等待佇列,直到達到ListenBacklog指令限制的最大值為止 2、對於非執行緒型的MPM(也就是mpm_prefork),MaxClients表示可以用於處理客戶端請求的最大子進程數量,默認值是256。要增大這個值,你必須同時增大ServerLimit。 3、對於執行緒型或者混合型的MPM(也就是mpm_beos或mpm_worker),MaxClients表示可以用於處理客戶端請求的最大執行緒數量。執行緒型的mpm_beos的默認值是50。對於混合型的MPM默認值是16(ServerLimit)乘以25(ThreadsPerChild)的結果。因此要將MaxClients增加到超過16個進程才能提供的時候,你必須同時增加ServerLimit的值。 |
MinSpareThreads | 處於空閒狀態的最小執行緒數。 (註:不同的MPM對這個指令的處理是不一樣的:mpm_worker的默認值是75。這個MPM將基於整個伺服器監視空閒執行緒數。如果伺服器中總的空閒執行緒數太少,子進程將產生新的空閒執行緒。mpm_netware的默認值是10。既然這個MPM只運行單獨一個子進程,此MPM當然亦基於整個伺服器監視空閒執行緒數。mpm_beos和mpmt_os2的工作方式與mpm_netware差不多,mpm_beos的默認值是1;mpmt_os2的默認值是5。) |
MaxSpareThreads | 處於空閒狀態的最大執行緒數。 (註:不同的MPM對這個指令的處理是不一樣的:mpm_worker的默認值是250。這個MPM將基於整個伺服器監視空閒執行緒數。如果伺服器中總的空閒執行緒數太多,子進程將殺死多餘的空閒執行緒。mpm_netware的默認值是100。既然這個MPM只運行單獨一個子進程,此MPM當然亦基於整個伺服器監視空閒執行緒數。mpm_beos和mpmt_os2的工作方式與mpm_netware差不多,mpm_beos的默認值是50;mpmt_os2的默認值是10。) |
備註:ServerLimit表示Apache允許創建的最大進程數。值得注意的是,Apache在編譯時內部有一個硬限制ServerLimit20000(對於mpm_prefork模組為ServerLimit200000)。你不能超越這個限制。 使用這個指令時要特別當心。如果將ServerLimit設定成一個高出實際需要許多的值,將會有過多的共享記憶體被分配。如果將ServerLimit和MaxClients設定成超過系統的處理能力,Apache可能無法啟動,或者系統將變得不穩定。 |
注意:在配置相關參數時,請先保證伺服器具備足夠的硬體性能(例如:CPU、記憶體等)。如果發現自啟動後,隨著伺服器的運行時間增加,伺服器的記憶體占用也隨之增加,可能是程式中出現記憶體泄露,請向下調整參數MaxRequestsPerChild的值以降低記憶體泄露帶來的影響,然後儘快找出程式中的問題之所在。 |
相關替代品
Apache是目前最流行的Web套用伺服器,占據了網際網路套用伺服器70%以上的份額。Apache能取得如此成功並不足為奇:它免費、穩定且性能卓越;但Apache能取得如此佳績的另一個原因是,當時網際網路剛剛興起時,Apache是第一個可用的Web套用伺服器,人們沒有其他的選擇。
不可否認,Apache是一個優秀的全能Web伺服器,但對於那些需要更強大的Web套用伺服器(比如大小、可定製、回響速度、可擴展性等方面)的人而言,Apache明顯不符合他們的要求,尋找Apache的替代者是更好的選擇。
下面所列出的是當前可以替代Apache的幾個熱門Web套用伺服器,他們的特點和適用的套用場景各不相同,但都是針對Apache所不夠擅長的某一方面設計的。
1、Lighttpd
最流行的Apache伺服器替代者,Lighttpd是一個單執行緒的針對大量持續連線做出專門最佳化的Web伺服器(這正是多數高流量網站和應用程式需要的)。眾多的流行Web站點選擇 Lighttpd,包括Youtube、SourceForge和維基百科。Lighttpd支持FastCGI、HTTP伺服器端壓縮、mod-rewrite和其他眾多有用的功能。儘管Lighttpd擁有Apache的絕大多數功能,但它仍然保持輕量級(僅1MB)並且可以與Apache使用相同的配置。
2、Nginx
Nginx是一個來自俄羅斯的流行的Web套用伺服器,它被套用於大量的俄羅斯的高並發站點,俄羅斯的搜尋引擎網站Rambler就是基於Nginx構建的。Nginx對靜態頁面的支持相當出色,輕量且免費。Nginx不支持CGI,但是支持更靈活的FastCGI。PHP5.2及之前的版本比較多的是使用PHP-FPM來管理PHP FastCGI進程。PHP-FPM使用給PHP源碼打補丁後編譯的方式讓新手多少有些難上手,但從PHP 5.3.2開始內置PHP-FPM,只需編譯PHP時啟用PHP-FPM。
3、kangle
kangle web伺服器(簡稱:kangle)是一款跨平台、功能強大、安全穩定、易操作的高性能web伺服器和反向代理伺服器軟體。除此:kangle也是一款專為做虛擬主機研發的web伺服器。實現虛擬主機獨立進程、獨立身份運行。用戶之間安全隔離,一個用戶出問題不影響其他用戶。安全支持php、asp、asp·net、java、ruby等多種動態開發語言。
4、Boa
很多的網站管理員對在硬體配置較低的伺服器上使用輕量級的Boa作為Web伺服器極其信賴。Boa是一個單執行緒的HTTP伺服器,這意味著Boa只能依次完成用戶的請求而不會fork新的進程來處理並發請求。Boa的設計目的是速度和安全,對於運行於單伺服器的流行Web站點而言,Boa是一個好的選擇。
5、Jigsaw
Jigsaw是W3C推出的開源的Web伺服器平台,使用Java語言編寫,可以安裝在有Java運行環境的系統上。做為W3C(World Wide Web Consortium)開發的伺服器產品,其作用主要是對新技術的實現做一個例示,而非一個全功能的商業伺服器產品。不過就Jigsaw 2.0版本而言,它的功能還是超過了Web伺服器的平均水平。最重要的是,它體現了未來HTTP協定和基於對象的Web伺服器技術的發展。如果你希望你的平台支持所有下一代技術,Jigsaw是一個好的選擇。
以上所提到的四個Apache Web伺服器的替代者只是眾多優秀套用伺服器產品的一部分。
版本發布
2013年07月18日,Apache HTTP Server 2.4.6 發布。
2013年07月12日,Apache HTTP Server 2.4.5 發布。
2012年08月18日,Apache HTTP Server 2.4.3 發布。
2012年08月23日 ,Apache HTTP Server 2.2.23 發布。
2013年02月25日 ,Apache HTTP Server 2.4.4 發布。
2013年11月25日 ,Apache HTTP Server 2.4.7 發布。
2014年03月17日 ,Apache 2.4.9 GA 正式發布。
錯誤日誌
這是一個非常普遍的現象,檢查錯誤方法:進入cmd 然後進入 Apache安裝目錄(具體為你自己的安裝目錄)\bin>httpd.exe -w -n “Apache2″ -k start