Linux網(wǎng)站架構(gòu)系列之a(chǎn)pache----調(diào)優(yōu)篇
安裝方法:在配置編譯的工程中,加入?yún)?shù)--with-mpm=worker,如果不加的話系統(tǒng)會采用默認prefork模式。
優(yōu)點:內(nèi)存占用比prefork模式低,適合高并發(fā)高流量HTTP服務(wù)。
缺點:假如一個線程崩潰,整個進程就會連同其任何線程一起“死掉”。由于線程共享內(nèi)存空間,所以一個程式在運行時必須被系統(tǒng)識別為“每個線程都是安全的”。服務(wù)穩(wěn)定性不如prefork模式。
配置參數(shù)說明:
StartServers 2 #最初建立的子進程
MaxClients 150 #所有子進程中的線程總數(shù)。如果現(xiàn)有子進程中的線程總數(shù)不能滿足負載,控制進程將派生新的子進程。
MinSpareThreads 25 #最小空閑線程數(shù),如果空閑的線程小于設(shè)定值,apache會自動建立線程,如果服務(wù)器負載大的話,可以考慮加大此參考值。
MaxSpareThreads 75 #最大空閑線程數(shù),如果空閑的線程大于設(shè)定值,apache會自動kill掉多余的線程,如果服務(wù)器負載大的話,可以考慮加大此參考值。
ThreadsPerChild 25 #每個進程包含固定的線程數(shù),此參數(shù)在worker模式中,是影響最大的參數(shù),ThreadsPerChild的最大缺省值是64,如果負載較大,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ù)是由子進程總數(shù)乘以Threadsperchild值決定的,應(yīng)該大于等于maxclients。如果負載很大,現(xiàn)有的子進程數(shù)不能滿足時,控制進程會派生新的子進程。默認最大的子進程總數(shù)是16,如需加大時也需要顯示聲明serverlimit的值(最大值是20000)
特別說明:如果顯示聲明了ServerLimit,那么它乘以ThreadsPerChild的值必須大于等于MaxClients,而且MaxClients必須是ThreadsPerChild的整數(shù)倍,否則apache將會自動調(diào)節(jié)到一個相應(yīng)值(可能是個非期望值)。
數(shù)學表達:
MaxClient=總的進程數(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進行防盜鏈的配置。
由于我們要用到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項,默認即為關(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都會導致服務(wù)器性能的下降。另外,對于每一個請求,都需要讀取一次.htaccess文件。
評論