溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

深度剖析apache 2.4web服務(wù)器(史上最全)

發(fā)布時間:2020-07-18 06:41:04 來源:網(wǎng)絡(luò) 閱讀:13895 作者:Mr大表哥 欄目:建站服務(wù)器

博主QQ819594300

博客地址:http://zpf666.blog.51cto.com/

有什么疑問的朋友可以聯(lián)系博主,博主會幫你們解答,謝謝支持!一、   安裝apache2.4.23

新版本的httpd-2.4新增以下特性;

①新增模塊;

mod_proxy_fcgi(可提供fcgi代理)

mod_ratelimit(限制用戶帶寬)

mod_request(請求模塊,對請求做過濾)

mod_remoteip(匹配客戶端的IP地址)

②對于基于IP的訪問控制做了修改,不再支持allow,deny,order機(jī)制,而是統(tǒng)一使用require進(jìn)行。

③還新增以下幾條新特性;

1、MPM支持在運行時裝載;不過要開啟這種特性,在編譯安裝要啟用這三種功能;

--enable-mpms-shared=all  --with-mpm=event

2、支持event

3、支持異步讀寫

4、在每個模塊及每個目錄上指定日志級別

5、增強(qiáng)版的表達(dá)式分析器

6、每請求配置:<If>,<Elseif>

7、毫秒級別的keepalivetimeout

8、基于FQDN的虛擬主機(jī)不再需要NameVirtualHost指令

9、支持使用自定義變量 


安裝環(huán)境:操作系統(tǒng):Centos7.2,關(guān)閉selinux

檢查httpd包是否安裝,如果安裝了要則卸載

深度剖析apache 2.4web服務(wù)器(史上最全)

上圖所示沒有安裝過httpd,這下面開始安裝工作:

安裝apache2.4.23

需要下載下列所示的幾個源碼包:

httpd-2.4.23.tar.gz

apr-1.5.2.tar.gz

apr-util-1.5.4.tar.gz

zlib-1.2.8.tar.gz

pcre-8.39.tar.gz

注:apr(Apache Portable Runtime)Apache可移植運行庫,它是一個對操作系統(tǒng)調(diào)用的抽象庫,用來實現(xiàn)Apache內(nèi)部組件對操作系統(tǒng)的使用,提高系統(tǒng)的可移植性。

安裝apr和apr-util:

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

安裝zlib:

深度剖析apache 2.4web服務(wù)器(史上最全)\

安裝pcre:

深度剖析apache 2.4web服務(wù)器(史上最全)

安裝openssl:

說明:安裝apache2.4.23時會提示openssl版本過低,是因為centos7自帶的版本openssl-1.0.1e,我們需要自己去下載openssl。

下載openssl:

#wget  https://www.openssl.org/source/openssl-1.0.1u.tar.gz

下面開始安裝openssl:

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

安裝apache2.4.23:

深度剖析apache 2.4web服務(wù)器(史上最全)

相關(guān)參數(shù)解釋如下:

--enable-so     支持動態(tài)共享模塊即打開DSO支持

--enable-rewrite支持url重寫

--enable-ssl     支持ssl

--with-ssl=/usr/local/openssl    指定ssl安裝位置

--enable-cgi     啟用cgi

--enable-cgid:MPM     使用的是event或worker要啟用cgid

--enable-modules=most  明確指明要靜態(tài)編譯到httpd二進(jìn)制文件的模塊<MODULE-LIST>為空格分隔的模塊名列表、all或者mostall表示包含所有模塊most表示包含大部分常用模塊

--enable-mods-shared=most   明確指明要以DSO方式編譯的模塊<MODULE-LIST>為空格分隔的模塊名列表、all或者mostall表示包含所有模 塊most表示包含大部分模塊

--enable-mpms-shared=all   啟用MPM所有支持的模式這樣event、worker、prefork就會以模塊化的方式安裝要用哪個就在 httpd.conf 里配置就好了。

--with-mpm=event       指定啟用的mpm模式默認(rèn)使用enevt模式在apache的早期版本2.0默認(rèn)prefork,2.2版本是worker2.4版本是event.

--with-pcre=/usr/local/pcre      支持pcre

--with-z=/usr/local/zlib        使用zlib壓縮庫

--with-apr=/usr/local/apr       指定apr的安裝路徑

--with-apr-util=/usr/local/apr-util   指定apr-util的安裝路徑

--enable-expires      激活彧通過配置文件控制HTTP的“Expires:”和“Cache-Control:”頭內(nèi)容即對網(wǎng)站圖片、js、css等內(nèi)容提供客戶端瀏覽器緩存的設(shè)置。這個是apache調(diào)優(yōu)的一個重要選項之一。

--enable-deflate     提供對內(nèi)容的壓縮傳輸編碼支持一般是html、js、css等內(nèi)容的站點。使用此參數(shù)會打打提高傳輸速度提升訪問者訪問的體驗。在生產(chǎn)環(huán)境中這是apache調(diào)優(yōu)的一個重要選項之一。

優(yōu)化http程序執(zhí)行路徑:

深度剖析apache 2.4web服務(wù)器(史上最全)

修改配置文件httpd.conf,設(shè)置其中的ServerName值:

例如:ServerName   www.benet.com

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

開啟apache服務(wù)器

深度剖析apache 2.4web服務(wù)器(史上最全)

設(shè)置開機(jī)后自動啟動:

深度剖析apache 2.4web服務(wù)器(史上最全)

編輯 /etc/init.d/httpd 文件,在首行 #!/bin/sh 下面加入兩行:

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

將 Apache 加入開機(jī)自動啟動:

深度剖析apache 2.4web服務(wù)器(史上最全)

啟動編譯好的 Apache 2.4.23:

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

(注意:如果狀態(tài)不是active(running),則重啟一下httpd服務(wù)即可)

以下是用service的方式開啟httpd服務(wù)。

深度剖析apache 2.4web服務(wù)器(史上最全)

查看一下httpd狀態(tài):

深度剖析apache 2.4web服務(wù)器(史上最全)

下面解決這個問題:

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

lynx安裝上了,再次查看httpd狀態(tài):

深度剖析apache 2.4web服務(wù)器(史上最全)

上圖報錯說:請求的URL /服務(wù)器狀態(tài)這個服務(wù)器上不存在。(即server-status不存在),下面繼續(xù)解決問題。

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

返回了狀態(tài)碼是404:意思是請求被拒絕

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

這樣就看可以看到httpd的狀態(tài)了。

客戶端測試訪問(注意防火墻):

先開啟httpd服務(wù)例外:

深度剖析apache 2.4web服務(wù)器(史上最全)

在一臺客戶機(jī)上訪問測試:

深度剖析apache 2.4web服務(wù)器(史上最全)

上圖顯示訪問成功!

二、   Apache的優(yōu)化配置:

apache所運行的硬件環(huán)境都是對性能影響最大的因素,即使不能對硬件進(jìn)行升級,也最好給apache一個單獨的主機(jī)以免受到其他應(yīng)用的干擾。各個硬件指標(biāo)中,對性能影響最大的是內(nèi)存,對于靜態(tài)內(nèi)容(圖片、javascript文件、css文件等),它決定了apache可以緩存多少內(nèi)容,它緩存的內(nèi)容越多,在硬盤上讀取內(nèi)容的機(jī)會就越少,大內(nèi)存可以極大提高靜態(tài)站點的速度;對動態(tài)高負(fù)載站點來說,每個請求保存的時間更多一些,apache的mpm模塊會為每個請求派生出相應(yīng)的進(jìn)程或線程分別處理,而進(jìn)程或線程的數(shù)量與內(nèi)存的消耗近似成正比,因此增大內(nèi)存對提高動態(tài)站點的負(fù)載和運行速度也極為有利

其次是硬盤的速度,靜態(tài)站點尤為突出,apache不斷的在讀取文件并發(fā)送給相應(yīng)的請求,硬盤的讀寫是極其頻繁的;動態(tài)站點也要不斷的加載web程序(php等),一個請求甚至要讀取十幾個文件才能處理完成,因此盡可能的提高硬盤速度和質(zhì)量對提高apache的性能是有積極意義的。

最后是cpu和網(wǎng)絡(luò),cpu影響的是web程序執(zhí)行速度,網(wǎng)絡(luò)影響流量大小。   

1、apache的工作模式:

ApacheHTTP服務(wù)器被設(shè)計為一個強(qiáng)大的、靈活的能夠在多種平臺以及不同環(huán)境下工作的服務(wù)器。這種模塊化的設(shè)計就叫做“多進(jìn)程處理模塊”(Multi-Processing Module,MPM),也叫做工作模式。

Prefork模式(一個非線程型的):

其主要工作方式是:當(dāng)Apache服務(wù)器啟動后,mpm_prefork模塊會預(yù)先創(chuàng)建多個子進(jìn)程(默認(rèn)為5個),每個子進(jìn)程只有一個線程,當(dāng)接收到客戶端的請求后,mpm_prefork模塊再將請求轉(zhuǎn)交給子進(jìn)程處理,并且每個子進(jìn)程同時只能用于處理單個請求。如果當(dāng)前的請求數(shù)將超過預(yù)先創(chuàng)建的子進(jìn)程數(shù)時,mpm_prefork模塊就會創(chuàng)建新的子進(jìn)程來處理額外的請求。Apache總是試圖保持一些備用的或者是空閑的子進(jìn)程用于迎接即將到來的請求。這樣客戶端的請求就不需要在接收后等候子進(jìn)程的產(chǎn)生。

由于在mpm_prefork模塊中,每個請求對應(yīng)一個子進(jìn)程,因此其占用的系統(tǒng)資源相對其他兩種模塊而言較多。不過mpm_prefork模塊的優(yōu)點在于它的每個子進(jìn)程都會獨立處理對應(yīng)的單個請求,這樣,如果其中一個請求出現(xiàn)問題就不會影響到其他請求。Prefork在效率上要比Worker要高,但是內(nèi)存使用大得多不擅長處理高并發(fā)的場景。

Apache在prefork工作模式下影響性能的重要參數(shù)說明:

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

每個配置項解釋如下

<IfModulempm_prefork_module>

StartServers            5

#apache啟動時候默認(rèn)開始的子進(jìn)程數(shù)

MinSpareServers          5

#最小的閑置子進(jìn)程數(shù)

MaxSpareServers        10

#最大的閑置子進(jìn)程數(shù)

MaxRequestWorkers      250

#MaxRequestWorkers設(shè)置了允許同時的最大接入請求數(shù)量。任何超過MaxRequestWorkers限制的請求將進(jìn)入等候隊列,在apache2.3.1以前的版本MaxRequestWorkers被稱為MaxClients,舊的名字仍舊被支持。

MaxConnectionsPerChild   500

#設(shè)置的是每個子進(jìn)程可處理的請求數(shù)。每個子進(jìn)程在處理了“MaxConnectionsPerChild”個請求后將自動銷毀。0意味著無限,即子進(jìn)程永不銷毀。雖然缺省設(shè)為0可以使每個子進(jìn)程處理更多的請求,但如果設(shè)成非零值也有兩點重要的好處:1、可防止意外的內(nèi)存泄漏。2、在服務(wù)器負(fù)載下降的時侯會自動減少子進(jìn)程數(shù)。因此,可根據(jù)服務(wù)器的負(fù)載來調(diào)整這個值。在Apache2.3.9之前稱之為MaxRequestsPerChild。

</IfModule>

注1MaxRequestWorkers是這些指令中最為重要的一個,設(shè)定的是 Apache可以同時處理的請求,是對Apache性能影響最大的參數(shù)。如果請求總數(shù)已達(dá)到這個值(可通過ps-ef |grep http | wc -l來確認(rèn)),那么后面的請求就要排隊,直到某個已處理請求完畢。這就是系統(tǒng)資源還剩下很多而HTTP訪問卻很慢的主要原因。雖然理論上這個值越大,可以處理的請求就越多,建議將初始值設(shè)為(以Mb為單位的最大物理內(nèi)存/2),然后根據(jù)負(fù)載情況進(jìn)行動態(tài)調(diào)整。比如一臺4G內(nèi)存的機(jī)器,那么初始值就是4000/2=2000。

注2:prefork 控制進(jìn)程在最初建立“StartServers”個子進(jìn)程后,為了滿足MinSpareServers設(shè)置的需要創(chuàng)建一個進(jìn)程,等待一秒鐘,繼續(xù)創(chuàng)建兩 個,再等待一秒鐘,繼續(xù)創(chuàng)建四個……如此按指數(shù)級增加創(chuàng)建的進(jìn)程數(shù),最多達(dá)到每秒32個,直到滿足MinSpareServers設(shè)置的值為止。這種模式 可以不必在請求到來時再產(chǎn)生新的進(jìn)程,從而減小了系統(tǒng)開銷以增加性能。MaxSpareServers設(shè)置了最大的空閑進(jìn)程數(shù),如果空閑進(jìn)程數(shù)大于這個值,Apache會自動kill掉一些多余進(jìn)程。這個值不要設(shè)得過大,但如果設(shè)的值比MinSpareServers小,Apache會自動把其調(diào)整為 MinSpareServers+1。如果站點負(fù)載較大,可考慮同時加大MinSpareServers和MaxSpareServers。

(建議StartServers的值和MinSpareServers的值相等)

注3:ServerLimit和MaxClients(MaxRequestWorkers)有什么區(qū)別呢?

是因為在apache1時代,控制最大進(jìn)程數(shù)只有MaxClients這個參數(shù),并且這個參數(shù)最大值為256,并且是寫死了的,試圖設(shè)置為超過256是無效的,這是由于apache1時代的服務(wù)器硬件限制的。但是apache2時代由于服務(wù)器硬件的升級,硬件已經(jīng)不再是限制,所以使用ServerLimit這個參數(shù)來控制最大進(jìn)程數(shù),ServerLimit值>=MaxClient值才有效。ServerLimit要放在MaxClients之前,值要不小于MaxClients

注4:查看Apache加載的模塊

深度剖析apache 2.4web服務(wù)器(史上最全)

(static的是靜態(tài)模塊,shared的是動態(tài)模塊)

深度剖析apache 2.4web服務(wù)器(史上最全)

(同上也有static和shared之分)

深度剖析apache 2.4web服務(wù)器(史上最全)

(只能查看編譯到二進(jìn)制文件中的靜態(tài)模塊)

注5:如何查看Apache的工作模式呢?可以使用httpd -V 命令查看,另外使用httpd -l 也可以查看到(一般都用httpd -V)

深度剖析apache 2.4web服務(wù)器(史上最全)

注6:如何修改prefork參數(shù)和啟用prefork模式(httpd默認(rèn)的模式是event模式)

①通過httpd-mpm.conf定義模塊的配置信息

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

②修改httpd的主配置文件

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

③重啟httpd服務(wù),讓修改的配置生效

深度剖析apache 2.4web服務(wù)器(史上最全)

注意:在實際生產(chǎn)環(huán)境中,建議使用優(yōu)雅啟動,因為沒有”service  httpd  reload”,等效作用的是“service  httpd  graceful”

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

④驗證模式是否更改為prefork

深度剖析apache 2.4web服務(wù)器(史上最全)

Worker模式(多線程多進(jìn)程):

和prefork模式相比,worker使用了多進(jìn)程和多線程的混合模式,worker模式也同樣會先預(yù)派生一些子進(jìn)程,然后每個子進(jìn)程創(chuàng)建一些線程,同時包括一個監(jiān)聽線程,每個請求過來會被分配到一個線程來服務(wù)。線程比起進(jìn)程會更輕量,因為線程是通過共享父進(jìn)程的內(nèi)存空間,因此,內(nèi)存的占用會減少一些,在高并發(fā)的場景下會比prefork有更多可用的線程,表現(xiàn)會更優(yōu)秀一些;另外,如果一個線程出現(xiàn)了問題也會導(dǎo)致同一進(jìn)程下的線程出現(xiàn)問題,如果是多個線程出現(xiàn)問題,也只是影響Apache的一部分,而不是全部。由于用到多進(jìn)程多線程,需要考慮到線程的安全了,在使用keep-alive長連接的時候,某個線程會一直被占用,即使中間沒有請求,需要等待到超時才會被釋放(該問題在prefork模式下也存在)

總的來說,prefork方式速度要稍高于worker,然而它需要的cpu和memory資源也稍多于woker。

Apache在worker工作模式下影響性能的重要參數(shù)說明:

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

每個配置項解釋如下

<IfModulempm_worker_module>

StartServers             3

#apache啟動時候默認(rèn)開始的子進(jìn)程數(shù)

MinSpareThreads        75

#最小空閑數(shù)量的工作線程

MaxSpareThreads        250

#最大空閑數(shù)量的工作線程

ThreadsPerChild         25

#每個子進(jìn)程產(chǎn)生的線程數(shù)量

MaxRequestWorkers      400

#與prefork模式相同

MaxConnectionsPerChild  0

#與prefork模式相同

</IfModule>

注1Worker 由主控制進(jìn)程生成“StartServers”個子進(jìn)程,每個子進(jìn)程中包含固定的ThreadsPerChild線程數(shù),各個線程獨立地處理請求。同樣,為了不在請求到來時再生成線程,MinSpareThreads和MaxSpareThreads設(shè)置了最少和最多的空閑線程數(shù);

而MaxRequestWorkers 設(shè)置了同時連入的clients最大總數(shù)。如果現(xiàn)有子進(jìn)程中的線程總數(shù)不能滿足負(fù)載,控制進(jìn)程將派生新的子進(jìn)程

MinSpareThreads和MaxSpareThreads的最大缺省值分別是75和250。這兩個參數(shù)對Apache的性能影響并不大,可以按照實際情況相應(yīng)調(diào)節(jié) 。

注2:ThreadsPerChild是worker MPM中與性能相關(guān)最密切的指令。ThreadsPerChild的最大缺省值是64,如果負(fù)載較大,64也是不夠的。這時要顯式使用 ThreadLimit指令,它的最大缺省值是20000。

注3Worker模式下所能同時處理的請求總數(shù)是由子進(jìn)程總數(shù)乘以ThreadsPerChild 值決定的,應(yīng)該大于等于MaxRequestWorkers。如果負(fù)載很大,現(xiàn)有的子進(jìn)程數(shù)不能滿足時,控制進(jìn)程會派生新的子進(jìn)程。默認(rèn)最大的子進(jìn)程總數(shù)是16,加大時也需要顯式聲明ServerLimit(系統(tǒng)配置的最大進(jìn)程數(shù)量,最大值是20000)。需要注意的是,如果顯式聲明了ServerLimit,那么它乘以 ThreadsPerChild的值必須大于等于MaxRequestWorkers,而且MaxRequestWorkers必須是ThreadsPerChild的整數(shù)倍,否則 Apache將會自動調(diào)節(jié)到一個相應(yīng)值。

注4進(jìn)程與線程的區(qū)別

線程是指進(jìn)程內(nèi)的一個執(zhí)行單元,也是進(jìn)程內(nèi)的可調(diào)度實體。

一個程序至少有一個進(jìn)程,一個進(jìn)程至少有一個線程.

線程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性高。

另外,進(jìn)程在執(zhí)行過程中擁有獨立的內(nèi)存單元,而多個線程共享內(nèi)存,從而極大地提高了程序的運行效率。

  線程在執(zhí)行過程中與進(jìn)程還是有區(qū)別的,每個獨立的線程有一個程序運行的入口、順序執(zhí)行序列和程序的出口。但是線程不能夠獨立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個線程執(zhí)行控制。

  從邏輯角度來看,多線程的意義在于一個應(yīng)用程序中,有多個執(zhí)行部分可以同時執(zhí)行。但操作系統(tǒng)并沒有將多個線程看做多個獨立的應(yīng)用,來實現(xiàn)進(jìn)程的調(diào)度和管理以及資源分配。這就是進(jìn)程和線程的重要區(qū)別。

  進(jìn)程是具有一定獨立功能的程序關(guān)于某個數(shù)據(jù)集合上的一次運行活動,進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個獨立單位.

  線程是進(jìn)程的一個實體,是CPU調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨立運行的基本單位.線程自己基本上不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源(如程序計數(shù)器,一組寄存器和棧),但是它可與同屬一個進(jìn)程的其他的線程共享進(jìn)程所擁有的全部資源.

  一個線程可以創(chuàng)建和撤銷另一個線程;同一個進(jìn)程中的多個線程之間可以并發(fā)執(zhí)行.

總結(jié)進(jìn)程與線程的區(qū)別:

(1)地址空間:進(jìn)程內(nèi)的一個執(zhí)行單元;進(jìn)程至少有一個線程;它們共享進(jìn)程的地址空間;而進(jìn)程有自己獨立的地址空間;

(2)資源擁有:進(jìn)程是資源分配和擁有的單位,同一個進(jìn)程內(nèi)的線程共享進(jìn)程的資源

(3)線程是處理器調(diào)度的基本單位,但進(jìn)程不是.

(4)二者均可并發(fā)執(zhí)行.

進(jìn)程和線程都是由操作系統(tǒng)所體會的程序運行的基本單元,系統(tǒng)利用該基本單元實現(xiàn)系統(tǒng)對應(yīng)用的并發(fā)性。

進(jìn)程和線程的區(qū)別在于:

簡而言之,一個程序至少有一個進(jìn)程,一個進(jìn)程至少有一個線程.

線程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性高。

另外,進(jìn)程在執(zhí)行過程中擁有獨立的內(nèi)存單元,而多個線程共享內(nèi)存,從而極大地提高了程序的運行效率。

Event模式:

這是Apache最新的工作模式,是worker模式的變種(升級版),它把服務(wù)進(jìn)程從連接中分離出來,與worker模式不同的是在于它解決了keep-alive長連接的時候占用線程資源被浪費的問題,在event工作模式中,會有一些專門的線程用來管理這些keep-alive類型的線程,當(dāng)有真實請求過來的時候,將請求傳遞給服務(wù)器的線程,執(zhí)行完畢后,又允許它釋放。這增強(qiáng)了在高并發(fā)場景下的請求處理。event模式不能很好的支持https的訪問(HTTP認(rèn)證相關(guān)的問題)。

(prefork、worker和event三種模式之間的轉(zhuǎn)換,請參考prefork模式的注6,轉(zhuǎn)換方法都是一樣的。)

2、apache配置參數(shù)

深度剖析apache 2.4web服務(wù)器(史上最全)

1)KeepAlive On/Off

深度剖析apache 2.4web服務(wù)器(史上最全)(默認(rèn)是on)

KeepAlive指的是保持連接活躍,換一句話說,如果將KeepAlive設(shè)置為On,那么來自同一客戶端的請求就不需要再一次連接,避免每次請求都要新建一個連接而加重服務(wù)器的負(fù)擔(dān)。一般情況下,圖片較多的網(wǎng)站應(yīng)該把KeepAlive設(shè)為On。

2)KeepAliveTimeout number

深度剖析apache 2.4web服務(wù)器(史上最全)(默認(rèn)是5秒)

如果第二次請求和第一次請求之間超過KeepAliveTimeOut的時間的話,第一次連接就會中斷,再新建第二個連接。它的設(shè)置一般考慮圖片或者JS等文件兩次請求間隔,一般設(shè)置為3-5秒。

3)MaxKeepAliveRequests 100   

深度剖析apache 2.4web服務(wù)器(史上最全)(默認(rèn)是100次)

一次連接可以進(jìn)行的HTTP請求的最大請求次數(shù)。將其值設(shè)為0將支持在一次連接內(nèi)進(jìn)行無限次的傳輸請求。事實上沒有客戶程序在一次連接中請求太多的頁面,通常達(dá)不到這個上限就完成連接了。

4)HostnameLookups on | off | double

深度剖析apache 2.4web服務(wù)器(史上最全)(默認(rèn)是off,建議保持off)

如果是使用on,那么只有進(jìn)行一次反查,如果用double,那么進(jìn)行反查之后還要進(jìn)行一次正向解析,只有兩次的結(jié)果互相符合才行,而off就是不進(jìn)行域名驗證。

如果為了安全,建議使用double;為了加快訪問速度,建議使用off。

域名查找開啟這個會增加apache的負(fù)擔(dān), 減慢訪問速度建議關(guān)閉

5)timeout 5

推薦5 這個是 apache接受請求或者發(fā)出相應(yīng)的時間超過這個時間斷開

深度剖析apache 2.4web服務(wù)器(史上最全)(默認(rèn)60秒,建議調(diào)整為5秒)

注:以上配置項可在/usr/local/http-2.4.23/conf/extra/httpd-default.conf設(shè)置并在httpd.conf文件中通過include選項引用

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

MPM這個比較關(guān)鍵是影響并發(fā)效率的主要因素:

深度剖析apache 2.4web服務(wù)器(史上最全)

1)StartServers        10

  設(shè)置服務(wù)器啟動時建立的子進(jìn)程數(shù)量。因為子進(jìn)程數(shù)量動態(tài)的取決于負(fù)載的輕重,所以一般沒有必要調(diào)整這個參數(shù)。

2)MinSpareServers     10

  設(shè)置空閑子進(jìn)程的最小數(shù)量。所謂空閑子進(jìn)程是指沒有正在處理請求的子進(jìn)程。如果當(dāng)前空閑子進(jìn)程數(shù)少于MinSpareServers ,那么Apache將以最大每秒一個的速度產(chǎn)生新的子進(jìn)程。只有在非常繁忙機(jī)器上才需要調(diào)整這個參數(shù)。將此參數(shù)設(shè)的太大通常是一個壞主意。

3)MaxSpareThreads     75

  設(shè)置空閑子進(jìn)程的最大數(shù)量。如果當(dāng)前有超過MaxSpareServers數(shù)量的空閑子進(jìn)程,那么父進(jìn)程將殺死多余的子進(jìn)程。只有在非常繁忙機(jī)器上才需要調(diào)整這個參數(shù)。將此參數(shù)設(shè)的太大通常是一個壞主意。如果你將該指令的值設(shè)置為比MinSpareServers小,Apache將會自動將其修改成”MinSpareServers+1″。

4)ServerLimit       2000

  服務(wù)器允許配置的進(jìn)程數(shù)上限。只有在你需要將MaxClients設(shè)置成高于默認(rèn)值256的時候才需要使用。要將此指令的值保持和MaxClients一樣。修改此指令的值必須完全停止服務(wù)后再啟動才能生效,以restart方式重啟動將不會生效。

5)MaxClients/MaxRequestWorkers         256

  用于客戶端請求的最大請求數(shù)量(最大子進(jìn)程數(shù)),任何超過MaxClients限制的請求都將進(jìn)入等候隊列。默認(rèn)值是256,如果要提高這個值必須同時提高ServerLimit的值。建議將初始值設(shè)為(以Mb為單位的最大物理內(nèi)存/2),然后根據(jù)負(fù)載情況進(jìn)行動態(tài)調(diào)整。比如一臺4G內(nèi)存的機(jī)器,那么初始值就是4000/2=2000。

6)MaxRequestsPerChild/MaxConnectionsPerChild 0

  設(shè)置的是每個子進(jìn)程可處理的請求數(shù)。每個子進(jìn)程在處理了“MaxRequestsPerChild”個請求后將自動銷毀。0意味著無限,即子進(jìn)程永不銷毀。內(nèi)存較大的服務(wù)器可以設(shè)置為0或較大的數(shù)字。內(nèi)存較小的服務(wù)器不妨設(shè)置成30、50、100。所以一般情況下,如果你發(fā)現(xiàn)服務(wù)器的內(nèi)存直線上升,建議修改該參數(shù)試試。

注:以上配置項可在/usr/local/http-2.4.23/conf/extra/httpd-mpm.conf設(shè)置并在httpd.conf文件中通過include選項引用

深度剖析apache 2.4web服務(wù)器(史上最全)

3、開啟apache的Gzip(deflate)功能

gzip可以極大的加速網(wǎng)站,有時壓縮比率高到80%,最少都有40%以上,還是相當(dāng)不錯的。在Apache2之后的版本,模塊名不叫g(shù)zip,而叫mod_deflate

未使用Gzip:

深度剖析apache 2.4web服務(wù)器(史上最全)

開啟使用Gzip:

深度剖析apache 2.4web服務(wù)器(史上最全)

如果要開啟moddeflate的話,一定要打開下面二個模塊:

LoadModule deflate_module modules/mod_deflate.so

LoadModule headers_module modules/mod_headers.so

設(shè)置壓縮比率,取值范圍在 1(最低) 到9(最高)之間,不建議設(shè)置太高,雖然有很高的壓縮率,但是占用更多的CPU資源。

mod_deflate模塊檢查及安裝:

深度剖析apache 2.4web服務(wù)器(史上最全)

看到到?jīng)]有有可能是沒有啟動,去httpd.conf配置文件看一下是否有deflate_module這個模塊。

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

現(xiàn)在兩個必須有的模塊都有了。

如果沒有安裝,則按下面幾種方法解決:

a.編譯時安裝方法

 編譯的時候跟上--enable-deflate即可實現(xiàn)安裝

b.DSO方式安裝

①先切到apache源碼包mod_deflate所在的目錄下

深度剖析apache 2.4web服務(wù)器(史上最全)

②以DSO的方式編譯安裝到apache中

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

注意:安裝mod_deflate模塊需要加參數(shù)“-I”,除此之外的其他的模塊都不需要“-I”。

③檢查mod_deflate和mod_headers是否安裝,成功安裝這里會顯示出該文件

深度剖析apache 2.4web服務(wù)器(史上最全)

④成功安裝完畢后,要優(yōu)雅啟動httpd服務(wù)

深度剖析apache 2.4web服務(wù)器(史上最全)

apxs命令參數(shù)說明:

-c  此選項表示需要執(zhí)行編譯操作。

-i  此選項表示需要執(zhí)行安裝操作,以安裝一個或多個動態(tài)共享對象到服務(wù)器的modules目錄中。

-a  此選項自動增加一個LoadModule行到httpd.conf文件中,以啟用此模塊,或者,如果此行已經(jīng)存在,則啟用之。

-I   此選項直接傳遞到給連接命令,用于增加自定義的庫文件。

額外說明個參數(shù):

-A  與 -a 選項類似,但是它增加的LoadModule命令有一個井號前綴(#),即此模塊已經(jīng)準(zhǔn)備就緒但尚未啟用。

注:如果的其他httpd版本實驗環(huán)境下(如httpd2.2.17)

#/usr/local/http2.2/bin/apxs -c -i -a /root/httpd-2.2.17/modules/metadata/mod_deflate.c

#/usr/local/http2.2/bin/apxs -c -i -a/root/httpd-2.2.17/modules/metadata/mod_headers.c

如果重啟的時候出現(xiàn)錯誤:

引用出現(xiàn)的錯誤:

Cannotload /usr/local/apache/modules/mod_deflate.so into server: /usr/local/apache/modules/mod_deflate.so:undefined symbol: inflateEnd

則解決辦法如下:

需要在

LoadModuledeflate_module  modules/mod_deflate.so 的前面加載zlib.so

這里需要注意的是LoadModule deflate_module需要放在LoadModulephp5_module之后

說明如下:

LoadFile/usr/lib/libz.so(x64系統(tǒng)中該庫文件位于/usr/lib64目錄下,可以軟鏈接到/usr/lib下。注:如果在本實驗環(huán)境下(即httpd2.4.24)ln -s  /usr/local/zlib/lib/libz.so  /usr/lib/)

LoadModuledeflate_module     modules/mod_deflate.so

重新啟動httpd:

#/usr/local/http2.4.23/bin/apachectl graceful #優(yōu)雅啟動httpd服務(wù)

附:安裝一個沒有模塊怎么安裝?

深度剖析apache 2.4web服務(wù)器(史上最全)

修改Apache配置文件開啟gzip壓縮傳輸:

httpd.conf修改、增加配置參數(shù):

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

說明:打開httpd.conf后,先將上面兩行配置前面的#號去掉,這樣apache就會啟用這兩個模塊,其中mod_deflate是壓縮模塊,就是對要傳輸?shù)娇蛻舳说拇a進(jìn)行g(shù)zip壓縮;mod_headers模塊的作用是告訴瀏覽器頁面使用了gzip壓縮,如果不開啟mod_headers那么瀏覽器就會對gzip壓縮過的頁面進(jìn)行下載,而無法正常顯示。

②在httpd.conf中加入以下代碼,可以加到任何空白地方,不了解apache的話,如果擔(dān)心加錯地方,就放到http.conf文件的最后一行。

注意:在添加代碼前最好先查一查要添加的那兩個代碼,一定保證是存在的。

深度剖析apache 2.4web服務(wù)器(史上最全)

每行意思解釋如下:

<IfModule mod_deflate.c>

        DeflateCompressionLevel6     #壓縮程度的等級,預(yù)設(shè)可以采用 6 這個數(shù)值,以維持耗用處理器效能與網(wǎng)頁壓縮質(zhì)量的平衡。

        SetOutputFilterDEFLATE    #設(shè)置輸出過濾器,對輸出啟用壓縮,必須的,就像一個開關(guān)一樣,告訴apache對傳輸?shù)綖g覽器的內(nèi)容進(jìn)行壓縮

        #AddOutputFilterByTypeDEFLATE text/html text/plain text/xml application/x-javascriptapplication/x-httpd-php

        #AddOutputFilterByType DEFLATE p_w_picpath/*

        AddOutputFilterByType DEFLATE text/*   #設(shè)置對文件是文本的內(nèi)容進(jìn)行壓縮,例如text/html  text/css text/plain等.

        AddOutputFilterByTypeDEFLATE application/ms* application/vnd* application/postscriptapplication/javascript application/x-javascript          #對javascript文件進(jìn)行壓縮

        AddOutputFilterByTypeDEFLATE application/x-httpd-php application/x-httpd-fastphp  #對php類型的文件進(jìn)行壓縮.

        SetEnvIfNoCaseRequest_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary  #設(shè)置不對后綴gif,jpg,jpeg,png的圖片文件進(jìn)行壓縮。注:?:表示不會捕獲 ( )里內(nèi)容了

        SetEnvIfNoCaseRequest_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary

#同上,就是設(shè)置不對exe,tgz,gz等的文件進(jìn)行壓縮

        SetEnvIfNoCaseRequest_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary #同上就是設(shè)置不對pdf,avi,mp3等的文件進(jìn)行壓縮

</IfModule>

設(shè)置日志輸出!

深度剖析apache 2.4web服務(wù)器(史上最全)

每行意思解釋如下:

DeflateFilterNoteInput input_info#聲明輸入流的byte數(shù)量

DeflateFilterNoteOutput output_info#聲明輸出流的byte數(shù)量

DeflateFilterNoteRatio ratio_info#聲明壓縮的百分比

LogFormat'"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate#聲明日志格式

CustomLoglogs/deflate_log.log deflate

修改完成后保存退出并重啟httpd服務(wù)(優(yōu)雅啟動):

深度剖析apache 2.4web服務(wù)器(史上最全)

使用谷歌瀏覽器測試訪問,如下圖顯示結(jié)果:(提示:在訪問測試頁之前按F12鍵):

在index.html里面加點數(shù)據(jù),增大它的文件大小,另外再傳一個測試圖片:

深度剖析apache 2.4web服務(wù)器(史上最全)

正式開始測試:

在谷歌瀏覽器,按F12:

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

查看日志:

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

:圖片是不需要啟用GZip壓縮的,,如果不設(shè)置SetEnvIfNoCaseRequest_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary  ,則從GZip檢測結(jié)果來看,壓縮后的圖片體積竟然大過原體積!這就解釋了為什么圖片不用啟用GZip壓縮的原因了?。?span >其實有些圖片壓縮還是會變小的,大多數(shù)反而壓縮了會變大

      可以檢測了幾個門戶網(wǎng)站的圖片,還有Google、baidu的圖片,統(tǒng)統(tǒng)都沒有啟用圖片GZip壓縮,只是啟用了html、css、js等文件的GZip壓縮,這就更加說明了GZip壓縮不適用于圖片上。另外,除了圖片之外,flash的swf文件也是不用啟用GZip壓縮的。

4、配置mod_expires模塊

這個非常有用的優(yōu)化,mod_expires可以減少20-30%左右的重復(fù)請求,讓重復(fù)的用戶對指定的頁面請求結(jié)果都CACHE在本地,根本不向服務(wù)器發(fā)出請求。但要注意更新快的文件不要這么做。

這個模塊控制服務(wù)器應(yīng)答時的Expires頭內(nèi)容和Cache-Control頭的max-age指令。有效期(expiration date)可以設(shè)置為相對于源文件的最后修改時刻或者客戶端的訪問時刻。

未啟用expire的效果:

深度剖析apache 2.4web服務(wù)器(史上最全)

啟用expire緩存:

mod_expires的安裝配置:

啟用expires_module

深度剖析apache 2.4web服務(wù)器(史上最全)

②添加Expires配置規(guī)則

深度剖析apache 2.4web服務(wù)器(史上最全)

③優(yōu)雅啟動服務(wù)

深度剖析apache 2.4web服務(wù)器(史上最全)

④驗證

深度剖析apache 2.4web服務(wù)器(史上最全)

ExpiresDefault 和ExpiresByType 指令同樣能夠用易懂的語法格式進(jìn)行定義

ExpiresDefault"<base> [plus] {<num><type>}"

ExpiresByTypetype/encoding "<base> [plus] {<num><type>}"

其中<base>是下列之一:

  • access

  • now (等價于'access')

  • modification

plus關(guān)鍵字是可選的。<num>必須是整數(shù),<type>是下列之一:

  • years

  • months

  • weeks

  • days

  • hours

  • minutes

  • seconds

例如,下列3個指令都表示文檔默認(rèn)的有效期是一個月:

ExpiresDefault"access plus 1 month"

ExpiresDefault"access plus 4 weeks"

ExpiresDefault"access plus 30 days"

有效期可以通過增加"<num><type>"子句進(jìn)一步調(diào)整:

ExpiresByTypetext/html "access plus 1 month 15 days 2 hours"

ExpiresByTypep_w_picpath/gif "modification plus 5 hours 3 minutes"

注意,如果你使用基于最后修改日期的設(shè)置,"Expires:"頭將不會 被添加到那些并非來自于磁盤文件的內(nèi)容。這是因為這些內(nèi)容并不存在"最后修改時間"的屬性。

 

#GIF有效期為1個月(秒數(shù))

ExpiresByTypep_w_picpath/gif A2592000

ExpiresByTypep_w_picpath/jpeg A2592000

ExpiresByTypep_w_picpath/png A2592000

ExpiresByTypep_w_picpath/x-icon A2592000

ExpiresByTypeapplication/x-javascript A604800

ExpiresByTypetext/plain A604800

#HTML文檔的有效期是最后修改時刻后的一星期

ExpiresByTypetext/html M604800

</IfModule>

"M"表示源文件的最后修改時刻,"A"表示客戶端對源文件的訪問時刻。后面的時間則以秒計算。

有關(guān) Apache Expires Module 的介紹,可以參閱其官方文檔:

http://httpd.apache.org/docs/2.4/mod/mod_expires.html

5、Apache禁止目錄遍歷

將Options Indexes FollowSymLinks中的Indexes 去掉,就可以禁止 Apache 顯示該目錄結(jié)構(gòu)。Indexes 的作用就是當(dāng)該目錄下沒有 index.html文件時,就顯示目錄結(jié)構(gòu)。

我們先來看看什么是目錄遍歷:

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

遍歷目錄就是把/usr/local/http-2.4.23/htdocs目錄下的文件和子目錄全是顯示出來,這樣做是很不安全的。

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

6、apache隱藏版本信息

測試默認(rèn) apache 的狀態(tài)信息:

深度剖析apache 2.4web服務(wù)器(史上最全)

①主配置中啟用httpd-default.conf

去掉484行的注釋“#”:

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

②修改httpd-default.conf

深度剖析apache 2.4web服務(wù)器(史上最全)

改成下圖所示的配置:

深度剖析apache 2.4web服務(wù)器(史上最全)

③優(yōu)雅啟動httpd服務(wù)

深度剖析apache 2.4web服務(wù)器(史上最全)

④測試隱藏版本號后 apache 的狀態(tài)信息(還是能看見是apache,但是apache的版本看不見了)

深度剖析apache 2.4web服務(wù)器(史上最全)

⑤如果需要徹底將版本之類的信息進(jìn)行改頭換面,你就需要在編譯之前做準(zhǔn)備或者進(jìn)行從新編譯了。在重新編譯時,修改源碼包下include目錄下的ap_release.h文件

#define AP_SERVER_BASEVENDOR "Apache Software Foundation"#服務(wù)的供應(yīng)商名稱

#define AP_SERVER_BASEPROJECT "Apache HTTPServer"  #服務(wù)的項目名稱

#define AP_SERVER_BASEPRODUCT "Apache"        #服務(wù)的產(chǎn)品名

#define AP_SERVER_MAJORVERSION_NUMBER 2  #主要版本號

#define AP_SERVER_MINORVERSION_NUMBER 4  #小版本號

#define AP_SERVER_PATCHLEVEL_NUMBER 23  #補(bǔ)丁級別

#define AP_SERVER_DEVBUILD_BOOLEAN  0  #

上述列出的行,已經(jīng)給出了注釋,大家可以修改成自己想要的,然后編譯安裝之后,對方就徹底不知道你的版本號了。

7、Apache日志切割

為什么要分割日志?

隨著網(wǎng)站的訪問越來越大,WebServer產(chǎn)生的日志文件也會越來越大,如果不對日志進(jìn)行分割,那么只能一次將大的日志(如Apache的日志)整個刪除,這樣也丟失了很多對網(wǎng)站比較寶貴的信息,因為這些日志可以用來進(jìn)行訪問分析、網(wǎng)絡(luò)安全監(jiān)察、網(wǎng)絡(luò)運行狀況監(jiān)控等,因此管理好這些海量的日志對網(wǎng)站的意義是很大的。

方法1:使用rotatelogs(apache自帶的工具)每隔一天記錄一個日志

編輯Apache的主配置文件,更改內(nèi)容如下:

深度剖析apache 2.4web服務(wù)器(史上最全)

注釋掉如下兩行:

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

然后再添加如下兩行:

深度剖析apache 2.4web服務(wù)器(史上最全)

截圖中內(nèi)容如下:

ErrorLog"|/usr/local/http-2.4.23/bin/rotatelogs -l logs/error_%Y%m%d.log86400"

CustomLog"|/usr/local/http-2.4.23/bin/rotatelogs -l logs/access_%Y%m%d.log86400" combined

:其中86400為輪轉(zhuǎn)的時間單位為秒

驗證:查看logs目錄下的日志文件 

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

:優(yōu)雅啟動后會立即產(chǎn)生error日志,但是要一臺客戶機(jī)訪問一下這臺web服務(wù)器,才會產(chǎn)生access日志。

說明:由于apache自帶的日志輪詢工具rotatelogs,據(jù)說在進(jìn)行日志切割時容易丟日志,因此我們通常使用cronolog進(jìn)行日志輪詢。

方法2、使用 cronolog 為每一天建立一個新的日志

安裝cronolog程序:

深度剖析apache 2.4web服務(wù)器(史上最全)

同上一種方法所示,注釋掉276和305兩行:

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

添加如下兩行:

深度剖析apache 2.4web服務(wù)器(史上最全)

說明:如果Apache中有多個虛擬主機(jī),最好每個虛擬主機(jī)中放置一個這樣的代碼,并將日志文件名改成不同的名字。

擴(kuò)展

①這個保證了每天一個文件夾文件夾下每個小時產(chǎn)生一個log

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

②按天輪詢(生產(chǎn)環(huán)境常見用法,推薦使用):

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

③按小時輪詢(生產(chǎn)環(huán)境較常見用法):

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

注意:第一種方法和第二種方法這兩個管道日志文件程序(即“|”)還有一點不同之處是使用cronolog 時如果日志是放在某個不存在的路徑則會自動創(chuàng)建目錄,而使用 rotatelogs 時不能自動創(chuàng)建,這一點要特別注意

7、配置防盜鏈

說明:有時候,你的網(wǎng)站莫名其妙的訪問量變大,不要高興的太早,有可能是被別人盜鏈了。

舉個例子:比如你搭了個discuz論壇,里面有些熱點圖片、視頻;然后別人將他網(wǎng)站上訪問圖片的地址重定向到你的discuz上,這樣他的服務(wù)器就可以空閑出來了;也就是說別人訪問他網(wǎng)站的圖片視頻,消耗的確是你服務(wù)器的資源;

解決這個問題的方法是配置下防盜鏈,讓外來的盜不了鏈。

方法1:Apache 防盜鏈的第一種實現(xiàn)方法,可以用rewrite實現(xiàn)。

首先要確認(rèn) Apache 的rewrite module可用:

深度剖析apache 2.4web服務(wù)器(史上最全)

從上圖可以看出沒有rewrite module模塊,有兩種原因,一是沒有下載安裝,二就是沒有啟用,我們先去看看httpd主配置文件里面有沒有rewrite module這塊模塊,是不是沒啟動,如果有啟動即可。

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

(去掉158行的注釋“#”即可)

深度剖析apache 2.4web服務(wù)器(史上最全)

然后在找到自己網(wǎng)站對應(yīng)的配置的地方(如在主配置文件中或虛擬主機(jī)中),加入下列代碼:

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

截圖中內(nèi)容如下:

RewriteEngineOn

RewriteCond%{HTTP_REFERER} !^$

RewriteCond%{HTTP_REFERER} !benet\.com/.*$ [NC]

RewriteCond%{HTTP_REFERER} !www\.benet\.com/.*$ [NC]

RewriteRule.*\.(gif|jpg|swf)$ http://www.benet.com/about/nolink.png[R,NC,L]

注:相關(guān)選項的解釋

1.RewriteEngine On #啟用rewrite,要想rewrite起作用,必須要寫上

2.RewriteCond test-string condPattern #寫在RewriteRule之前,可以有一或N條,用于測試rewrite的匹配條件,具體怎么寫,后面會詳細(xì)說到。

3.RewriteRule Pattern Substitution #規(guī)則

4.%{HTTP_REFERER}:服務(wù)器變量,HTTPReferer是header的一部分,當(dāng)瀏覽器向web服務(wù)器發(fā)送請求的時候,一般會帶上Referer,告訴服務(wù)器我是從哪個頁面鏈接過來的,服務(wù)器藉此可以獲得一些信息用于處理。比如從我主頁上鏈接到一個朋友那里,他的服務(wù)器就能夠從HTTP Referer中統(tǒng)計出每天有多少用戶點擊我主頁上的鏈接訪問他的網(wǎng)站。

5.[ NC]指的是不區(qū)分大小寫,[R]強(qiáng)制重定向 redirect

6.字母L表示如果能匹配本條規(guī)則,那么本條規(guī)則是最后一條(Last),忽略之后的規(guī)則

防盜鏈配置的說明:

1.  紅色部分: 表示自己的信任站點。對我的站點來說,設(shè)置為 http://www.benet.com 和 http://benet.com

2.  綠色部分: 要保護(hù)文件的擴(kuò)展名(以|分開)。以這些為擴(kuò)展名的文件,必須通過紅色標(biāo)注的網(wǎng)址引用,才可以訪問。

3.  藍(lán)色部分: 定義被盜鏈時替代的圖片,讓所有盜鏈 jpg、gif、swf 等文件的網(wǎng)頁,顯示網(wǎng)頁文檔根目錄下的about/ nolink.png 文件。注意:替換顯示的圖片不要放在設(shè)置防盜鏈的目錄中,并且該圖片文件體積越小越好。當(dāng)然你也可以不設(shè)置替換圖片,而是使用下面的語句即可:RewriteRule .*\.(gif|jpg|png)$ - [F]

深度剖析apache 2.4web服務(wù)器(史上最全)

:[F] (強(qiáng)制URL為被禁止的forbidden),強(qiáng)制當(dāng)前URL為被禁止的,即,立即反饋一個HTTP響應(yīng)代碼403(被禁止的)。

RewriteCond%{HTTP_REFERER}!^$

上面這一行意在允許空“HTTP_REFERER”的訪問,即允許用戶在瀏覽器地址欄中直接輸入圖片地址時圖片文件的顯示。

RewriteCond %{HTTP_REFERER} !benet\.com/.*$ [NC]

RewriteCond %{HTTP_REFERER} !www\.benet\.com/.*$ [NC]

設(shè)置允許訪問的HTTP來源,包括網(wǎng)站自身。

RewriteRule .*\.(gif|jpg|swf)$ http://www.benet.com/about/nolink.png[R,NC,L]

將不滿足referer條件的訪問重定向至nolink.png。nolink.png位于允許“盜鏈”的目錄about中,要相當(dāng)注意,不然,警告信息和圖片將無法在對方網(wǎng)站上顯示。

注意:測試時要清除濟(jì)瀏覽器緩存

現(xiàn)在開始測試

①在httpd主配置文件末尾新加入了那五行,保存退出,要優(yōu)雅啟動


深度剖析apache 2.4web服務(wù)器(史上最全)

②準(zhǔn)備兩張測試圖片

深度剖析apache 2.4web服務(wù)器(史上最全)

③在httpdB的首頁上盜鏈(即做超鏈接)httpdA網(wǎng)站的paoche.jpg資源

深度剖析apache 2.4web服務(wù)器(史上最全)

④修改httpdB和客戶機(jī)的hosts文件

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

⑤在一臺客戶機(jī)上進(jìn)行測試

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

實驗成功了,需要注意的是,如果是在實驗環(huán)境下,不要忘記開啟兩臺web服務(wù)器的80端口例外。

方法2:通過判斷瀏覽器頭信息來阻止某些請求,即利用SetEnvIfNoCase和access。

說明:這個方法可以通過阻止某些機(jī)器人或蜘蛛爬蟲抓取你的網(wǎng)站來節(jié)省你的帶寬流量。

語法: SetEnvIfNoCase attribute regex [!]env-variable[=value][[!]env-variable[=value]] ...

SetEnvIfNoCase當(dāng)滿足某個條件時,為變量賦值,即根據(jù)客戶端請求屬性設(shè)置環(huán)境變量。

:Referer :指明了請求當(dāng)前資源原始資源的URL,使用referer是可以防盜鏈。

然后在找到自己網(wǎng)站對應(yīng)的配置的地方(如在主配置文件中或虛擬主機(jī)中),加入下列代碼:

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

截圖中內(nèi)容如下:

SetEnvIfNoCaseReferer "^$" local_ref

SetEnvIfNoCaseReferer "www.benet.com/.*$" local_ref

SetEnvIfNoCaseReferer "benet.com/.*$" local_ref

<filesmatch"\.(mp3|mp4|zip|rar|jpg|gif)">

# 2.4版本以下的,接著新添加如下內(nèi)容:

方法一

    Order Deny,Allow

    Allow from env=local_ref

    Deny from all

方法二

    Order Allow,Deny

Allow from env=local_ref

#2.4版本以上,接著新添加如下內(nèi)容:

深度剖析apache 2.4web服務(wù)器(史上最全)

截圖中內(nèi)容如下:

Require alldenied

    Require env local_ref

</filesmatch>

下面開始測試:

①修改完了httpd主配置文件,要優(yōu)雅啟動:

深度剖析apache 2.4web服務(wù)器(史上最全)

②在一臺客戶機(jī)上測試(先清除客戶機(jī)的瀏覽器緩存,再測試

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

三、fcgi模式編譯安裝LAMP+xcache

php的工作模式:

php在lamp環(huán)境下共有三種工作模式:CGI模式、apache模塊、FastCGI模式。CGI模式下運行PHP,性能不是很好。作為apache的模塊方式運行,在以前的課程中編譯安裝lamp已經(jīng)介紹過了。FastCGI的方式和apache模塊的不同點在于:FastCGI方式PHP是一處獨立的進(jìn)程,所有PHP子進(jìn)程都由PHP的一個叫作php-fpm的組件負(fù)責(zé)管理;而apache模塊化方式運行的PHP,則是apache負(fù)責(zé)調(diào)用PHP完成工作。PHP的FastCGI方式性能要比apache模塊化方式強(qiáng)很多,今天我們以FastCGI方式編譯安裝lamp。

FastCGI工作機(jī)制:

首先客戶端發(fā)起請求,請求分為2種,一種是靜態(tài)請求它可以直接由Apache直接響應(yīng)返回;另一種是動態(tài)的請求,如其中包含中php或者Perl這種腳本解釋性語言,則由Apache服務(wù)器通過fastcgi協(xié)議調(diào)用php服務(wù)器執(zhí)行并返回給Apache由Apache返回解釋執(zhí)行后的結(jié)果,如果這個過程中涉及到對數(shù)據(jù)的操作,此時php服務(wù)器還會還會通過mysql協(xié)議調(diào)用mysql服務(wù)器。

深度剖析apache 2.4web服務(wù)器(史上最全)

編譯環(huán)境及各軟件版本:


Linux

Web服務(wù)器

Php

Mysql數(shù)據(jù)庫

xcache

Centos7.2

Httpd-2.4.23

php-5.4.26

Mysql5.7

xcache-3.1.0

主機(jī)規(guī)劃

至少3臺主機(jī),操作系統(tǒng)都是centos7.2.網(wǎng)段在192.168.1.0,

 網(wǎng)關(guān)192.168.1.1

分配如下:

1臺httpd服務(wù)器(192.168.1.7)

1臺php服務(wù)器(192.168.1.8)

1臺mysql服務(wù)器(192.168.1.9)

編譯安裝LAMP

  • 編譯安裝apache(請參考前面apache的安裝)

  • 編譯安裝mysql(請參考mysql安裝)

  • FastCGI方式安裝php

下面安裝php服務(wù)器

1、解決依賴關(guān)系

深度剖析apache 2.4web服務(wù)器(史上最全)

安裝libmcrypt:

深度剖析apache 2.4web服務(wù)器(史上最全)

2、編譯安裝php

深度剖析apache 2.4web服務(wù)器(史上最全)

上面截圖的內(nèi)容如下

./configure--prefix=/usr/local/php5.6 --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd--with-mysqli=mysqlnd --with-openssl --enable-fpm --enable-sockets --enable-sysvshm--enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir--with-zlib --with-libxml-dir=/usr --enable-xml --with-mhash--with-mcrypt=/usr/local/libmcrypt --with-config-file-path=/etc--with-config-file-scan-dir=/etc/php.d --with-bz2--enable-maintainer-zts &&make && make install

相關(guān)選項的解釋:

--prefix=/usr/local/php5.6            //安裝位置

--with-mysql=mysqlnd               //支持mysql

--with-pdo-mysql=mysqlnd          //支持pdo模塊

--with-mysqli=mysqlnd              //支持mysqli模塊

:上面的選項的作用:數(shù)據(jù)庫與php不在一個服務(wù)器上,指定此種方式,安裝數(shù)據(jù)庫連接驅(qū)動

--with-openssl                      //支持openssl模塊

--enable-fpm                       //支持fpm模式

--enable-sockets                   //啟用socket支持

--enable-sysvshm                  //啟用系統(tǒng)共享內(nèi)存支持

--enable-mbstring                 //多字節(jié)字串、像我們的中文就是多字節(jié)字串

--with-freetype-dir             //支持freetype、就要裝freetype-devel、跟字體相關(guān)的、字體解析工具

--with-jpeg-dir

--with-png-dir

注:上面的選項的作用:處理jpeg、png圖片的、php可以動態(tài)生成jpeg圖片

--with-zlib                         //是個壓縮庫、在互聯(lián)網(wǎng)傳輸時用來壓縮傳輸?shù)?/span>

--with-libxml-dir=/usr              //這個libxml是用來解析xml的、指定/usr下

--enable-xml                       //支持xml的

--with-mhash                      //支持mhash

--with-mcrypt=/usr/local/libmcrypt  //libmcrypt-devel這個程序包所指定的

--with-config-file-path=/etc      //指定配置文件的存放路徑的

--with-config-file-scan-dir=/etc/php.d    //配置文件掃描路徑

--with-bz2                      //支持BZip2

為了支持apache的worker或event這兩個MPM,編譯時使用了--enable-maintainer-zts選項

說明:如果使用PHP5.3以上版本,為了鏈接MySQL數(shù)據(jù)庫,可以指定mysqlnd,這樣在本機(jī)就不需要先安裝MySQL或MySQL開發(fā)包了。mysqlnd從php5.3開始可用,可以編譯時綁定到它(而不用和具體的MySQL客戶端庫綁定形成依賴),但從PHP 5.4開始它就是默認(rèn)設(shè)置了。

3、提供php配置文件

深度剖析apache 2.4web服務(wù)器(史上最全)

4、為php-fpm提供腳本

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

5、提供php-fpm配置文件并編輯

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

啟動php-fpm服務(wù):

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

在該主機(jī)上新建虛擬主機(jī)目錄用于存放網(wǎng)頁文件:

深度剖析apache 2.4web服務(wù)器(史上最全)

至此php安裝配置完畢,下面配置apache通過fastcgi協(xié)議調(diào)用php。

6、配置apache(切換到apache主機(jī)上操作)

說明:在Apache2.4以后已經(jīng)專門有一個模塊針對FastCGI的實現(xiàn),此模塊為mod_proxy_fcgi.so,它其實是作為mod_proxy.so模塊的擴(kuò)充,因此,這兩個模塊都要加載。

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

下面這兩行去掉注釋“#”即可:

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

建立一個目錄作為虛擬主機(jī)的家目錄:

深度剖析apache 2.4web服務(wù)器(史上最全)

編輯主配置文件httpd.conf,開啟虛擬主機(jī):

深度剖析apache 2.4web服務(wù)器(史上最全)

去掉下面這一行的注釋“#”:

深度剖析apache 2.4web服務(wù)器(史上最全)

同時定位 AddType;添加下面兩行:讓apache能識別php格式的頁面:

深度剖析apache 2.4web服務(wù)器(史上最全)

并且定位至DirectoryIndex:支持php格式的主頁(添加index.php(最好添加在最前面)

深度剖析apache 2.4web服務(wù)器(史上最全)

配置虛擬主機(jī)支持使用fcgi:

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

截圖的內(nèi)容如下:

<VirtualHost*:80>

    ServerAdmin webmaster@benet.com

    DocumentRoot "/var/www/benet"

    ServerName www.benet.com

    ServerAlias benet.com

    ErrorLog"logs/benet.com-error_log"

    CustomLog"logs/benet.com-access_log" common

    ProxyRequests Off

    ProxyPassMatch ^/(.*\.php(/.*)?)$  fcgi://192.168.1.8:9000/var/www/benet/$1

    #<LocationMatch"^(.*\.php(/.*)?)$">

    #ProxyPassfcgi://192.168.1.8:9000/var/www/benet

    #</LocationMatch>

    <Directory"/var/www/benet">

    Options FollowSymLinks

    AllowOverride None

    Require all granted

    </Directory>

</VirtualHost>

注意:本配置文件下面的那個虛擬主機(jī)實例刪除掉。

上面的配置項解釋如下:

ProxyRequests off       #關(guān)閉正向代理

ProxyPassMatch         #把以.php結(jié)尾的文件請求發(fā)送到php-fpm進(jìn)程,php-fpm至少需要知道運行的目錄和URI,所以這里直接在fcgi://192.168.1.8:9000后指明了這兩個參數(shù),其它的參數(shù)的傳遞已經(jīng)被mod_proxy_fcgi.so進(jìn)行了封裝,不需要手動指定。

特別注意的是,紅色字體部分需要與<VirtualHost >中的 DocumentRoot 后的路徑一致,ProxyPassMatch只有滿足特定正則模式的內(nèi)容才會匹配并執(zhí)行此規(guī)則,這里的模式是,^/(.*\.php(/.*)?)$

從網(wǎng)站(虛擬主機(jī)<VirtualHost >的根目錄開始,匹配任何以 .php 結(jié)尾,或者在 .php 之后緊跟一個 / 再跟別的內(nèi)容的路徑。

^(caret) 和 $ (dollar)標(biāo)志要匹配的路徑的開始和結(jié)束

()括號里的內(nèi)容可以用 $1 來表示,以方便后面引用它。

fcgi://192.168.1.81:9000通過 mod_proxy_fcgi 來轉(zhuǎn)發(fā)的代理,使用 fastCGI 協(xié)議,轉(zhuǎn)到 PHP-FPM 監(jiān)聽的端口。

/path/to/your/documentroot/

非常重要!必須與虛擬主機(jī)的路徑匹配,且必須是對應(yīng) php 文件在操作系統(tǒng)中的絕對路徑。否則會找不到文件。

$1可以從原始請求擴(kuò)展成整個請求路徑的變量,這里指代前面( ) 里面匹配的那個路徑(uri)

補(bǔ)充:Apache httpd 2.4以前的版本中,要么把PHP作為Apache的模塊運行,要么添加一個第三方模塊支持PHP-FPM實現(xiàn)。

優(yōu)雅啟動httpd服務(wù):

深度剖析apache 2.4web服務(wù)器(史上最全)

下面測試LAMP環(huán)境:

先在mysql主機(jī)上創(chuàng)建用于php服務(wù)器連接的mysql賬戶:

深度剖析apache 2.4web服務(wù)器(史上最全)

Mysql服務(wù)器防火墻上開啟3306端口例外:

深度剖析apache 2.4web服務(wù)器(史上最全)

在php服務(wù)器上的/var/www/benet目錄下創(chuàng)建.php的測試頁:

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

不要忘記web服務(wù)器也要開啟80端口例外:

深度剖析apache 2.4web服務(wù)器(史上最全)

在客戶機(jī)上訪問php測試頁:

現(xiàn)在客戶機(jī)的hosts文件里面添加映射關(guān)系:

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

可以看到上面兩個測試頁說明apache、php、mysql之間可以協(xié)同工作了。

7、壓力測試

網(wǎng)站性能壓力測試是服務(wù)器網(wǎng)站性能調(diào)優(yōu)過程中必不可缺少的一環(huán)。只有讓服務(wù)器處在高壓情況下,才能真正體現(xiàn)出軟件、硬件等各種設(shè)置不當(dāng)所暴露出的問題。

性能測試工具目前最常見的有以下幾種:ab、http_load、webbench、siege。今天我們專門來介紹ab。

ab是apache自帶的壓力測試工具。ab非常實用,它不僅可以對apache服務(wù)器進(jìn)行網(wǎng)站訪問壓力測試,也可以對或其它類型的服務(wù)器進(jìn)行壓力測試。比如nginx、tomcat、IIS等。

下面我們開始介紹有關(guān)ab命令的使用:

1.a(chǎn)b的原理

2.a(chǎn)b的安裝

3.a(chǎn)b參數(shù)說明

4.a(chǎn)b性能指標(biāo)

5.a(chǎn)b實際使用

6.測試nginx性能

1)ab的原理

ab是apachebench命令的縮寫。

ab的原理:ab命令會創(chuàng)建多個并發(fā)訪問線程,模擬多個訪問者同時對某一URL地址進(jìn)行訪問。它的測試目標(biāo)是基于URL的,因此,它既可以用來測試apache的負(fù)載壓力,也可以測試nginx、lighthttp、tomcat、IIS等其它Web服務(wù)器的壓力。

ab命令對發(fā)出負(fù)載的計算機(jī)要求很低,它既不會占用很高CPU,也不會占用很多內(nèi)存。但卻會給目標(biāo)服務(wù)器造成巨大的負(fù)載,其原理類似CC***。自己測試使用也需要注意,否則一次上太多的負(fù)載??赡茉斐赡繕?biāo)服務(wù)器資源耗完,嚴(yán)重時甚至導(dǎo)致死機(jī)。

2)ab的安裝

ab的安裝非常簡單,如果是源碼安裝apache的話,那就更簡單了。apache安裝完畢后ab命令存放在apache安裝目錄的bin目錄下。如下:

深度剖析apache 2.4web服務(wù)器(史上最全)

注意1如果apache是通過yum的RPM包方式安裝的話,ab命令默認(rèn)存放在/usr/bin目錄下。

注意2:注意:如果不想安裝apache但是又想使用ab命令的話,我們可以直接安裝apache的工具包httpd-tools。如下:

yum-y install httpd-tools

 

查看ab是否安裝成功,可以切換到上述目錄下,使用ab –V命令進(jìn)行檢測。如下:

深度剖析apache 2.4web服務(wù)器(史上最全)

上圖顯示檢測結(jié)果報錯了,以下是解決辦法

①先用find命令查看一下

深度剖析apache 2.4web服務(wù)器(史上最全)

②在搜索庫文件的文件里添加libssl.so.1.0.0的路徑

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

③執(zhí)行l(wèi)dconfig命令使其修改生效

深度剖析apache 2.4web服務(wù)器(史上最全)

現(xiàn)在我們再來次查看檢測一次:

深度剖析apache 2.4web服務(wù)器(史上最全)

從上圖看,問題已經(jīng)解決了,可以查看到了。

3)ab參數(shù)說明

有關(guān)ab命令的使用,我們可以通過幫助命令進(jìn)行查看。如下:

深度剖析apache 2.4web服務(wù)器(史上最全)

下面我們對這些參數(shù),進(jìn)行相關(guān)說明。如下:

-n:在測試會話中所執(zhí)行的請求個數(shù)(即總請求數(shù))。

-c:一次產(chǎn)生的請求個數(shù)(即并發(fā)用戶數(shù))。

下面開始進(jìn)行壓力測試:

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

上圖中的這部分?jǐn)?shù)據(jù)用于描述每個請求處理時間的分布情況,比如以上測試,80%的請求處理時間都不超過63ms,這個處理時間是指前面的Time per request,即對于單個用戶而言,平均每個請求的處理時間。

繼續(xù)壓力測試

我們再來進(jìn)行一次壓力測試,此時并發(fā)用戶數(shù)為1000,其他條件不變,查看兩次測試結(jié)果的吞吐量差別。

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

4)ab性能指標(biāo)

在進(jìn)行性能測試過程中有幾個指標(biāo)比較重要:

1、吞吐率(Requests per second)

服務(wù)器并發(fā)處理能力的量化描述,單位是reqs/s,指的是在某個并發(fā)用戶數(shù)下單位時間內(nèi)處理的請求數(shù)。某個并發(fā)用戶數(shù)下單位時間內(nèi)能處理的最大請求數(shù),稱之為最大吞吐率。

記?。和掏侣适腔诓l(fā)用戶數(shù)的。這句話代表了兩個含義:

a、吞吐率和并發(fā)用戶數(shù)相關(guān)

b、不同的并發(fā)用戶數(shù)下,吞吐率一般是不同的

計算公式:總請求數(shù)/處理完成這些請求數(shù)所花費的時間,即

Requestper second=Complete requests/Time taken for tests

必須要說明的是,這個數(shù)值表示當(dāng)前機(jī)器的整體性能,值越大越好。

2、并發(fā)連接數(shù)(The number of concurrent connections)

并發(fā)連接數(shù)指的是某個時刻服務(wù)器所接受的請求數(shù)目,簡單的講,就是一個會話。

3、并發(fā)用戶數(shù)(Concurrency Level)

要注意區(qū)分這個概念和并發(fā)連接數(shù)之間的區(qū)別,一個用戶可能同時會產(chǎn)生多個會話,也即連接數(shù)。

4、用戶平均請求等待時間(Time per request)

計算公式:處理完成所有請求數(shù)所花費的時間/(總請求數(shù)/并發(fā)用戶數(shù)),即:

Timeper request=Time taken for tests/(Complete requests/ConcurrencyLevel)

5、服務(wù)器平均請求等待時間(Time per request:across all concurrentrequests)

計算公式:處理完成所有請求數(shù)所花費的時間/總請求數(shù),即:

Timetaken for/testsComplete requests

可以看到,它是吞吐率的倒數(shù)。

同時,它也等于用戶平均請求等待時間/并發(fā)用戶數(shù),即

Timeper request/Concurrency Level

8、CentOS7.2下安裝php加速軟件Xcache(在php主機(jī)上完成下面的操作)

事先說明一下:

php安裝目錄:/usr/local/php5.6

php.ini配置文件路徑:/etc/php.ini

php網(wǎng)頁根目錄:/var/www/benet

1)安裝xcache

wgethttp://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz        

 #下載

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

2)創(chuàng)建xcache緩存文件

深度剖析apache 2.4web服務(wù)器(史上最全)

3)拷貝xcache后臺管理程序到網(wǎng)站根目錄

深度剖析apache 2.4web服務(wù)器(史上最全)

4)配置php支持xcache

深度剖析apache 2.4web服務(wù)器(史上最全)

在最后一行添加以下內(nèi)容:

深度剖析apache 2.4web服務(wù)器(史上最全)

將xcache目錄拷貝到apache主機(jī)的網(wǎng)頁文檔目錄下:

深度剖析apache 2.4web服務(wù)器(史上最全)

5)測試

重啟php-fpm:

深度剖析apache 2.4web服務(wù)器(史上最全)

瀏覽器打開網(wǎng)站根目錄下面的xcache:

深度剖析apache 2.4web服務(wù)器(史上最全)

警告的原因就是:沒有設(shè)定系統(tǒng)的timezone。

說明:從PHP 5.1.0,當(dāng)對使用date() 等函數(shù)時,如果 timezone 設(shè)置不正確,在每一次調(diào)用時間函數(shù)時,都會產(chǎn)生 E_NOTICE 或者 E_WARNING 信息。而又在 PHP 5.1.0 中,date.timezone 這個選項,默認(rèn)情況下是關(guān)閉的,無論用什么PHP 命令都是格林威治標(biāo)準(zhǔn)時間,但是PHP 5.3 中好像如果沒有設(shè)置也會強(qiáng)行拋出了這個錯誤的,解決此問題,只要本地化一下就行了。

解決辦法如下:

①進(jìn)入php.ini配置文件

深度剖析apache 2.4web服務(wù)器(史上最全)

②修改第913行,去掉注釋“#”,并在后面加上PRC

深度剖析apache 2.4web服務(wù)器(史上最全)

③重啟php-fpm

深度剖析apache 2.4web服務(wù)器(史上最全)

再次瀏覽驗證一下:

深度剖析apache 2.4web服務(wù)器(史上最全)

上圖可以看出,警告信息已經(jīng)被解決掉了。

至此,Linux下安裝php加速軟件Xcache教程完成。

下面執(zhí)行ab壓力測試:

執(zhí)行第一次壓力測試:

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

執(zhí)行第二次壓力測試:

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

查看xcache的命中率:

多瀏覽很多次下面的網(wǎng)頁:

深度剖析apache 2.4web服務(wù)器(史上最全)

然后去看命中率:

深度剖析apache 2.4web服務(wù)器(史上最全)

9、部署bbs論壇

①Discuz的程序文件解壓,并且將upload中所有文件放置到網(wǎng)站目錄(php服務(wù)器的操作)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

②設(shè)置php-fpm的服務(wù)用戶為下面文件的屬主或者對其設(shè)置寫權(quán)限,否則安裝時會報錯

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

③修改php.ini文件

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

④重啟php-fpm

深度剖析apache 2.4web服務(wù)器(史上最全)

web服務(wù)器也需要有靜態(tài)文件(apache服務(wù)器上操作)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

設(shè)置httpd的服務(wù)用戶對指定文件也需要有寫權(quán)限:

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

在數(shù)據(jù)庫服務(wù)器上創(chuàng)建bbs數(shù)據(jù)庫及授權(quán)帳戶

深度剖析apache 2.4web服務(wù)器(史上最全)

都置完成之后,在客戶機(jī)上輸入

http://www.benet.com/bbs/install即可安裝

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

深度剖析apache 2.4web服務(wù)器(史上最全)

出現(xiàn)上面這種情況是由于php服務(wù)器安裝了discuz之后導(dǎo)致程序發(fā)生變化從而導(dǎo)致動態(tài)服務(wù)器和靜態(tài)服務(wù)器的程序不一致,只需要手動把bbs服務(wù)器的文件和web服務(wù)器進(jìn)行一次同步即可,如果想實現(xiàn)自動同步,需要使用其他服務(wù),如initory+rsync、sersync等工具。

使用如下命令進(jìn)行同步

深度剖析apache 2.4web服務(wù)器(史上最全)

動態(tài)服務(wù)器和靜態(tài)服務(wù)器同步文件之后,再次訪問bbs的網(wǎng)址就正常了:

深度剖析apache 2.4web服務(wù)器(史上最全)


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI