安裝這些模塊,以改善Apache Web服務(wù)器
Apache依然是世界上最受歡迎的Web服務(wù)器,這一方面歸功于數(shù)量眾多的功能強大的模塊,它們可以協(xié)同運行,增強這款Web服務(wù)器的核心功能。本文介紹了一些實用的Apache模塊,它們可以為你的Web服務(wù)器改善性能、內(nèi)容分發(fā)和總體安全。
改善性能的模塊
雖然最新版本的Apache本身運行良好,但是你可以通過部署諸多模塊——這些模塊可壓縮輸出、消除不必要的載荷以及優(yōu)化HTML和CSS代碼,優(yōu)化這款Web服務(wù)器,從而減少耗用資源、改進(jìn)內(nèi)容分發(fā)。
默認(rèn)情況下,在CentOS中,Apache在預(yù)派生(prefork)模式下運行其多路處理模塊(MPM);在這種模式下,父進(jìn)程負(fù)責(zé)派生足夠多的子進(jìn)程,以滿足所有遠(yuǎn)程客戶端試圖訪問服務(wù)器的要求。不過,按照客戶端的需要動態(tài)管理進(jìn)程不是非常高效,那是由于每次開始和終止操作很花時間和資源。ModPrefork解決了這個不足,它讓你可以為等待客戶端請求的備用Apache子實例配置最小(和最大)數(shù)量。 不過,這項功能不夠靈活和敏捷,無法滿足請求偶爾出現(xiàn)峰值的繁忙網(wǎng)站的需要。
ModWorker解決了ModPrefork的性能問題,它使用線程來滿足大量請求的需要,耗用的系統(tǒng)資源比較少。想在CentOS下啟用ModWorker,編輯文件/etc/sysconfig/httpd,去掉HTTPD=/usr/sbin/httpd.worker這一行的注釋。然后運行命令service httpd restart,重啟Apache。想確認(rèn)Apache在什么模式下運行,請使用命令apachectl –l,列出Apache所有已裝入模塊、尋找worker.c。
遺憾的是,ModWorker并非與所有Apache模塊兼容,包括諸如ModPHP之類的常見模塊。在啟用它之前,你應(yīng)該檢查兼容性,需要的話還要另辟蹊徑。比如說,要是你同時需要ModWorker和PHP,就可以使用Mod_FastCGI代替ModPHP。
借助ModPagespeed優(yōu)化內(nèi)容
一旦你優(yōu)化了Apache的服務(wù)器端,就可以開始改進(jìn)內(nèi)容分發(fā)了。ModPagespeed(http://code.google.com/p/modpagespeed/)是由谷歌開發(fā)的第三方、一體化的優(yōu)化模塊,它使用ModDeflate來改寫和壓縮輸出,從而提供一種更快速的客戶端體驗。它會自動運用來自PageSpeed(https://developers.google.com/speed/pagespeed/)的運用最佳實踐,PageSpeed是可以用來優(yōu)化網(wǎng)頁性能的一套工具。雖然ModPagespeed仍正式處于測試版狀態(tài),但它是個成熟的項目。如果使用ModPagespeed,你就可以避免迫使開發(fā)人員和設(shè)計人員手工優(yōu)化HTML、CSS和Java代碼以及圖像。查看該模塊的功能頁面(http://www.modpagespeed.com/),即可了解更多信息和有用的比較。
你可以從源文件或通過二進(jìn)制程序包來安裝ModPagespeed。至于CentOS,你可以使用來自ModPagespeed下載頁面(https://developers.google.com/speed/pagespeed/)的官方安裝程序包。一旦你下載了與你的CentOS架構(gòu)(32位或64位)對應(yīng)的程序包,運行命令rpm -ivh mod-pagespeed*.rpm來安裝它。重啟Apache,并運行命令apachectl -t -D DUMP_MODULES,確保ModPagespeed已安裝和裝入。在這個命令的輸出中,你應(yīng)該能在所列的模塊當(dāng)中找到pagespeed_module。
接下來,打開配置文件/etc/httpd/conf.d/pagespeed.conf,檢查所有的可用選項。在Allow from 127.0.0.1后面添加新的一行,讓你的本地客戶端IP地址出現(xiàn)在命令中;比如說,如果你的IP地址是192.168.0.2,就添加Allow from 192.168.0.2。一旦你重新裝入Apache,就能夠在http://yourserverip/mod_pagespeed_statistics處看到ModPagespeed的統(tǒng)計信息。這讓你可以更快速地了解它,看到優(yōu)化后的結(jié)果。
借助ModSecurity確保絕對安全
ModSecurity是面向Apache的最受歡迎的安全模塊。我們之前寫過一篇文章,題為《借助ModSecurity保護(hù)和審查你的Web服務(wù)器》(http://olex.openlogic.com/wazi/2011/protect-and-audit-your-web-server-with-apaches-modsecurity/),對它已作了介紹,所以我們這里只表示它可以提供全面的Web流量檢查、封阻和審查功能,讓你可以保護(hù)Web服務(wù)器,遠(yuǎn)離已知和未知的安全漏洞,包括分布式拒絕服務(wù)(DDOS)攻擊。
借助ModGeoIP檢測訪客的所在國家
ModGeoIP基于MaxMind的GeoIP數(shù)據(jù)和技術(shù)(http://www.maxmind.com/app/ip-location),它讓你只要使用本地保存的GeoIP數(shù)據(jù)庫,就可以確定訪客的所在國家。一旦你知道了訪客的所在國家,就能處理一些事務(wù),比如把他重定向至某個特定的網(wǎng)頁或者拒絕對方訪問。
想安裝ModGeoIP,你首先需要C庫和程序包zlib-devel,這是前提條件。下載GeoIP C庫的最新版本(http://www.maxmind.com/download/geoip/api/c/),對它進(jìn)行抽取,然后執(zhí)行通常的安裝步驟,執(zhí)行./configure && make && make install。
接下來,安裝ModGeoIP本身。下載最新版本,對它進(jìn)行抽取,然后執(zhí)行apxs -i -a -L/usr/local/lib -I/usr/local/include -lGeoIP -c mod_geoip.c。apxs命令的變量意味著,把該模塊安裝到默認(rèn)模塊目錄/usr/lib/httpd/modules/,借助LoadModule命令把它裝入到Apache以此來激活它,使用/usr/local/lib里面的庫,加入/usr/local/include目錄,搜索庫GeoIP,然后通過C源文件來進(jìn)行編譯。
一旦你重啟Apache后,ModGeoIP模塊應(yīng)該列在命令apachectl -t -D DUMP_MODULES的輸出中。想啟用它,創(chuàng)建一個文件/etc/httpd/conf.d/geoip.conf,把在整個服務(wù)器范圍內(nèi)啟用該模塊的命令以及含有GeoIP數(shù)據(jù)庫的二進(jìn)制文件路徑放到它里面:
GeoIPEnable On
GeoIPDBFile /usr/local/share/GeoIP/GeoIP.dat
隨后,你可以開始根據(jù)Apache目錄或虛擬主機配置來使用ModGeoIP,或者借助本地.htaccess文件。配置選項一樣。比如說,如果你想拒絕來自美國境外的任何訪客訪問:
SetEnvIf GEOIP_COUNTRY_CODE US AllowCountry
Deny from all
Allow from env=AllowCountry
想了解更多例子和信息,請參閱ModGeoIP的主頁(http://www.maxmind.com/app/mod_geoip)。
借助ModStatus進(jìn)行監(jiān)控
你應(yīng)該總是監(jiān)控Apache或任何服務(wù),以確保性能最佳。Apache的ModStatus模塊為你提供了關(guān)于當(dāng)前服務(wù)器運行狀況的信息。
ModStatus默認(rèn)情況下安裝在CentOS中,但并未被啟用。想啟用它,打開Apache的主配置文件/etc/httpd/conf/httpd.conf,去掉下面代碼的注釋,把your_ip換成你的IP:
SetHandler server-status
Order deny,allow
Deny from all
Allow from your_ip
此外,去掉ExtendedStatus On的注釋,那樣你就能看到更多信息,比如當(dāng)前請求訪問的URL。重新裝入Apache,試試訪問http://yourserver/server-status,證實ModStatus在正常運行。在剛打開的頁面上,你應(yīng)該能夠看到與Apacehe及其進(jìn)程(分支進(jìn)程或線程)和處理器使用情況有關(guān)的所有統(tǒng)計信息。
如果你在其URL:http://yourserver/server-status?auto的末尾加上?auto,ModStatus還能得出機器可讀的輸出。然后,其他程序就能閱讀和分析輸出。自動模式數(shù)據(jù)被Cacti用來以實用趨勢繪制圖形,以及被Nagios用來監(jiān)控有無異常問題。
借助ModSpamhaus進(jìn)行保護(hù)
某些IP地址已知受到了危及,已知發(fā)送垃圾郵件或被用于DDOS攻擊及其他惡意活動。Spamhaus項目是核查IP地址聲譽的最佳公共來源。人們通常認(rèn)為Spamhaus是一個與郵件服務(wù)器有關(guān)的項目,但由于需要類似的Web服務(wù)器保護(hù)機制,結(jié)果促使有人為Apache開發(fā)了ModSpamhaus,這個擴(kuò)展模塊讓系統(tǒng)管理員可以阻止有人通過聲名狼藉的IP地址進(jìn)行訪問。
想安裝ModSpamhaus,先下載最新的安裝程序包(http://sourceforge.net/projects/mod-spamhaus/files/latest/download),對它進(jìn)行抽取。找到src目錄中的文件mod_spamhaus.c,執(zhí)行命令apxs -i -a -c mod_spamhaus.c,手動創(chuàng)建這個Apache模塊。變量告訴apxs將該模塊安裝到默認(rèn)的模塊目錄usr/lib/httpd/modules/中,使用LoadModule命令把它裝入到Apache來激活它,并通過C源文件來進(jìn)行編譯。
接下來,創(chuàng)建ModSpamhaus的配置文件/etc/httpd/conf.d/spamhaus.conf。填入下列配置選項:
MS_METHODS POST,PUT,OPTIONS,CONNECT
MS_WhiteList /etc/spamhaus_whitelisted
MS_CacheSize 1000
就大多數(shù)架構(gòu)而言,這個普通的配置可以被接受。MS_METHODS選項定義了應(yīng)該檢查哪些HTTP方法:POST、PUT、OPTIONS和CONNECT。如果你在防范DDOS攻擊或你的Web表單使用GET方法,還要添加GET。選項MS_WhiteList讓你可以用加入白名單的IP地址來指定文件;也就是說,不管聲譽好壞,這些地址都將被允許訪問。MS_CacheSize指定了關(guān)于多少個IP地址應(yīng)該緩存起來的信息。遭到比較嚴(yán)重的DDOS攻擊時,你可以加大這個數(shù),阻止數(shù)量更多的重復(fù)性的惡意IP地址。
使用ModSpamhaus可能會導(dǎo)致你的網(wǎng)站性能下降,如果你啟用它來檢查GET等更常使用的HTTP方法,更是如此。為了解決這個問題,你可以安裝自己的rbldnsd(DNS守護(hù)程序,適合運行基于DNS的阻止列表),并使用ModSpamhaus選項MS_DNS來指定其地址。擁有自己的rbldnsd讓你可以使用本地數(shù)據(jù)庫、定期拷貝遠(yuǎn)程數(shù)據(jù)庫,從而優(yōu)化性能。
所有上述模塊僅僅是數(shù)百個Apache擴(kuò)展模塊中的少數(shù)幾個,代表了旨在改善Apache Web服務(wù)器功能的模塊。
小知識:APache eXtenSion工具
不是所有的Apache模塊都是以預(yù)編譯程序包的形式出現(xiàn)的。當(dāng)你遇到不是預(yù)編譯程序包的模塊時,可以借助由CentOS程序包httpd-devel提供的APache eXtenSion(apxs)工具,從源文件來安裝它。Apxs通過三種類型的文件:C語言源文件(.c)、對象文件(.o)和庫歸檔文件(.a),創(chuàng)建Apache模塊,作為動態(tài)共享對象(DSO)。DSO文件通過mod_so模塊,在運行過程中裝入到Apache。通過運行apachectl -l,核實一下你的Apache是不是安裝了mod_so,尋找輸出當(dāng)中的mod_so.c。
關(guān)鍵詞:Apache Web服務(wù)器
新文章:
- CentOS7下圖形配置網(wǎng)絡(luò)的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統(tǒng)后丟失windows啟動項
- CentOS單網(wǎng)卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網(wǎng)打印機IP講解
- CentOS7使用hostapd實現(xiàn)無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網(wǎng)絡(luò)重啟出錯
- 解決Centos7雙系統(tǒng)后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統(tǒng)有什么不同呢
- Centos 6.6默認(rèn)iptable規(guī)則詳解