複製鏈接
請複製以下鏈接發送給好友

Apache

(Web服務器軟件)

鎖定
[1]  Apache(音譯為阿帕奇)是世界使用排名第一的Web服務器軟件。它可以運行在幾乎所有廣泛使用的計算機平台上,由於其跨平台和安全性被廣泛使用,是最流行的Web服務器端軟件之一。它快速、可靠並且可通過簡單的API擴充,將Perl/Python解釋器編譯到服務器中。
中文名
阿帕奇
外文名
Apache HTTP Server
類    別
網頁服務器軟件
軟件許可
Apache License
兼容性
LINUX系統,Windows

Apache詳細介紹

Apache HTTP Server(簡稱Apache)是Apache軟件基金會的一個開放源碼的網頁服務器,可以在大多數計算機操作系統中運行,由於其跨平台和安全性被廣泛使用,是最流行的Web服務器端軟件之一。它快速、可靠並且可通過簡單的API擴展,將Perl/Python等解釋器編譯到服務器中。 [2] 
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。
Apache Server配置界面 Apache Server配置界面
Apacheweb服務器軟件擁有以下特性:
1.支持最新的HTTP/1.1通信協議
2.擁有簡單而強有力的基於文件的配置過程
4.支持基於IP和基於域名的虛擬主機
5.支持多種方式的HTTP認證
6.集成Perl處理模塊
7.集成代理服務器模塊
8.支持實時監視服務器狀態和定製服務器日誌
9.支持服務器端包含指令(SSI)
10.支持安全Socket層(SSL)
11.提供用户會話過程的跟蹤
12.支持FastCGI
13.通過第三方模塊可以支持JavaServlets
如果你準備選擇Web服務器,毫無疑問Apache是你的最佳選擇。

Apache相關模塊

1.SSO Module - LemonLDAP [1] 
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 和 C 文件集合,允許開發者在服務器端使用 JS 的模塊,基本功能包括:IO, GD, MySQL, Sockets, templates, FastCGI and Apache module.

Apache發展歷史

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 的代碼。 [2] 

Apache安裝配置啓用

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
第一遍會產生一個用於測試的 CA。"Common Name" 可以為任意文本。第二遍 Country Name (2-letters)
State or Province Name
Locality Name
Organization Name
Organizational Unit Name
Common Name
Email Address
Certificate Validity
第二遍產生的是實際可用的證書,能被商業機構或者內部 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日誌為什麼不記錄百度蜘蛛?這個問題相信很多初學者都基本碰到了,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優化

Apache性能優化

我們在使用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選項,如果子目錄沒有額外的設置,將會繼承該設置
Options FollowSymLinks
3.禁用AllowOverride
如果Apache的配置文件中允許了AllowOverride指令,則Apache在處理每個請求路徑時,都會嘗試對文件路徑的每一個組成部分都打開該目錄下的.htaccess文件。
例如,當用户請求訪問服務器上的/static/test/hello.html,則Apache將會嘗試打開/static/test/.htaccess、/static/.htaccess、/.htaccess三個文件。從而影響服務器的運行性能。
因此,如果當前用户擁有Apache配置文件的編輯權限,建議將.htaccess文件中的配置內容直接寫在Apache對應的配置文件(一般為httpd.conf)中,並禁用AllowOverride。
#禁用AllowOverride
AllowOverride None
當然,如果用户不具備Apache配置文件的編輯權限,又希望能夠對站點進行相應的管理設置,就需要管理員允許AllowOverride,以便於用户編寫自己的.htaccess文件。
4.儘量不使用通配符
在Apache的配置文件中,我們可以指定每個目錄下的默認歡迎頁面,例如:
#以內容協商的方式指定歡迎頁面
DirectoryIndex index
使用上述配置後,當訪問當前目錄時,Apache將會在當前目錄下查找名稱形如index.*的文件,並根據客户端期望響應的類型自動返回一個最匹配的請求文件(即內容協商)。
不過,這樣做將會導致一點性能損失,儘管內容協商的好處大於性能的損失,如果你仍然在意這一點性能損失的話,建議你不要使用上述通配符形式的配置,而是根據自己的需要,指定一個完整的index.*文件列表。
#指定歡迎頁面
DirectoryIndex index.html index.cgi index.pl
使用上述配置後,Apache將按照從左到右的先後順序依次查找上述三個名稱的文件,並響應最先找到的那個文件。
5.選擇適當的多路處理模塊(MPM)
由於多路處理模塊的相關內容較多,請參考下面的修改最大併發連接數
6.修改Apache的併發連接配置
關於修改Apache的併發連接配置的具體內容,請同樣參考請參考下面的修改最大併發連接數

Apache併發連接數

Apache是一個跨平台的web服務器,由於其簡單高效、穩定安全的特性,被廣泛應用於計算機技術的各個領域。現在,Apache憑藉其龐大的用户數,已成為用户數排名第一的web服務器。
儘管如此,在實際的生產環境中,我們仍然不可能直接使用默認配置的Apache來充當服務器。畢竟,為了更充分合理地利用Apache服務器,我們都應該根據自己的實際需要對Apache的默認配置作出一些必要的調整。而針對Apache的優化配置過程中,修改Apache的最大併發連接數 [3]  就顯得尤為重要。
在修改Apache的最大併發連接數 [3]  之前,我們需要預先了解一些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的最大併發連接數 [3]  配置了。
1、啓用MPM模塊配置文件
在Apace安裝目錄/conf/extra目錄中有一個名為httpd-mpm.conf的配置文件。該文件主要用於進行MPM模塊的相關配置。不過,在默認情況下,Apache的MPM模塊配置文件並沒有啓用。因此,我們需要在httpd.conf文件中啓用該配置文件,如下所示:
#Server-poolmanagement(MPMspecific)


Includeconf/extra/httpd-mpm.conf(去掉該行前面的註釋符號"#")
2、 修改MPM模塊配置文件中的相關配置
在啓動MPM模塊配置文件後,我們就可以使用文本編輯器打開該配置文件,我們可以看到,在該配置文件中有許多配置節點,只有Apache使用對應MPM模塊時,對應配置才會生效
此時,我們就需要根據當前Apache服務器所使用的MPM模塊,來修改對應節點下的參數配置。首先,我們來看看mpm_winnt模塊下的默認配置:
#由於mpm_winnt模塊只會創建1個子進程,因此這裏對單個子進程的參數設置就相當於對整個Apache的參數設置<IfModulempm_winnt_module>


ThreadsPerChild150#推薦設置:小型網站=1000中型網站=1000~2000大型網站=2000~3500
MaxRequestsPerChild0#推薦設置:小=10000中或大=20000~100000


</IfModule>
對應的配置參數作用如下:
參數名稱
參數作用
ThreadsPerChild
每個子進程的最大併發線程數。
MaxRequestsPerChild
每個子進程允許處理的請求總數。
(如果累計處理的請求數超過該值,該子進程將會結束(然後根據需要確定是否創建新的子進程),該值設為0表示不限制請求總數(子進程永不結束)。該參數建議設為非零的值,可以帶來以下兩個好處:
1.可以防止程序中可能存在的內存泄漏無限進行下去,從而耗盡內存。
2.給進程一個有限壽命,從而有助於當服務器負載減輕的時候減少活動進程的數量。
)
注意:在以上涉及到統計請求數量的參數中,對於KeepAlive的連接,只有第一個請求會被計數。
接着,我們再來看看mpm_perfork模塊和mpm_worker模塊下的默認配置:
#mpm_perfork模塊


<IfModulempm_prefork_module>


StartServers5#推薦設置:小=默認中=20~50大=50~100


MinSpareServers5#推薦設置:與StartServers保持一致


MaxSpareServers10#推薦設置:小=20中=30~80大=80~120


MaxClients150#推薦設置:小=500中=500~1500大型=1500~3000

MaxRequestsPerChild0#推薦設置:小=10000中或大=10000~500000

(此外,還需額外設置ServerLimit參數,該參數最好與MaxClients的值保持一致。)

</IfModule>
#mpm_worker模塊

<IfModulempm_worker_module>

StartServers2#推薦設置:小=默認中=3~5大=5~10

MaxClients150#推薦設置:小=500中=500~1500大型=1500~3000

MinSpareThreads25#推薦設置:小=默認中=50~100大=100~200

MaxSpareThreads75#推薦設置:小=默認中=80~160大=200~400

ThreadsPerChild25#推薦設置:小=默認中=50~100大型=100~200

MaxRequestsPerChild0#推薦設置:小=10000中或大=10000~50000

(此外,如果MaxClients/ThreadsPerChild大於16,還需額外設置ServerLimit參數,ServerLimit必須大於等於MaxClients/ThreadsPerChild的值。)

</IfModule>
對應的配置參數作用如下表:
參數名稱
參數作用
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相關替代品

Apache是目前最流行的Web應用服務器,佔據了互聯網應用服務器70%以上的份額。Apache能取得如此成功並不足為奇:它免費、穩定且性能卓越;但Apache能取得如此佳績的另一個原因是,當時互聯網剛剛興起時,Apache是第一個可用的Web應用服務器,人們沒有其他的選擇。
不可否認,Apache是一個優秀的全能Web服務器,但對於那些需要更強大的Web應用服務器(比如大小、可定製、響應速度、可擴展性等方面)的人而言,Apache明顯不符合他們的要求,尋找Apache的替代者是更好的選擇。
下面所列出的是當前可以替代Apache的幾個熱門Web應用服務器,他們的特點和適用的應用場景各不相同,但都是針對Apache所不夠擅長的某一方面設計的。
1、Lighttpd
Lighttpd Lighttpd
最流行的Apache服務器替代者,Lighttpd是一個單線程的針對大量持續連接做出專門優化的Web服務器(這正是多數高流量網站和應用程序需要的)。眾多的流行Web站點選擇Lighttpd,包括Youtube、SourceForge和維基百科。Lighttpd支持FastCGI、HTTP服務器端壓縮、mod-rewrite和其他眾多有用的功能。儘管Lighttpd擁有Apache的絕大多數功能,但它仍然保持輕量級(僅1MB)並且可以與Apache使用相同的配置。
2、Nginx
Nginx 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 Boa
很多的網站管理員對在硬件配置較低的服務器上使用輕量級的Boa作為Web服務器極其信賴。Boa是一個單線程HTTP服務器,這意味着Boa只能依次完成用户的請求而不會fork新的進程來處理併發請求。Boa的設計目的是速度和安全,對於運行於單服務器的流行Web站點而言,Boa是一個好的選擇。
5、Jigsaw
Jigsaw Jigsaw
Jigsaw是W3C推出的開源的Web服務器平台,使用Java語言編寫,可以安裝在有Java運行環境的系統上。做為W3C(World Wide Web Consortium)開發的服務器產品,其作用主要是對新技術的實現做一個例示,而非一個全功能的商業服務器產品。不過就Jigsaw 2.0版本而言,它的功能還是超過了Web服務器的平均水平。最重要的是,它體現了未來HTTP協議和基於對象的Web服務器技術的發展。如果你希望你的平台支持所有下一代技術,Jigsaw是一個好的選擇。
以上所提到的四個Apache Web服務器的替代者只是眾多優秀應用服務器產品的一部分。

Apache版本發佈

2013年07月18日,Apache HTTP Server 2.4.6 發佈。 [4] 
2013年07月12日,Apache HTTP Server 2.4.5 發佈。 [5] 
2012年08月18日,Apache HTTP Server 2.4.3 發佈。 [6] 
2012年08月23日,Apache HTTP Server 2.2.23 發佈。 [7] 
2013年02月25日 ,Apache HTTP Server 2.4.4 發佈。 [8] 
2013年11月25日 ,Apache HTTP Server 2.4.7 發佈。 [9] 
2014年03月17日 ,Apache 2.4.9 GA 正式發佈。 [10] 
2021年12月20日 ,Apache HTTP Server 2.4.52 發佈。 [12] 

Apache 錯誤日誌

這是一個非常普遍的現象,檢查錯誤方法:進入cmd 然後進入 Apache安裝目錄(具體為你自己的安裝目錄)\bin>httpd.exe -w -n “Apache2″ -k start [11] 
參考資料
展開全部 收起