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

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

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

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

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

環(huán)境:

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

apache版本:

apr版本:apr-1.4.8

apr-util版本:apr-util-1.5.2

pcre版本:pcre-7.8

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

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

一、源碼官方下,補丁及時打

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

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

二、屏蔽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

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

Server: Apache

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

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

#define AP_SERVER_BASEVENDOR "Apache Software Foundation" #服務的供應商名稱

#define AP_SERVER_BASEPROJECT "Apache HTTP Server" #服務的項目名稱

#define AP_SERVER_BASEPRODUCT "Apache" #服務的產品名

#define AP_SERVER_MAJORVERSION_NUMBER 2 #主要版本號

#define AP_SERVER_MINORVERSION_NUMBER 4 #小版本號

#define AP_SERVER_PATCHLEVEL_NUMBER 6 #補丁級別

#define AP_SERVER_DEVBUILD_BOOLEAN 0 #

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

三、更改apache的默認用戶

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

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

編輯apache配置文件,修改默認的用戶。

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

User apache #更改默認的daemon用戶為apache用戶

Group apache #更改默認的daemon用戶為apache用戶

四、apache目錄及文件權限設置

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

這里我們設置apache的網站目錄屬主和屬組是root,權限是755,文件的權限為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

并且,在對日志的授權商,我們要將屬主和屬組都設置為root,權限設置為700。

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

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

五、配置cronolog進行日志輪詢

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

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開啟了虛擬主機功能,所以以下范例配置都在虛擬主機中進行。

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

將配置文件中的CustomLog和ErrorLog替換為下面的(由于我們要對多站點,所以這里要替換兩個虛擬主機的,并且將日志存放名字做有效的區(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"

更多日志格式參考:

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

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

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

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

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

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

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

第一種:在apache的主配置文件中的標簽內添加ErrorDocument配置。

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

AllowOverride None

Options None

Require all granted

ErrorDocument 404 /l #將404錯誤跳轉到/www/html下的l頁面上

 

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

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代碼,由于需要每次加載進而進行來訪信息統(tǒng)計,所以這些廣告代碼擁有者網站的js不會經過gzip壓縮,

mod_deflate模塊,在我們前篇部署的時候已經編譯安裝進去了。

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

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) #此種結果為編譯安裝時裝的

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

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

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

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

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

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

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

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

壓縮模塊配置

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

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

LoadModule deflate_module modules/mod_deflate.so

此行解鎖后再進行下面操作,不然下面的操作會報錯。

我們需要在虛擬機的

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 #在日志中放置壓縮率標記,下面是記錄日志的,這個功能一般不用

#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進行優(yōu)雅重啟

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

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

怎么樣,是不是已經進行壓縮了啊!

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

下面給出大家?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è)成本。可是由于現(xiàn)在越來越多的圖片、腳本、css和flash被嵌入到頁面中,當客戶訪問站點勢必會做很多次的http請求,因此我們還可以通過mod_expires緩存模塊來設置ExpiresHeader來緩存這些文件。Expires是通過header報文來指定特定類型的文件在游覽器中的緩存時間的。平時,我們大多數(shù)的圖片,flash在發(fā)布之后都是不需要經常修改的,因此做了緩存之后,游覽器第一次從服務器下載之后,就不需要再從服務器下載這些文件而是直接從游覽器緩存中讀取了。這樣客戶訪問頁面的速度就會大大加快,企業(yè)的帶寬壓力也得到了緩解。

1、mod_expires模塊檢查及安裝

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

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

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

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

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

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

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ù)

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

LoadModule expires_module modules/mod_expires.so

此行解鎖后再進行下面操作,不然會報錯。

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

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主配置文件中標簽內加入如下參數(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)對虛擬主機

對虛擬主機的配置就是在apache的虛擬主機配置文件中添加如下參數(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服務器進行優(yōu)化重啟,然后用火狐或者google游覽器的YSlow插件進行緩存效果查看。

擴展:expires模塊的語法

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

這里我對expires的模塊語法進行一些細說

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

ExpiresDefault “ [plus] {}*”

EXpiresByType type/encoding " [plus] {}"

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

plus關鍵字是可選的。

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

參數(shù)類型:years,months,weeks,days,hours,minutes,seconds

下面用幾個例子帶大家理解下

例如:下面3個指令都表示文檔默認的有效期是一個月

ExpiresDefault "access plus 1 month"

ExpiresDefault "access plus 4 weeks"

ExpiresDefault "access plus 30 days"

有效期可以通過增加“”子句進一步調整

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

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

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

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

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

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

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

1.縮短服務的響應時間

2.減輕服務器負擔

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

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

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

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

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

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

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

1、prefork模式

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

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

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

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

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

配置參數(shù)說明:

 

StartServers 5 #最初建立的子進程

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

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

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

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

 

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

 

StartServers 10

MinSpareServers 10

MaxSpareServers 15

ServerLimit 2000

MaxClients 1000

MaxRequestsPerChild 5000

 

2、worker模式

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

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

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

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

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

配置參數(shù)說明:

 

StartServers 2 #最初建立的子進程

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

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

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

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

MaxRequestsPerChild 0 #功能同prefork模式

 

常用配置參考:

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

 

StartServers 3

MaxClients 2000

ServerLimit 25

MinSpareThreads 50

MaxSpareThreads 200

ThreadLimit 200

ThreadsPerChild 100

MaxRequestsPerChild 0

 

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

 

StartServers 5

MaxClients 9600

ServerLimit 64

MinSpareThreads 25

MaxSpareThreads 500

ThreadLimit 200

ThreadsPerChild 150

MaxRequestsPerChild 0

 

生產場景配置實例3:

 

StartServers 2

MaxClients 500

ServerLimit 25

MinSpareThreads 25

MaxSpareThreads 75

ThreadsPerChild 25

MaxRequestsPerChild 0

 

生產場景配置實例4:

 

StartServers 3

MaxClients 1600

ServerLimit 25

MinSpareThreads 50

MaxSpareThreads 200

ThreadLimit 200

ThreadsPerChild 64

 

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

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

數(shù)學表達:

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

MaxClient%ThreadsPerChild=0

生產環(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服務為worker模式,那么生產環(huán)境中可以選擇上面worker模式的生產環(huán)境配置實例1的配置。

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

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

十、開啟防盜鏈

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

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

防盜鏈配置:

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

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項,默認即為關閉。

Require all granted

 

第二種:

AllowOverride None

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

Require all granted

 

第三種:

AllowOverride None

Options None #禁用所有選項

Require all granted

 

十二、禁用AllowOverride選項,關閉.htaccess文件使用

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

其次是安全考慮,這樣會允許用戶自己修改服務器的配置,這可能會導致某些意想不到的修改,所以請認真考慮是否應當給予用戶這樣的特權。

1、禁用AllowOverride選項

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

Options none

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

Require all granted

 

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

2、關閉.htaccess文件使用

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

AccessFileName .htaccess

這里我們將它關閉注釋掉

#AccessFileName .htaccess

全部目錄權限定義使用中的定義,不使用.htaccess進行定義。

十三、關閉自帶CGI功能

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

刪除部分:

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

AllowOverride None

Options None

Require all granted

 

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

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

十五、apache的安全模塊

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

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

1、makejail

它是一個自動把建立jail所需要的程序放到jail內的軟件,使用python編寫,他有debian和openbsd的版本。

2、mod-security

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

十九、使用CDN做網站加速

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

CDN技術示意圖:

國內有名的CND公司:網宿,藍汛(chinacache),快網

二十、apache網站架構優(yōu)化

好的網站架構是網站性能強大關鍵,更是網站安全的關鍵。

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

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

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

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

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

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

均不符合上面兩個要求的,默認就都是拋給web服務器。

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

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

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

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

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

關鍵字: 汽車 人工智能 智能驅動 BSP

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

關鍵字: 亞馬遜 解密 控制平面 BSP

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

關鍵字: 騰訊 編碼器 CPU

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

關鍵字: 華為 12nm EDA 半導體

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

關鍵字: 華為 12nm 手機 衛(wèi)星通信

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

關鍵字: 通信 BSP 電信運營商 數(shù)字經濟

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

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

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

關鍵字: BSP 信息技術
關閉
關閉