配置Apache 1.3或者Apache 2.0服務(wù)器的5個(gè)技巧_PHP教程
推薦:PHP后門(mén)的隱藏技巧測(cè)試報(bào)告最近很多朋友都在問(wèn)我是否能把我那一句話木馬隱藏到HTML或圖片里,其實(shí)把一句話木馬插入到PHP文件中就已經(jīng)很隱蔽了,如果說(shuō)硬是要放到HTML文件或圖片里,就接著往下看這篇的篇測(cè)試報(bào)告吧。要知
本文提出了配置Apache 1.3或者Apache 2.0服務(wù)器的5個(gè)技巧。我們將闡述以下的配置方案:調(diào)整Apache的accept()串行化、Apache 2.0線程、采用mod_ssl的SSL會(huì)話緩存、優(yōu)化keep-alive超時(shí)值以及檢查服務(wù)器負(fù)載以平衡服務(wù)器可處理的請(qǐng)求量等。
AcceptMutex
Apache 1.3.21和Apache 2.0中引入了AcceptMutex 指示符,該指示符給調(diào)節(jié)服務(wù)器的性能帶來(lái)了一個(gè)難得的機(jī)會(huì)。該指示符配置Apache的accept()處理方式。在某些只有一個(gè)偵聽(tīng)器的系統(tǒng)上是不需要接受阻塞的。這就叫Single Listen Unserialized Accept (SLUA)。可是,對(duì)那些具有多個(gè)偵聽(tīng)器的配置或者在接受系統(tǒng)調(diào)用函數(shù)上(不管有多少個(gè)偵聽(tīng)器)存在thundering herd問(wèn)題的操作系統(tǒng)上,連接接受程序就必須進(jìn)行串行化了。
Covalent的Sander Temme對(duì)accept()阻塞策略進(jìn)行了一定程度的性能分析。這份報(bào)告總結(jié)了Apache 1.3.21在這一方面的有關(guān)調(diào)整策略,如下所示:
Irix的uslock (uslock)
POSIX跨進(jìn)程阻塞 (pthread)
SystemV Semaphores (sysvsem)
fcntl()阻塞(fcntl)
flock()阻塞 (flock)
OS/2 Semaphores (os2sem)
TPF 阻塞 (tpfcore)
None(無(wú))
盡管采用AcceptMutex none也是可能的,但是你的系統(tǒng)在這種配置下有可能受到thundering herd問(wèn)題和死鎖的困擾。這些問(wèn)題會(huì)導(dǎo)致服務(wù)器減慢處理速度乃至停止響應(yīng)。none選項(xiàng)絕對(duì)不能用在實(shí)際系統(tǒng)上。在非正式的測(cè)試下,pthread鎖應(yīng)該是最好的解決方案。然而,pthread跨進(jìn)程阻塞并不是所有系統(tǒng)都可用的。
采用2.0版和線程(worker MPM)
Apache 2.0有一個(gè)顯著的改進(jìn)特性就是支持線程。某些操作系統(tǒng),比如Solaris,在采取線程技術(shù)的條件下可以顯著地改進(jìn)系統(tǒng)性能。而其他操作系統(tǒng),比如Linux,其性能改進(jìn)就可能并不是很顯著。
在采用Apache 2.0的情況下,處理請(qǐng)求的策略已經(jīng)理論化了,這就是所謂的MPM:多進(jìn)程模式(Multi Process Model)。而老一些的Apache 1.3模式則以prefork MPM為代表,在Unix平臺(tái)上就是默認(rèn)MPM for 2.0 。在這種模式下有一個(gè)獨(dú)立的進(jìn)程處理每一請(qǐng)求。可是,假如你編譯Apache 2.0的時(shí)候帶 --with-mpm=worker 選項(xiàng),那么服務(wù)器請(qǐng)求就會(huì)由線程來(lái)處理。這種方法在精心設(shè)計(jì)線程實(shí)現(xiàn)方案的情況下會(huì)大大降低操作系統(tǒng)處理請(qǐng)求的負(fù)載。
SSL會(huì)話緩存
如果你對(duì)Apache 1.3或者在Apache 2.0采用了mod_ssl補(bǔ)充插件(在在Apache 2.0中則已經(jīng)包含在內(nèi)),那么你可以采用會(huì)話緩存提升系統(tǒng)性能。這種改進(jìn)會(huì)顯著降低SSL連接負(fù)載。設(shè)置會(huì)話緩存有三種途徑:
DBM (dbm),這是一種在磁盤(pán)上存儲(chǔ)項(xiàng)目的常用格式(htpasswd可以DBM格式存儲(chǔ)密碼)
共享內(nèi)存循環(huán)緩存(shm 或者shmcb)
共享內(nèi)存哈系表(shmht)
在采用以上選項(xiàng)的時(shí)候需要指定文件路徑。在使用DBM變量的情況下,文件將被寫(xiě)入磁盤(pán)。而對(duì)共享內(nèi)存變量來(lái)說(shuō),文件將被用做操作系統(tǒng)優(yōu)選共享內(nèi)存機(jī)制的存儲(chǔ)備份。值得注意的是,大多數(shù)操作系統(tǒng)不允許共享內(nèi)存段建立在通過(guò)網(wǎng)絡(luò)裝載(mount)的驅(qū)動(dòng)器上,比如NFS等,所以必須給服務(wù)器提供文件路徑。
我們建議你采用共享內(nèi)存,不過(guò),在那些沒(méi)有共享內(nèi)存的平臺(tái)上則不妨采用DBM方案。
--------------------------------------------------------------------------------
SSL會(huì)話緩存的更多信息和有關(guān)語(yǔ)法請(qǐng)見(jiàn):
modssl.org
Apache.org
--------------------------------------------------------------------------------
KeepAliveTimeout
假設(shè)某位用戶在閱讀網(wǎng)站上的某一網(wǎng)頁(yè),然后它單擊某一導(dǎo)向站內(nèi)另一網(wǎng)頁(yè)的鏈接。假如這一過(guò)程發(fā)生在KeepAliveTimeout 周期之內(nèi)(默認(rèn)為15秒),那么就不必創(chuàng)建新的TCP服務(wù)器連接。這樣做大大減少了計(jì)算機(jī)的負(fù)載。然而,在這一時(shí)間區(qū)域內(nèi)服務(wù)器也不能處理更多的請(qǐng)求。KeepAliveTimeout周期過(guò)后,服務(wù)器才可以處理來(lái)自不同客戶機(jī)的最新請(qǐng)求。因此,你必須增加請(qǐng)求進(jìn)程或者線程的數(shù)量以滿足空閑請(qǐng)求的需要。這個(gè)值應(yīng)該進(jìn)行仔細(xì)的調(diào)整以達(dá)到最佳狀態(tài)。
采用mod_status
采用mod_status檢查服務(wù)器負(fù)載情況可以從中獲得調(diào)整服務(wù)器性能的重要信息。
apachectl status命令是檢查服務(wù)器狀態(tài)的快捷途徑。假如該命令的輸出結(jié)果并沒(méi)有始終如一的顯示出可用的工作進(jìn)程。那么最好增大MinSpareServers或者M(jìn)inSpareThreads值(在Apache 2.0采用線程化MPM的情況下)。同時(shí)你可能還需要增大MaxClients值。
--------------------------------------------------------------------------------
有關(guān)mod_status和Apache模塊mpm_common的更多信息請(qǐng)參考mod_status 和mpm_common 。
--------------------------------------------------------------------------------
小結(jié)
你完全可以采用本文提出的技巧使服務(wù)器的性能最大化同時(shí)維持網(wǎng)站的正常運(yùn)行。
分享:PHP中數(shù)組元素升序、降序及重新排序的函數(shù)在PHP數(shù)組學(xué)習(xí)摘錄部分了解到最基本的PHP數(shù)組的建立和數(shù)組元素的顯示。需要深入學(xué)習(xí)下PHP數(shù)組的相關(guān)操作。首先接觸的就是數(shù)組元素的升序、降序的排序問(wèn)題。 1、快速創(chuàng)建數(shù)組的函數(shù)range()
- PHPNOW安裝Memcached擴(kuò)展方法詳解
- php記錄頁(yè)面代碼執(zhí)行時(shí)間
- PHP中獎(jiǎng)概率的抽獎(jiǎng)算法程序代碼
- apache設(shè)置靜態(tài)文件緩存方法介紹
- php對(duì)圖像的各種處理函數(shù)代碼小結(jié)
- PHP 關(guān)于訪問(wèn)控制的和運(yùn)算符優(yōu)先級(jí)介紹
- 關(guān)于PHP語(yǔ)言構(gòu)造器介紹
- php/js獲取客戶端mac地址的實(shí)現(xiàn)代碼
- php5.5新數(shù)組函數(shù)array_column使用
- PHP preg_match的匹配多國(guó)語(yǔ)言的技巧
- php 中序列化和json使用介紹
- php采集文章中的圖片獲取替換到本地
PHP教程Rss訂閱編程教程搜索
PHP教程推薦
- php分析域名
- 十天學(xué)會(huì)php之第三天
- PHP+Ajax 實(shí)現(xiàn)分頁(yè)技術(shù)
- php escapeshellcmd多字節(jié)編碼漏洞
- 淺談開(kāi)發(fā)框架的選擇和設(shè)計(jì)經(jīng)驗(yàn)
- PHP技術(shù)進(jìn)階 用PHP處理多個(gè)同名復(fù)選框
- php實(shí)現(xiàn)單鏈表的實(shí)例代碼
- 淺談基于UML的城軌列車超速防護(hù)系統(tǒng)建模
- 解析PHP中empty is_null和isset的測(cè)試
- 怎樣使用PHP服務(wù)端代理抓取網(wǎng)頁(yè)內(nèi)容
- 相關(guān)鏈接:
- 教程說(shuō)明:
PHP教程-配置Apache 1.3或者Apache 2.0服務(wù)器的5個(gè)技巧。