www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀] 前面兩篇博文講解了apache的部署和配置等方面知識,本篇將為大家詳細(xì)講解生產(chǎn)環(huán)境中對apache服務(wù)各個方面的優(yōu)化調(diào)試。生產(chǎn)環(huán)境中,大家肯定不會部署了apache之后就完事拿去

 前面兩篇博文講解了apache的部署和配置等方面知識,本篇將為大家詳細(xì)講解生產(chǎn)環(huán)境中對apache服務(wù)各個方面的優(yōu)化調(diào)試。

生產(chǎn)環(huán)境中,大家肯定不會部署了apache之后就完事拿去上線了。光桿子上戰(zhàn)場等著完蛋的嘛!因此,不論從安全還是性能角度,我們必須在apache服務(wù)上線之前,對其做諸多的優(yōu)化調(diào)試才行。因此,本篇筆者通過總結(jié)自己的學(xué)習(xí)和工作經(jīng)驗,歸納總結(jié)出的apache調(diào)優(yōu)的20個小點。

本文篇幅有點長,本來想分開寫了,后來想想還是放在一篇博文吧。因此,大家就擔(dān)待擔(dān)待吧。

環(huán)境:

CentOS6.4 x86_64位 采用最小化安裝,系統(tǒng)經(jīng)過了基本優(yōu)化篇

apache版本:

apr版本:apr-1.4.8

apr-util版本:apr-util-1.5.2

pcre版本:pcre-7.8

源碼包存放位置:/server/tools

源碼包編譯安裝位置:/etc/local/軟件名稱

一、源碼官方下,補(bǔ)丁及時打

正如我們在apache部署篇講到的我們需要對下載的源碼包進(jìn)行驗證一樣,我們在挑選apache源碼安裝包的時候,一定要去官網(wǎng),不要去亂七八糟的站點進(jìn)行下載,防止源碼包被別有用心的人動過手腳,導(dǎo)致后面對公司業(yè)務(wù)造成不必要損失。

另外為了apache的安全性和性能考慮,我們一定要多多關(guān)注apache的官網(wǎng)的補(bǔ)丁發(fā)布情況,一旦有新的補(bǔ)丁,我們一定要及早打上。特別是一些安全補(bǔ)丁,防止受到損失。

二、屏蔽apache版本等敏感信息

1)我們在apache主配置文件中,找到包含的行,并解開注釋

[root@c64-web /]# grep "; /usr/local/apache/conf/

#Include conf/extra/

[root@c64-web /]# sed -i ‘s##Include conf/extra/; /usr/local/apache/conf/

注意:編譯安裝的情況下,只有此行解開注釋了,后面的修改才能生效。

2)打開文件,修改如下兩個地方

[root@sunsky /]# grep Server conf/extra/|grep -v "#"

ServerTokens full

ServerSignature Off

修改為

ServerTokens Prod

ServerSignature Off

經(jīng)過上面的修改,當(dāng)你在curl-Iwww.sunsky.pw的時候,還是會出現(xiàn)下面的信息

Server: Apache

徹底讓版本等敏感信息消失

如果你需要徹底將版本之類的信息進(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 HTTP Server" #服務(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 6 #補(bǔ)丁級別

#define AP_SERVER_DEVBUILD_BOOLEAN 0 #

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

三、更改apache的默認(rèn)用戶

我們通過更改apache的默認(rèn)用戶,可以提升apache的安全性。這樣,即使apache服務(wù)被攻破,黑客拿到apache普通用戶也不會對系統(tǒng)和其他應(yīng)用造成破壞。這里創(chuàng)建的apache用戶,將用于對子進(jìn)程和線程的控制。

[root@c64-web /]# useradd -M -s /sbin/nologin apache 創(chuàng)建apache用戶

編輯apache配置文件,修改默認(rèn)的用戶。

[root@c64-web /]# vim /usr/local/apache/conf/

User apache #更改默認(rèn)的daemon用戶為apache用戶

Group apache #更改默認(rèn)的daemon用戶為apache用戶

四、apache目錄及文件權(quán)限設(shè)置

在生產(chǎn)環(huán)境的網(wǎng)站架構(gòu)中,我們應(yīng)把資源文件,例如用戶上傳的圖片及附件等和程序做好分離,最好是把上傳程序也分離開來。這樣才能更方便我們做好授權(quán),保證apache服務(wù)和整個服務(wù)器安全。

這里我們設(shè)置apache的網(wǎng)站目錄屬主和屬組是root,權(quán)限是755,文件的權(quán)限為644。

lrwxr-xr-x 1 root root 23 11月 5 02:04 apache -> /usr/local/apache-2.4.6

drwxr-xr-x 14 root root 4096 11月 5 12:37 apache-2.4.6

并且,在對日志的授權(quán)商,我們要將屬主和屬組都設(shè)置為root,權(quán)限設(shè)置為700。

drwx------ 2 root root 4096 11月 5 02:46 logs

由于apache日志的記錄是由apache的主進(jìn)程進(jìn)行操作的,而apache的主進(jìn)程又是root用戶啟動的,所以這里設(shè)置700是不影響日志記錄了。這也是日志記錄的最安全的方法。

五、配置cronolog進(jìn)行日志輪詢

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

1、下載并安裝cronolog

[root@sunsky /]# cd /server/tools/

[root@sunsky tools]# wget

[root@sunsky tools]# tar zxf cronolog-1.6.2.tar.gz

[root@sunsky tools]# cd cronolog-1.6.2

[root@sunsky cronolog-1.6.2]# ./configure

[root@sunsky cronolog-1.6.2]# make&&make install

2、配置apache使用cronolog

由于實驗用的apache開啟了虛擬主機(jī)功能,所以以下范例配置都在虛擬主機(jī)中進(jìn)行。

[root@sunsky cronolog-1.6.2]# vim /usr/local/apache/

將配置文件中的CustomLog和ErrorLog替換為下面的(由于我們要對多站點,所以這里要替換兩個虛擬主機(jī)的,并且將日志存放名字做有效的區(qū)分才好)

CustomLog "|/usr/local/sbin/cronolog /app/logs/sunsky_access_%Y%m%d.log" combined

ErrorLog "|/usr/local/sbin/cronolog /app/logs/sunsky_error_%Y%m%d.log"

更多日志格式參考:

按天輪詢(生產(chǎn)環(huán)境常見用法,推薦使用):[!--empirenews.page--]

CustomLog "|/usr/local/sbin/cronolog /app/logs/access_www_%Y%m%d.log" combined

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

CustomLog "|/usr/local/sbin/cronolog /app/logs /access_www_ %Y%m%d%H.log" combined

六、錯誤頁面優(yōu)雅顯示

為了提升網(wǎng)站的用戶體驗,避免404,403之類的丑陋的默認(rèn)錯誤提示出現(xiàn),我們需要對錯誤頁面進(jìn)行優(yōu)化,讓他們變的漂亮一點。錯誤頁面不僅在于告訴用戶訪問出現(xiàn)了問題,而且需要引導(dǎo)用戶到正確的頁面。

錯誤頁面優(yōu)雅化顯示的實現(xiàn)方式主要有兩種,下面我們主要以404錯誤為例:

第一種:在apache的主配置文件中的標(biāo)簽內(nèi)添加ErrorDocument配置。

[root@sunsky /]# vi /usr/local/apache/conf/

AllowOverride None

Options None

Require all granted

ErrorDocument 404 /l #將404錯誤跳轉(zhuǎn)到/www/html下的l頁面上

 

第二種方法:在apache的虛擬主機(jī)配置文件中的

ServerAdmin

DocumentRoot "/www/html"

ServerName www.sunsky.pw

ServerAlias sunsky.pw

CustomLog "|/usr/local/sbin/cronolog /app/logs/www_access_%Y%m%d.log" combined

ErrorLog "|/usr/local/sbin/cronolog /app/logs/www_error_%Y%m%d.log"

ErrorDocument 404 (php),js,css,xml,txt等。特殊情況就是像一些首頁上有很多廣告投放的js代碼,由于需要每次加載進(jìn)而進(jìn)行來訪信息統(tǒng)計,所以這些廣告代碼擁有者網(wǎng)站的js不會經(jīng)過gzip壓縮,

mod_deflate模塊,在我們前篇部署的時候已經(jīng)編譯安裝進(jìn)去了。

那么如果沒有安裝,如何安裝呢?并且如果不知道到是否安裝了,如何查看呢?

1、mod_deflate模塊檢查及安裝

由于apache2.2.x和2.4.x這兩個版本在檢查mod_deflate模塊是否安裝方法方法是不同的。最后,我無奈做了很多測試,下面建議大家這樣來檢查。

[root@c64-web /]# /usr/local/apache/bin/apachectl -M | grep deflate

deflate_module (static) #此種結(jié)果為編譯安裝時裝的

[root@c64-web /]# /usr/local/apache/bin/apachectl -M | grep deflate

deflate_module (shared) #此種結(jié)果為DSO方式安裝的

安裝了的話,就可以直接進(jìn)行壓縮配置了,如果沒有安裝,下面為安裝方法

a)編譯時安裝方法

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

b)DSO方式安裝

[root@c64-web /]# cd /server/tools/;#切到apache源碼包mod_deflate所在的目錄下

[root@c64-web filters]# /usr/local/apache/bin/apxs -c -i -a mod_deflate.c #以dso的方式編譯安裝到apache中

[root@c64-web filters]# ll /usr/local/apache/modules/mod_deflate.so #檢查mod_deflate是否安裝,成功安裝這里會顯示出該文件

-rwxr-xr-x 1 root root 76697 11月 5 07:50 /usr/local/apache/modules/mod_deflate.so

擴(kuò)展:使用DSO方式安裝,apxs后跟的參數(shù)詳解

-c 此選項表明需要執(zhí)行編譯操作。它首先會編譯c源程序(.c)files為對應(yīng)的目標(biāo)代碼文件(.c),然后連接這些目標(biāo)代碼和files中其余的目標(biāo)代碼文件(.c和.a),以生成動態(tài)共享對象dsofile。如果沒有指定-s選項,則此輸出文件名由files中的第一個文件名推測得出,也就是默認(rèn)mod_name.so。

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

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

壓縮模塊配置

2、配置壓縮參數(shù)

注意如果我們是編譯安裝時已經(jīng)編譯進(jìn)去的,此時我們需要先將主配置文件中

LoadModule deflate_module modules/mod_deflate.so

此行解鎖后再進(jìn)行下面操作,不然下面的操作會報錯。

我們需要在虛擬機(jī)的

DeflateCompressionLevel 9 #壓縮等級,越大效率越高,消耗CPU也越高

SetOutputFilter DEFLATE #啟用壓縮

AddOutputFilterByType DEFLATE text/html text/plain text/xml #僅壓縮限制特定的MIME類型文件:

AddOutputFilterByType DEFLATE application/javascript

AddOutputFilterByType DEFLATE text/css

AddOutputFilterByType DEFLATE image/gif image/png image/jpe image/swf image/jpeg image/bmp

#DeflateFilterNote ratio #在日志中放置壓縮率標(biāo)記,下面是記錄日志的,這個功能一般不用

#LogFormat ‘"%r" %{outstream}n/%{instream}n (%{ratio}n%%)‘ deflate

#CustmLog logs/deflate_log.log deflate

 

下面是朋友公司的另外一種壓縮配置,有興趣的朋友們也可以操作操作。

DeflateCompressionLevel 9

SetOutputFilter DEFLATE

DeflateFilterNote Input instream #聲明輸入流的byte數(shù)量

DeflateFilterNote Output outstream #聲明輸出流的byte數(shù)量

DeflateFilterNote Ratio ratio #聲明壓縮的百分比

#LogFormat ‘"%r" %{outstream}n/%{instream}n (%{ratio}n%%)‘ deflate #聲明日志類型

#CustomLog logs/deflate_log.log deflate #聲明日志類型

AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript #僅壓縮限制特定的MIME類型文件

 

執(zhí)行上面的添加后,我們對apache進(jìn)行優(yōu)雅重啟

[root@c64-web /]# /usr/local/apache/bin/apachectl graceful

下面訪問我們的網(wǎng)站,然后用火狐或者google游覽器的YSLOW插件進(jìn)行壓縮效果的查看[!--empirenews.page--]

怎么樣,是不是已經(jīng)進(jìn)行壓縮了啊!

我們在企業(yè)生產(chǎn)環(huán)境中時,在啟用mod_deflate時,一定要注意,對于太小的文件和某些格式的圖片不要對它們進(jìn)行壓縮,有可能越壓越大。

下面給出大家?guī)缀跏撬械腁ddOutputFilterByTypeDEFLATE后跟的壓縮文件類型,大家可以參照選擇。

text/plain text/html text/php text/xml text/css text/javascript

application/xhtml+xml application/xml application/rss+xml application/atom_xml application/x-javascript application/x-httpd-php image/svg+xml image/gif image/png image/jpe image/swf image/jpeg image/bmp

八、mod_expires緩存功能

雖然我們上面通過mod_deflate模塊啟用了壓縮,從很大程度上節(jié)約了企業(yè)帶寬,降低了企業(yè)成本??墒怯捎诂F(xiàn)在越來越多的圖片、腳本、css和flash被嵌入到頁面中,當(dāng)客戶訪問站點勢必會做很多次的http請求,因此我們還可以通過mod_expires緩存模塊來設(shè)置ExpiresHeader來緩存這些文件。Expires是通過header報文來指定特定類型的文件在游覽器中的緩存時間的。平時,我們大多數(shù)的圖片,flash在發(fā)布之后都是不需要經(jīng)常修改的,因此做了緩存之后,游覽器第一次從服務(wù)器下載之后,就不需要再從服務(wù)器下載這些文件而是直接從游覽器緩存中讀取了。這樣客戶訪問頁面的速度就會大大加快,企業(yè)的帶寬壓力也得到了緩解。

1、mod_expires模塊檢查及安裝

檢查mod_expires模塊是否安裝的方法如下:

[root@c64-web /]# /usr/local/apache/bin/apachectl -M | grep deflate

expires_module (static) #此種結(jié)果為編譯安裝時裝的

[root@c64-web /]# /usr/local/apache/bin/apachectl -M | grep deflate

expires_module (shared) #此種結(jié)果為DSO方式安裝的

安裝了的話,就可以直接進(jìn)行壓縮配置了,如果沒有安裝,下面為安裝方法

a)編譯方式安裝

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

b)DSO方式安裝

[root@c64-web /]# cd /server/tools/;#切到apache源碼包mod_expires所在的目錄下

[root@c64-web filters]# /usr/local/apache/bin/apxs -c -i -a mod_expires.c #以dso的方式編譯安裝到apache中

[root@c64-web filters]# ll /usr/local/apache/modules/mod_expires.so #檢查mod_deflate是否安裝,成功安裝這里會顯示出該文件

-rwxr-xr-x 1 root root 37439 11月 5 02:02 /usr/local/apache/modules/mod_expires.so

2、配置緩存參數(shù)

注意如果我們是編譯安裝時已經(jīng)編譯進(jìn)去的,此時我們需要先將主配置文件中

LoadModule expires_module modules/mod_expires.so

此行解鎖后再進(jìn)行下面操作,不然會報錯。

緩存的用法有3種,分別問對全局,對目錄,對虛擬主機(jī)。

a)對全局

對全局的配置就是在apache主配置文件的末尾加入如下參數(shù)即可

ExpiresActive on

ExpiresDefault "access plus 12 month"

ExpiresByType text/html "access plus 12 months"

ExpiresByType text/css "access plus 12 months"

ExpiresByType image/gif "access plus 12 months"

ExpiresByType image/jpeg "access plus12 12 months"

ExpiresByType image/jpg "access plus 12 months"

ExpiresByType image/png "access plus 12 months"

EXpiresByType application/x-shockwave-flash "access plus 12 months"

EXpiresByType application/x-javascript "access plus 12 months"

ExpiresByType video/x-flv "access plus 12 months"

b)對目錄

對目錄的配置就是在apache主配置文件中標(biāo)簽內(nèi)加入如下參數(shù)即可

AllowOverride None

Options None

Require all granted

ErrorDocument 404 /l

ExpiresActive on

ExpiresDefault "access plus 12 month"

ExpiresByType text/html "access plus 12 months"

ExpiresByType text/css "access plus 12 months"

ExpiresByType image/gif "access plus 12 months"

ExpiresByType image/jpeg "access plus12 12 months"

ExpiresByType image/jpg "access plus 12 months"

ExpiresByType image/png "access plus 12 months"

EXpiresByType application/x-shockwave-flash "access plus 12 months"

EXpiresByType application/x-javascript "access plus 12 months"

ExpiresByType video/x-flv "access plus 12 months"

 

c)對虛擬主機(jī)

對虛擬主機(jī)的配置就是在apache的虛擬主機(jī)配置文件中添加如下參數(shù)即可

ServerAdmin

DocumentRoot "/www/html"

ServerName www.sunsky.pw

ServerAlias sunsky.pw

CustomLog "|/usr/local/sbin/cronolog /app/logs/www_access_%Y%m%d.log" combined

ErrorLog "|/usr/local/sbin/cronolog /app/logs/www_error_%Y%m%d.log"

ExpiresActive on

ExpiresDefault "access plus 12 month"

ExpiresByType text/html "access plus 12 months"

ExpiresByType text/css "access plus 12 months"

ExpiresByType image/gif "access plus 12 months"

ExpiresByType image/jpeg "access plus12 12 months"

ExpiresByType image/jpg "access plus 12 months"[!--empirenews.page--]

ExpiresByType image/png "access plus 12 months"

EXpiresByType application/x-shockwave-flash "access plus 12 months"

EXpiresByType application/x-javascript "access plus 12 months"

ExpiresByType video/x-flv "access plus 12 months"

 

以上三種配置任何一種配置之后,對apache服務(wù)器進(jìn)行優(yōu)化重啟,然后用火狐或者google游覽器的YSlow插件進(jìn)行緩存效果查看。

擴(kuò)展:expires模塊的語法

上面已經(jīng)的操作就是實現(xiàn)apache的緩存功能。其中,expires后面的參數(shù)你也可以根據(jù)需求自行更改,緩存時間也是一樣可以更改的。

這里我對expires的模塊語法進(jìn)行一些細(xì)說

expires模塊用到了ExpiresDefault和EXpiresByType兩個指令,下面是這兩個指令的語法。

ExpiresDefault “ [plus] {}*”

EXpiresByType type/encoding " [plus] {}"

其中的參數(shù)有3個:access,now(等價于‘access’),modification

plus關(guān)鍵字是可選的。

必須是整數(shù),確??梢詀toi()所接收。(atoi可以把字符串轉(zhuǎn)換成長整型數(shù))

參數(shù)類型: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"

有效期可以通過增加“”子句進(jìn)一步調(diào)整

ExpiresByType text/html "access plus 1 month 15 days 2 hours"

ExpiresByType image/gif "modification plus 5 hours 3 minutes"

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

基準(zhǔn)時刻可以是源文件的最后修改時刻或者客戶端對源文件的訪問時刻,至于使用那一個則由指定。“M”表示源文件的最后修改時刻,“A”表示客戶端對源文件的訪問時刻,需要注意的是和seconds之間沒有空格。

這兩個基準(zhǔn)的差別是很微妙的。如果使用“M”,所有當(dāng)前緩存中的文檔副本都將在同一時刻過期,這個可能對定期更新的URL(比如位于同一位置的每周通告)很有好處。如果使用“A”,則每個客戶端所得到的有效期是不一樣的,這個可能對那些幾乎不更新的圖片很有好處,特別是對于一組都引用相同圖片的相關(guān)文檔。

緩存優(yōu)化對企業(yè)來說是至關(guān)重要了的,不同的公司類型,緩存的類型和時間又各不相同,大家具體可以用YSlow對淘寶,京東,新浪,谷歌等站點進(jìn)行測試,看看他們的緩存時間是多少,并思考下為什么那樣設(shè)置。

雖然緩存的設(shè)置有如下優(yōu)點

1.縮短服務(wù)的響應(yīng)時間

2.減輕服務(wù)器負(fù)擔(dān)

3.減少網(wǎng)絡(luò)帶寬使用量,降低企業(yè)成本

但是他的缺點也是顯而易見的,由于使用了緩存設(shè)置,導(dǎo)致被緩存的內(nèi)容更新了,但是客戶看到的卻還是舊的。

如何解決被緩存文件及時更新這個問題呢?

第一種:縮短緩存時間例如:1天,不徹底犧牲性能

第二種:對緩存的對象改名。

九、啟用worker模式,提升并發(fā)數(shù)(可以達(dá)到2000-5000)

apache有兩個模式,默認(rèn)的模式是prefork模式。那么我們?yōu)槭裁匆褂脀orker模式呢?這兩種模式又有什么區(qū)別呢?

1、prefork模式

prefork使用的是多個子進(jìn)程,而每個子進(jìn)程只有一個線程,每個進(jìn)程在某個確定的時間只能維持一個連接。

工作原理:控制進(jìn)程最初建立若干個子進(jìn)程,為了不在請求到來時再生成子進(jìn)程,所以要根據(jù)需求不斷的創(chuàng)建新的子進(jìn)程,最大可以達(dá)到每秒32個直到滿足需求為止。

安裝方法:在編譯的過程中,加入?yún)?shù)--with-mpm=frefork,不加也可以,因為默認(rèn)的話,會采用prefork模式。

優(yōu)點:效率高,穩(wěn)定,安全。對于線程調(diào)試?yán)щy的平臺來說,調(diào)試更加容易些。

缺點:與worker模式相比消耗資源多。

配置參數(shù)說明:

 

StartServers 5 #最初建立的子進(jìn)程

MinSpareServers 5 #最小空閑進(jìn)程數(shù),如果空閑的進(jìn)程小于設(shè)定值,Apache會自動建立進(jìn)程,如果服務(wù)器并發(fā)及負(fù)載大的話,可以考慮加大。

MaxSpareServers 10 #最大空閑進(jìn)程數(shù),如果空閑的進(jìn)程大于設(shè)定值,Apache會自動kill掉多余的進(jìn)程,如果服務(wù)器負(fù)載大的話,可以考慮加大。

MaxClients 150 #設(shè)定的是apache可以同時處理的請求,是對apache性能影響最大的參數(shù),就是apache可以同時處理的請求數(shù),就是說,如果有150個用戶在訪問,那么第151個用戶就要等之前的訪問結(jié)束后才能訪問。

MaxRequestsPerChild 0 #每個子進(jìn)程可處理的請求數(shù),每個子進(jìn)程在處理了“MaxRequestsPerChild”個請求后將自動銷毀。0以為著無限,即子進(jìn)程永不銷毀。雖然缺省設(shè)為0可以使每個子進(jìn)程處理更多的請求,但如果設(shè)置成非0值也有兩點重要的好處。(1)可防止意外的內(nèi)存泄露(2)在服務(wù)器負(fù)載下載的時候會自動減少子進(jìn)程數(shù)。

 

生產(chǎn)環(huán)境配置實例1:

 

StartServers 10

MinSpareServers 10

MaxSpareServers 15

ServerLimit 2000

MaxClients 1000

MaxRequestsPerChild 5000

 

2、worker模式

worker模式是apche2.x新引進(jìn)來的模式,是線程與進(jìn)程的結(jié)合,在worker模式下會有多個子進(jìn)程,每個子進(jìn)程又會有多個線程。每個線程在某個確定的時間只能維持一個連接。

工作原理:由主控制進(jìn)程生成若干個子進(jìn)程,而每個子進(jìn)程中又包含固定的線程數(shù),各個線程獨立處理請求,同樣為了不在請求到來時再生成線程,在配置文件中設(shè)置了最小和最大的空閑線程數(shù)及所有子進(jìn)程中的線程總數(shù),如果現(xiàn)有子進(jìn)程中的線程總數(shù)不能滿足并發(fā)及負(fù)載,控制進(jìn)程將派生新的子進(jìn)程。[!--empirenews.page--]

安裝方法:在配置編譯的工程中,加入?yún)?shù)--with-mpm=worker,如果不加的話系統(tǒng)會采用默認(rèn)prefork模式。

優(yōu)點:內(nèi)存占用比prefork模式低,適合高并發(fā)高流量HTTP服務(wù)。

缺點:假如一個線程崩潰,整個進(jìn)程就會連同其任何線程一起“死掉”。由于線程共享內(nèi)存空間,所以一個程式在運行時必須被系統(tǒng)識別為“每個線程都是安全的”。服務(wù)穩(wěn)定性不如prefork模式。

配置參數(shù)說明:

 

StartServers 2 #最初建立的子進(jìn)程

MaxClients 150 #所有子進(jìn)程中的線程總數(shù)。如果現(xiàn)有子進(jìn)程中的線程總數(shù)不能滿足負(fù)載,控制進(jìn)程將派生新的子進(jìn)程。

MinSpareThreads 25 #最小空閑線程數(shù),如果空閑的線程小于設(shè)定值,apache會自動建立線程,如果服務(wù)器負(fù)載大的話,可以考慮加大此參考值。

MaxSpareThreads 75 #最大空閑線程數(shù),如果空閑的線程大于設(shè)定值,apache會自動kill掉多余的線程,如果服務(wù)器負(fù)載大的話,可以考慮加大此參考值。

ThreadsPerChild 25 #每個進(jìn)程包含固定的線程數(shù),此參數(shù)在worker模式中,是影響最大的參數(shù),ThreadsPerChild的最大缺省值是64,如果負(fù)載較大,64是不夠的。這時要顯式使用threadlimit指令,它的最大缺省值是20000.

MaxRequestsPerChild 0 #功能同prefork模式

 

常用配置參考:

生產(chǎn)環(huán)境配置實例1:

 

StartServers 3

MaxClients 2000

ServerLimit 25

MinSpareThreads 50

MaxSpareThreads 200

ThreadLimit 200

ThreadsPerChild 100

MaxRequestsPerChild 0

 

生產(chǎn)環(huán)境配置實例2:

 

StartServers 5

MaxClients 9600

ServerLimit 64

MinSpareThreads 25

MaxSpareThreads 500

ThreadLimit 200

ThreadsPerChild 150

MaxRequestsPerChild 0

 

生產(chǎn)場景配置實例3:

 

StartServers 2

MaxClients 500

ServerLimit 25

MinSpareThreads 25

MaxSpareThreads 75

ThreadsPerChild 25

MaxRequestsPerChild 0

 

生產(chǎn)場景配置實例4:

 

StartServers 3

MaxClients 1600

ServerLimit 25

MinSpareThreads 50

MaxSpareThreads 200

ThreadLimit 200

ThreadsPerChild 64

 

worker模式下所能同時處理的請求總數(shù)是由子進(jìn)程總數(shù)乘以Threadsperchild值決定的,應(yīng)該大于等于maxclients。如果負(fù)載很大,現(xiàn)有的子進(jìn)程數(shù)不能滿足時,控制進(jìn)程會派生新的子進(jìn)程。默認(rèn)最大的子進(jìn)程總數(shù)是16,如需加大時也需要顯示聲明serverlimit的值(最大值是20000)

特別說明:如果顯示聲明了ServerLimit,那么它乘以ThreadsPerChild的值必須大于等于MaxClients,而且MaxClients必須是ThreadsPerChild的整數(shù)倍,否則apache將會自動調(diào)節(jié)到一個相應(yīng)值(可能是個非期望值)。

數(shù)學(xué)表達(dá):

MaxClient<=總的進(jìn)程數(shù)(ServerLimit)x線程數(shù)(ThreadsPerChild)

MaxClient%ThreadsPerChild=0

生產(chǎn)環(huán)境中我們需要開啟配置行,這樣才能實現(xiàn)并發(fā)鏈接數(shù)的增加。

1、開啟配置行

這里我們要apache的主配置文件,找到包含的行,并解開注釋

[root@c64-web /]# grep "; /usr/local/apache/conf/

#Include conf/extra/

[root@c64-web /]# sed -i ‘s##Include conf/extra/; /usr/local/apache/conf/

注意:編譯安裝的,只有此行解開注釋了,后面的修改才能生效。

2、修改配置

1)如果你的apache服務(wù)為worker模式,那么生產(chǎn)環(huán)境中可以選擇上面worker模式的生產(chǎn)環(huán)境配置實例1的配置。

2)如果你的apache服務(wù)為prefork模式,那么生產(chǎn)環(huán)境中可以參考上面prefork模式的生產(chǎn)環(huán)境配置實例1的配置。

生產(chǎn)環(huán)境中,這里我建議大家選擇worker模式。

十、開啟防盜鏈

一些小網(wǎng)站為了盈利,通過盜鏈來實現(xiàn)對自己網(wǎng)站內(nèi)容的豐富,這無疑加大了企業(yè)的空間和流量的成本,因此我們需要對apache進(jìn)行防盜鏈的配置。

由于我們要用到mod_rewrite模塊,因此我們需要先檢測該模塊是否安裝,檢測和安裝方法與上面mod_deflate和mod_expires的一樣,這里不多講了。

防盜鏈配置:

一般我們都是將防盜鏈的配置,配置在虛擬主機(jī)里面,配置如下:

ServerAdmin

DocumentRoot "/www/html"

ServerName www.sunsky.pw

ServerAlias sunsky.pw

CustomLog "|/usr/local/sbin/cronolog /app/logs/www_access_%Y%m%d.log" combined

ErrorLog "|/usr/local/sbin/cronolog /app/logs/www_error_%Y%m%d.log"

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^*$ [NC]

RewriteCond %{HTTP_REFERER} !^$ [NC]

RewriteCond %{HTTP_REFERER} !^>

AllowOverride None

Options FollowSymLinks #不填寫Indexes項,默認(rèn)即為關(guān)閉。

Require all granted

 

第二種:

AllowOverride None

Options -Indexes #通過在Indexes前面加-來禁用此功能

Require all granted

 

第三種:

AllowOverride None

Options None #禁用所有選項

Require all granted

 

十二、禁用AllowOverride選項,關(guān)閉.htaccess文件使用

首先是性能考慮,如果AllowOverride啟用了.htaccess文件,則apache需要在每個目錄中查找.htaccess文件。因此,無論是否真正用到,啟用.htaccess都會導(dǎo)致服務(wù)器性能的下降。另外,對于每一個請求,都需要讀取一次.htaccess文件。[!--empirenews.page--]

其次是安全考慮,這樣會允許用戶自己修改服務(wù)器的配置,這可能會導(dǎo)致某些意想不到的修改,所以請認(rèn)真考慮是否應(yīng)當(dāng)給予用戶這樣的特權(quán)。

1、禁用AllowOverride選項

我們通過修改apache主配置文件中的標(biāo)簽內(nèi)的AllowOverride選項參數(shù)來實現(xiàn)禁用目錄瀏覽。

Options none

AllowOverride None #禁止該選項,防止用戶重復(fù)載入

Require all granted

 

通過該設(shè)置加快了服務(wù)器響應(yīng)速度,因為它不再讓每個請求去尋求每個目錄的訪問控制文件(.htaccess)

2、關(guān)閉.htaccess文件使用

默認(rèn)在Unix平臺下能夠使用.htaccess來對目錄權(quán)限進(jìn)行規(guī)則定義,但是這是不安全的,建議關(guān)閉,默認(rèn)的選項:

AccessFileName .htaccess

這里我們將它關(guān)閉注釋掉

#AccessFileName .htaccess

全部目錄權(quán)限定義使用中的定義,不使用.htaccess進(jìn)行定義。

十三、關(guān)閉自帶CGI功能

生產(chǎn)環(huán)境中,一般我們不使用apache自帶的cgi的功能,如果使用的話,可以用mod_perl模塊來替代。因此我們這里需要將apache主配置文件中有關(guān)cgi的內(nèi)容刪除掉。

刪除部分:

ScriptAlias /cgi-bin/ "/usr/local/apache2.4.6/cgi-bin/"

AllowOverride None

Options None

Require all granted

 

十四、禁止PHP解析指定站點的目錄

企業(yè)的站點有時會提供用戶進(jìn)行上傳操作,而用戶上傳文件的存放目錄,我們是不能給php的解析權(quán)限的,否則會對apache服務(wù)和系統(tǒng)造成危害。

十五、apache的安全模塊

我們需要對apache站點增加一些擴(kuò)展的安全模塊,如:mod_evasive20防DDOS、mod_limitipconn(針對單站點)配置、mod_security2防SQL注入等等之類的工具。

另外,下面是推薦給大家的幾個工具。

1、makejail

它是一個自動把建立jail所需要的程序放到j(luò)ail內(nèi)的軟件,使用python編寫,他有debian和openbsd的版本。

2、mod-security

它是apche的一個模塊,它不僅可以實現(xiàn)過濾請求和日志審計等功能,而且可以防止SQLInjection和跨站腳本攻擊等是個很不錯的安全模塊。

十六、使用tmpfs文件系統(tǒng)替代頻繁訪問的目錄

tmpfs是一種基于內(nèi)存的文件系統(tǒng)。它最主要的兩個優(yōu)勢就是動態(tài)文件系統(tǒng)大小和速度快。因為典型的tmpfs文件系統(tǒng)會完全駐留在RAM中,讀寫幾乎可以是瞬間的。即使用了一些交換分區(qū),性能仍然是卓越的。因此對于那些頻繁訪問的目錄,建議使用tmpfs文件系統(tǒng)進(jìn)行替代。

十七、優(yōu)化系統(tǒng)內(nèi)核參數(shù)

對系統(tǒng)內(nèi)核的優(yōu)化參數(shù),我們在系統(tǒng)的基礎(chǔ)優(yōu)化這邊博文已經(jīng)講過了。系統(tǒng)內(nèi)核優(yōu)化最主要的目的就是減少TIME-WAIT的TCP連接數(shù)。

由于在基礎(chǔ)優(yōu)化篇我們已經(jīng)對apache進(jìn)行了內(nèi)核參數(shù)的優(yōu)化,因此這里我就不再操作了。這里我將為大家對優(yōu)化的參數(shù)進(jìn)行講解。

net.ipv4.tcp_fin_timeout #表示如果套接字由本端要求關(guān)閉,這個參數(shù)決定了它保持在FIN-WAIT-2狀態(tài)的時間,默認(rèn)值是60秒。

net.ipv4.tcp_tw_reuse #表示開啟重用。允許將TIME-WAIT sockets重新用于新的TCP連接,默認(rèn)值為0,表示關(guān)閉。該參數(shù)對應(yīng)系統(tǒng)路徑為:/proc/sys/net/ipv4/tcp_tw_reuse 0

net.ipv4.tcp_tw_recycle #表示開啟TCP連接中TIME-WAIT sockets的快速回收該參數(shù)對應(yīng)系統(tǒng)路徑為:/proc/sys/net/ipv4/tcp_tw_recycle提示:reuse和recycle兩個參數(shù)為了防止生產(chǎn)環(huán)境下web,squid等time_wait過多設(shè)置的。

net.ipv4.tcp_syncookies #表示開啟SYN Cookies功能。當(dāng)出現(xiàn)SYN等待隊列溢出時,啟用cookies來處理,可防范少量SYN攻擊,Centos5系列默認(rèn)值為1,表示開啟。因此這個參數(shù)也可以不添加。該參數(shù)對應(yīng)系統(tǒng)路徑為:/proc/sys/net/ipv4/tcp_syncookies,默認(rèn)為1

net.ipv4.tcp_keepalive_time #表示當(dāng)keepalive起用的時候,TCP發(fā)送keepalive消息的頻度。缺省是2小時,改為10分鐘。該參數(shù)對應(yīng)系統(tǒng)路徑為:/proc/sys/net/ipv4/tcp_keepalive_time,默認(rèn)為7200秒。

net.ipv4.ip_local_port_range #選項用來設(shè)定允許系統(tǒng)打開的端口范圍。即用于向外連接的端口范圍。該參數(shù)對應(yīng)系統(tǒng)路徑為:/proc/sys/net/ipv4/ip_local_port_range 32768 61000

net.ipv4.tcp_max_syn_backlog #表示SYN隊列的長度,默認(rèn)為1024,加大隊列長度為8192,可以容納更多等待連接的網(wǎng)絡(luò)連接數(shù)。選項為服務(wù)器端用來記錄那些尚未收到客戶端確認(rèn)信息的連接請求的最大值。

該參數(shù)對應(yīng)系統(tǒng)路徑為:/proc/sys/net/ipv4/tcp_max_syn_backlog

net.ipv4.tcp_max_tw_buckets #表示系統(tǒng)同時保持TIME_WAIT套接字的最大數(shù)量,如果超過這個數(shù)字,TIME_WAIT套接字將立刻被清楚并打印警告信息。默認(rèn)為180000,對于Apache、Nginx等服務(wù)器來說可以調(diào)整低一點,如改為5000-30000,不同業(yè)務(wù)的服務(wù)器也可以給大一旦,比如lvs,squid。上幾行的參數(shù)可以很好地減少TIME_WAIT套接字?jǐn)?shù)量,但是對于Squid效果卻不大。此項參數(shù)可以控制TIME_WAIT套接字的最大數(shù)量,避免Squid服務(wù)器被大量的TIME_WAIT套接字拖死。此參數(shù)對應(yīng)系統(tǒng)路徑為:/proc/sys/net/ipv4/tcp_max_tw_buckets

net.ipv4.tcp_synack_retries #參數(shù)的值決定了內(nèi)核放棄連續(xù)之前發(fā)送SYN+ACK包的數(shù)量。該參數(shù)對應(yīng)系統(tǒng)路徑為:/proc/sys/net/ipv4/tcp_synack_retries默認(rèn)值為5

net.ipv4.tcp_syn_retries #表示在內(nèi)核放棄建立連接之前發(fā)送SYN包的數(shù)量。該參數(shù)對應(yīng)系統(tǒng)路徑為:/proc/sys/net/ipv4/tcp_syn_retries 5

net.ipv4.tcp_max_orphans #選項用于設(shè)定系統(tǒng)中最多有多少個TCP套接字不被關(guān)聯(lián)到任何一個用戶文件句柄上。如果超過這個數(shù)字,孤立連接將立即被復(fù)位并打印出警告信息。這個限制這是為了防止簡單的Dos攻擊,不能過分依靠這個限制甚至認(rèn)為減少這個值,更多的情況是增加這個值。該參數(shù)對應(yīng)系統(tǒng)路徑為:/proc/sys/net/ipv4/tcp_max_orphans 65536[!--empirenews.page--]

十八、盡可能減少HTTP請求數(shù)

http請求是要開銷的,想辦法減少請求數(shù)自然可以提高網(wǎng)頁速度。常用的方法,合并css,js(將一個頁面中的css和js文件分別合并)以及Imagemaps和csssprites等。當(dāng)然或許將css,js文件拆分成多個是因為css結(jié)構(gòu),共用等方面的考慮。阿里巴巴中文站當(dāng)時的做法是開發(fā)時依然分開開發(fā),然后在后臺對js,css進(jìn)行合并,這樣對于游覽器來說依然是一個請求,但是開發(fā)時仍然能還原成多個,方便管理和重復(fù)引用。yahoo甚至建議將首頁的css和js直接寫在頁面文件里面,而不是外部引用。因為首頁的訪問量太大了,這么做可以減少兩個請求數(shù)。而事實上國內(nèi)的很多門戶都是這么做的。

其中csssprites是指只用將頁面上的背景圖合并成一張,然后通過css的background-position屬性定義不過的值來取他的背景。淘寶和阿里巴巴中文站目前都是這樣做的。這是個工具網(wǎng)站,它可以自動將你上傳的圖片合并,并給出對應(yīng)的background-position坐標(biāo)。并將結(jié)果以png和gif的格式輸出。

十九、使用CDN做網(wǎng)站加速

簡單地說,就是通過在現(xiàn)有的Internet中增加一層新的網(wǎng)絡(luò)架構(gòu),將網(wǎng)站的內(nèi)容發(fā)布到最接近用戶的緩存服務(wù)器內(nèi)。通過DNS負(fù)載均衡的技術(shù),判斷用戶來源就近訪問cache服務(wù)器取得所需的內(nèi)容,杭州的用戶訪問接近杭州服務(wù)器上的內(nèi)容,北京訪問接近北京服務(wù)器上的內(nèi)容。這樣可以有效減少數(shù)據(jù)在網(wǎng)絡(luò)上傳輸?shù)氖录?,提高速度。把靜態(tài)內(nèi)容發(fā)布到CDN減少了用戶影響時間20%或更多。

CDN技術(shù)示意圖:

國內(nèi)有名的CND公司:網(wǎng)宿,藍(lán)汛(chinacache),快網(wǎng)

二十、apache網(wǎng)站架構(gòu)優(yōu)化

好的網(wǎng)站架構(gòu)是網(wǎng)站性能強(qiáng)大關(guān)鍵,更是網(wǎng)站安全的關(guān)鍵。

在生產(chǎn)環(huán)境中建議將程序頁面服務(wù)器、圖片附件服務(wù)器和上傳服務(wù)器三者的功能盡量分離。

那么如何實現(xiàn)分離呢?

1、分離最佳方式是分別使用獨立的服務(wù)器(需要程序支持)

2、次選方案在前端負(fù)載均衡器通過haproxy/nginx來根據(jù)用戶請求的目錄或擴(kuò)展名來對后端的服務(wù)器發(fā)出請求。

例如:請求就拋給圖片服務(wù)器(CDN最好),這里是根據(jù)擴(kuò)展名.jpg分發(fā)

請求就拋給上傳服務(wù)器(CDN最好),這里是根據(jù)URL路徑分發(fā)

均不符合上面兩個要求的,默認(rèn)就都是拋給web服務(wù)器。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉