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