轉之--http://jafy00.blog.51cto.com/2594646/508205javascript
DocumentRoot "/usr/local/apache-2.2.6/htdocs"php
#設置WEB文檔根目錄的默認屬性css
<Directory />html
Options FollowSymLinksjava
AllowOverride Noneweb
Order deny,allowapache
Deny from all瀏覽器
</Directory>緩存
#設置DocumentRoot指定目錄的屬性安全
<Directory "/usr/local/apache-2.2.6/htdocs">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
#設置默認目錄資源列表文件
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
#拒絕對.ht開頭文件的訪問,以保護.htaccess文件
<FilesMatch "^\.ht">
Order allow,deny
Deny from all
Satisfy All
</FilesMatch>
<IfModule log_config_module>
#定義訪問日誌的格式
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
#指定訪問日誌及使用的格式
CustomLog logs/access_log combined
</IfModule>
#設定默認CGI腳本目錄及別名
ScriptAlias /cgi-bin/ "/usr/local/apache-2.2.6/cgi-bin/"
#在以線程式MPM(worker)運行的Apache中設置用來與CGI守護進程通訊的套接字文件名前綴
<IfModule cgid_module>
Scriptsock logs/cgisock
</IfModule>
#設定默認CGI腳本目錄的屬性
<Directory "/usr/local/apache-2.2.6/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
#設定默認MIME內容類型
DefaultType text/plain
<IfModule mime_module>
##指定MIME類型映射文件
TypesConfig conf/mime.types
#增長.Z .tgz的類型映射
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
</IfModule>
#啓用內存映射
EnableMMAP on
##使用操做系統內核的sendfile支持來將文件發送到客戶端
EnableSendfile on
#指定多路處理模塊(MPM)配置文件並將其附加到主配置文件
Include conf/extra/httpd-mpm.conf
#指定多語言錯誤應答配置文件並將其附加到主配置文件
Include conf/extra/httpd-multilang-errordoc.conf
#指定目錄列表配置文件並將其附加到主配置文件
#Include conf/extra/httpd-autoindex.conf
#指定語言配置文件並將其附加到主配置文件
Include conf/extra/httpd-languages.conf
#指定用戶主目錄配置文件並將其附加到主配置文件
#Include conf/extra/httpd-userdir.conf
#指定用於服務器信息和狀態顯示的配置文件並將其附加到主配置文件
#Include conf/extra/httpd-info.conf
#指定提供Apache文檔訪問的配置文件並將其附加到配置文件
#Include conf/extra/httpd-manual.conf
#指定DAV配置文件並將其附加到主配置文件
#Include conf/extra/httpd-dav.conf
#指定與Apache服務自身相關的配置文件並將其附加到主配置文件
Include conf/extra/httpd-default.conf
#指定mod_deflate壓縮模塊配置文件並將其附加到主配置文件
Include conf/extra/httpd-deflate.conf
#指定mod_expires模塊配置文件並將其附加到主配置文件
Include conf/extra/httpd-expires.conf
##指定虛擬主機配置文件並將其附加到主配置文件
#Include conf/extra/httpd-vhosts.conf
#指定SSL配置文件並將其附加到主配置文件
Include conf/extra/httpd-ssl.conf
##SSL默認配置
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
#配置多路處理模塊(MPM) httpd-mpm.conf
首先說一下原理:
prefork模式
這個多路處理模塊(MPM)實現了一個非線程型的、預派生的web服務器,它的工做方式相似於Apache 1.3。它適合於沒有線程安全庫,須要避免線程兼容性問題的系統。它是要求將
每一個請求相互獨立的狀況下最好的MPM,這樣若一個請求出現問題就不會影響到其餘請求。
這個MPM具備很強的自我調節能力,只須要不多的配置指令調整。最重要的是將MaxClients設置爲一個足夠大的數值以處理潛在的請求高峯,同時又不能太大,以至須要使用的內存
超出物理內存的大小。
worker模式
此多路處理模塊(MPM)使網絡服務器支持混合的多線程多進程。因爲使用線程來處理請求,因此能夠處理海量請求,而系統資源的開銷小於基於進程的MPM。可是,它也使用了多進
程,每一個進程又有多個線程,以得到基於進程的MPM的穩定性。
控制這個MPM的最重要的指令是,控制每一個子進程容許創建的線程數的ThreadsPerChild指令,和控制容許創建的總線程數的MaxClients指令
#設置prefork多路處理模塊
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 8000
MaxClients 8000
MaxRequestsPerChild 0
</IfModule>
StartServers:設置服務器啓動時創建的子進程數量。由於子進程數量動態的取決於負載的輕重,全部通常沒有必要調整這個參數。
MinSpareServers:設置空閒子進程的最小數量。所謂空閒子進程是指沒有正在處理請求的子進程。若是當前空閒子進程數少於 MinSpareServers ,那麼Apache將以最大每秒一個的
速度產生新的子進程。只有在很是繁忙機器上才須要調整這個參數。將此參數設的太大一般是一個壞主意。
MaxSpareServers:設置空閒子進程的最大數量。若是當前有超過MaxSpareServers數量的空閒子進程,那麼父進程將殺死多餘的子進程。只有在很是繁忙機器上才須要調整這個參數
。將此參數設的太大一般是一個壞主意。若是你將該指令的值設置爲比MinSpareServers 小,Apache將會自動將其修改爲"MinSpareServers+1"。
ServerLimit:服務器容許配置的進程數上限。只有在你須要將MaxClients設置成高於默認值256的時候才須要使用。要將此指令的值保持和MaxClients同樣。修改此指令的值必須
徹底中止服務後再啓動才能生效,以restart方式重啓動將不會生效。
MaxClients:用於伺服客戶端請求的最大請求數量(最大子進程數),任何超過MaxClients限制的請求都將進入等候隊列。默認值是256,若是要提升這個值必須同時提升
ServerLimit的值。筆者建議將初始值設爲(以Mb爲單位的最大物理內存/2),而後根據負載狀況進行動態調整。好比一臺4G內存的機器,那麼初始值就是4000/2=2000。
MaxRequestsPerChild:設置每一個子進程在其生存期內容許伺服的最大請求數量。到達MaxRequestsPerChild的限制後,子進程將會結束。若是MaxRequestsPerChild爲"0",子進程
將永遠不會結束。將MaxRequestsPerChild設置成非零值有兩個好處:能夠防止(偶然的)內存泄漏無限進行而耗盡內存;
給進程一個有限壽命,從而有助於當服務器負載減輕的時候減小活動進程的數量。
若是設置爲非零值,建議設爲10000-30000之間的一個值。
公式:MaxClients<=ServerLimit
#設置worker多路處理模塊
<IfModule mpm_worker_module>
StartServers 5
ServerLimit 20
ThreadLimit 200
MaxClients 4000
MinSpareThreads 25
MaxSpareThreads 250
ThreadsPerChild 200
MaxRequestsPerChild 0
</IfModule>
StartServers:設置服務器啓動時創建的子進程數量。由於子進程數量動態的取決於負載的輕重,全部通常沒有必要調整這個參數。
ServerLimit:服務器容許配置的進程數上限。只有在你須要將MaxClients和ThreadsPerChild設置成須要超過默認值16個子進程的時候才須要使用這個指令。不要將該指令的值設
置的比MaxClients 和ThreadsPerChild須要的子進程數量高。修改此指令的值必須徹底中止服務後再啓動才能生效,以restart方式重啓動將不會生效。
ThreadLimit:設置每一個子進程可配置的線程數ThreadsPerChild上限,該指令的值應當和ThreadsPerChild可能達到的最大值保持一致。修改此指令的值必須徹底中止服務後再啓動
才能生效,以restart方式重啓動將不會生效。
MaxClients:用於伺服客戶端請求的最大接入請求數量(最大線程數)。任何超過MaxClients限制的請求都將進入等候隊列。默認值是"400",16 (ServerLimit)乘以25
(ThreadsPerChild)的結果。所以要增長MaxClients的時候,你必須同時增長 ServerLimit的值。筆者建議將初始值設爲(以Mb爲單位的最大物理內存/2),而後根據負載狀況進行動
態調整。好比一臺4G內存的機器,那麼初始值就是4000/2=2000。
MinSpareThreads:最小空閒線程數,默認值是"75"。這個MPM將基於整個服務器監視空閒線程數。若是服務器中總的空閒線程數太少,子進程將產生新的空閒線程。
MaxSpareThreads:設置最大空閒線程數。默認值是"250"。這個MPM將基於整個服務器監視空閒線程數。若是服務器中總的空閒線程數太多,子進程將殺死多餘的空閒線程。
MaxSpareThreads的取值範圍是有限制的。Apache將按照以下限制自動修正你設置的值:worker要求其大於等於 MinSpareThreads加上ThreadsPerChild的和。
ThreadsPerChild:每一個子進程創建的線程數。默認值是25。子進程在啓動時創建這些線程後就再也不創建新的線程了。每一個子進程所擁有的全部線程的總數要足夠大,以即可以處理
可能的請求高峯。
MaxRequestsPerChild:設置每一個子進程在其生存期內容許伺服的最大請求數量。到達MaxRequestsPerChild的限制後,子進程將會結束。若是MaxRequestsPerChild爲"0",子進程
將永遠不會結束。將MaxRequestsPerChild設置成非零值有兩個好處:能夠防止(偶然的)內存泄漏無限進行而耗盡內存;
給進程一個有限壽命,從而有助於當服務器負載減輕的時候減小活動進程的數量。
若是設置爲非零值,建議設爲10000-30000之間的一個值。
公式:
ThreadLimit >= ThreadsPerChild
MaxClients <= ServerLimit * ThreadsPerChild 必須是ThreadsPerChild的倍數
MaxSpareThreads >= MinSpareThreads+ThreadsPerChild
#配置Apache服務器默認設置 httpd-default.conf
Timeout 300
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 5
UseCanonicalName Off
AccessFileName .htaccess
ServerTokens Prod
ServerSignature Off
HostnameLookups Off
Timeout:設置服務器在判定請求失敗前等待的秒數。默認值300。
KeepAlive:設置是否啓用HTTP持久連接,On 表明打開,Off 表明關閉。若是用於同一頁面包含大量靜態文件的應用,設置爲On,以提升性能;若是用於主要爲動態頁面的應用,
設置爲Off,以節約內存資源;若是服務器前跑有squid或者其它七層設備,設置爲On。
MaxKeepAliveRequests:限制當啓用KeepAlive時,每一個鏈接容許的請求數量。若是將此值設爲"0",將不限制請求的數目。筆者建議將此值設爲100-500之間的一個值,以確保最優
的服務器性能。
KeepAliveTimeout:設置持久連接中服務器在兩次請求之間等待的秒數。對於高負荷服務器來講,KeepAliveTimeout值較大會致使一些性能方面的問題:超時值越大,與空閒客戶
端保持鏈接的進程就越多。
UseCanonicalName:配置服務器如何肯定它本身的域名,可選值爲On | Off | DNS。DNS用於爲大量基於IP的虛擬主機支持那些古董級的不提供"Host:"頭的瀏覽器使用。筆者建議
設置爲Off。
AccessFileName:設置分佈式配置文件的名字,默認爲.htaccess。若是爲某個目錄啓用了分佈式配置文件功能,那麼在向客戶端返回其中的文檔時,服務器將在這個文檔所在的各
級目錄中查找此配置文件,所以會帶來性能問題,筆者建議關閉分佈式配置文件功能。
ServerTokens:控制服務器迴應給客戶端的"Server:"應答頭是否包含關於服務器操做系統類型和編譯進的模塊描述信息,同時還控制着 ServerSignature指令的顯示內容。可選值
爲Full | OS | Minor | Minimal | Major | Prod。筆者建議設置爲顯示最少信息的Prod。
ServerSignature:配置服務器生成頁面的頁腳,可選值爲On | Off | EMail。採用On會簡單的增長一行關於服務器版本和正在伺服的虛擬主機的ServerName,而EMail設置會額外
建立一個指向 ServerAdmin的"mailto:"部分。建議使用默認值Off。
HostnameLookups:設置是否啓用對客戶端IP的DNS查找,可選值爲On | Off | Double。DNS查詢會形成明顯的時間消耗,建議設置爲Off。
#配置mod_deflate壓縮模塊 httpd-deflate.conf
mod_deflate模塊提供了DEFLATE輸出過濾器,容許服務器在將輸出內容發送到客戶端之前進行壓縮,以節約帶寬。
編輯mod_deflate壓縮模塊設置文件:
<IfModule mod_deflate.c>
DeflateMemLevel 9
DeflateWindowSize 15
DeflateBufferSize 8096
DeflateCompressionLevel 8
## 調試時去掉下面5行前的註釋符,用以記錄壓縮日誌
#DeflateFilterNote Input instream
#DeflateFilterNote Output outstream
#DeflateFilterNote Ratio ratio
#LogFormat '"%r" %b %{outstream}n/%{instream}n (%{ratio}n%%) "%{User-agent}i"' deflate
#CustomLog logs/deflate_log deflate
## 插入DEFLATE過濾器,以啓用輸出壓縮
SetOutputFilter DEFLATE
## Netscape 4.x 有一些問題,僅壓縮txt/html類型
BrowserMatch ^Mozilla/4 gzip-only-text/html
## Netscape 4.06-4.08不能處理任何壓縮內容,不進行壓縮
BrowserMatch ^Mozilla/4.0[678] no-gzip
## MSIE 會假裝成 Netscape ,可是事實上它沒有問題
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
## 設置圖片、mp三、壓縮格式文件等不須要進行壓縮內容
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
## 確保代理不會發送錯誤的內容
Header append Vary User-Agent env=!dont-vary
</IfModule>
DeflateMemLevel:指定zlib在壓縮時最多可使用多少內存,取值範圍在1到9之間。
DeflateWindowSize:定義zlib壓縮窗口(compression window)的大小,取值範圍在1到15之間,一般窗口越大壓縮效果越好。
DeflateBufferSize:定義zlib一次壓縮的片段的字節數,默認爲8096。
DeflateCompressionLevel:設定壓縮程度,越高的壓縮程度就會有越好的壓縮效果,同時也意味着佔用越多的CPU資源。取值範圍在 1(最低壓縮率) 到 9(最高壓縮率)之間,若是
不設置此指令,默認爲zlib的默認值。
DeflateFilterNote:在日誌中放置壓縮率標記。
語法爲:DeflateFilterNote type notename
notename就表示這個壓縮率標記的名字,你能夠爲了某種統計目的將這個標記的名字添加到訪問日誌中。
type指定notename標記所記錄的數據類型:Input,在標記中存儲過濾器輸入流的字節數;Output,在標記中存儲過濾器輸出流的字節數;Ratio,在標記中存儲過濾器的壓縮比(輸
出/輸入*100),這是type的默認值。
SetOutputFilter:設置用於在服務器應答發送到客戶端以前使用的過濾器。若是多於一個過濾器,必須按照處理內容的順序用分號(;)分隔。
BrowserMatch:基於User-Agent頭有條件地設置環境變量。
SetEnvIfNoCase:根據大小寫無關的客戶端請求屬性設置環境變量。
Headers:配置HTTP應答頭。這個指令能夠替換、合併、刪除HTTP應答頭。應答頭緊跟在內容處理器和輸出過濾器完工以後生成,這時候才能對頭進行修改。
#配置mod_expires模塊
這個模塊控制服務器應答時的Expires頭內容和Cache-Control頭的max-age指令。有效期(expiration date)能夠設置爲相對於源文件的最後修改時刻或者客戶端的訪問時刻。這些
HTTP頭向客戶端代表了文檔的有效性和持久性。若是有緩存,文檔就能夠從緩存(除已通過期)而不是從服務器讀取。接着,客戶端考察緩存中的副本,看看是否過時或者失效,以
決定是否必須從服務器得到更新。
編輯mod_expires設置文件:httpd-expires.conf
## mod_expires設置文件
<IfModule mod_expires.c>
ExpiresActive on
ExpiresDefault A300
ExpiresByType text/html A300
ExpiresByType image/gif A2592000
ExpiresByType image/jpeg A2592000
ExpiresByType image/png A2592000
ExpiresByType text/css A2592000
ExpiresByType text/js A2592000
ExpiresByType text/javascript A2592000
ExpiresByType application/x-javascript A2592000
</IfModule>
ExpiresActive:對其做用範圍內的文檔啓用或禁用產生Expires和Cache-Control頭的功能。若設置爲 Off 則不會爲其做用範圍內的任何文檔生成Expires和Cache-Control頭(除非
被更低一層的規則改寫,好比.htaccess文件)。若設置爲 On 則會按照ExpiresByType和ExpiresDefault指令定義的標準爲其做用範圍內的文檔生成Expires和Cache-Control 頭。
注意,這個指令並不保證Expires或Cache-Control頭必定會產生。若是定義的標準不規範,將不會產生這兩個頭,其效果是好像從未設置過這個指令同樣。
ExpiresByType:爲指定MIME類型的文檔配置Expires頭的值。
語法爲:ExpiresByType MIME-type <code>seconds
seconds參數設置了添加到基準時間以構造有效期限的秒數。Cache-Control: max-age的計算方法是從有效期減去當前請求時間並轉化爲秒數。
基準時刻能夠是源文件的最後修改時刻或者客戶端對源文件的訪問時刻,至於使用那一個則由<code>指定。"M"表示源文件的最後修改時刻,"A"表示客戶端對源文件的訪問時刻。
須要注意的是<code>和seconds之間沒有空格。若是使用"M",全部當前緩存中的文檔副本都將在同一時刻過時,這個可能對按期更新的URL(好比位於同一位置的每週通告)頗有好處
。若是使用"A",則每一個客戶端所獲得的有效期是不同的,這個可能對那些幾乎不更新的圖片文件頗有好處,特別是對於一組都引用了相同圖片的相關文檔。
ExpiresDefault:設置其做用範圍內的全部文檔的默認有效期的計算方法,它能夠被ExpiresByType指令基於MIME類型被改寫。
語法爲:ExpiresDefault <code>seconds
<code>seconds同ExpiresByType一致。
#最後配置一下虛擬主機 httpd-vhost.conf
#這裏重點介紹一下基於多端口的配置
NameVirtualHost *:81
NameVirtualHost *:82
NameVirtualHost *:83
<VirtualHost *:81>
ServerAdmin jafy@jafy00.com
DocumentRoot /www1
ServerName www.jafy00.com
ErrorLog logs/www1-error.log
CustomLog logs/www1-access_log common
</VirtualHost>
<VirtualHost *:82>
<Directory "/www2" >
Options FollowSymLinks
#Deny from all
Allow from all
</Directory>
ServerAdmin jafy@jafy00.com
DocumentRoot /www2
ServerName www.jafy00.comDirectoryIndex index.php index.htmlErrorLog logs/www2-error.logCustomLog logs/www2-access_log combined</VirtualHost>