一、虛擬主機(jī)配置文件參數(shù)
以企業(yè)實際生產(chǎn)環(huán)境為例,以下是一臺虛擬主機(jī)配置代碼
<VirtualHost *:80>
ServerAdmin wgkgood@163.com
DocumentRoot "/data/webapps/www1" #設(shè)置發(fā)布目錄
ServerName www.wugk1.com #設(shè)置域名
<Directory "/data/webapps/www1"> #對發(fā)布目錄設(shè)置權(quán)限
AllowOverride All #具有 “.htaccess” 作用域?qū)⑸?加載這些文件,里面設(shè)置一些規(guī)則如跳轉(zhuǎn)等
Options -Indexes FollowSymLinks #禁止顯示目錄結(jié)構(gòu),必須以html方式解析
Order allow,deny # 默認(rèn)情況下禁止所有客戶機(jī)訪問
Allow from all #允許所有客戶機(jī)訪問
</Directory>
ErrorLog logs/error_log
CustomLog logs/access_log common
</VirtualHost>
參數(shù)詳解
使用<Directory>… </Directory>設(shè)置指定目錄的訪問權(quán)限,其中可包含:
- Options
- AllowOverride
- Order
- Allow
- Deny
如上五個屬性,在后面可以跟如下參數(shù)設(shè)置:
- AllowOverride 設(shè)置為 None 時, .htaccess 文件將被完全忽略。指令設(shè)置為 All 時,所有具有 “.htaccess” 作用域?qū)⑸?
- Options -Indexes FollowSymLinks禁止顯示目錄,如果要以目錄顯示需要改成Options Indexes FollowSymLinks,一般作為資源下載站會以目錄結(jié)構(gòu)顯示.一般網(wǎng)站禁止瀏覽防止代碼被下載.
- Order allow,deny ,默認(rèn)情況下禁止所有客戶機(jī)訪問;Order deny,allow 默認(rèn)情況下允許所有客戶機(jī)訪問.
- Allow from all允許所有客戶機(jī)訪問
二、apache常用文件說明(以yum安裝為例,源碼安裝則在對應(yīng)的安裝目錄下)
- /etc/httpd/conf/httpd.conf (Apache的主配文件)
httpd.conf是Apache的主配文件,整個Apache也不過就是這個配置文件,里面幾乎包含了所有的配置。有的distribution都將這個文件拆分成數(shù)個小文件分別管理不同的參數(shù)。但是主要配置文件還是以這個文件為主。只要找到這個文件名就知道如何設(shè)置了。后面會詳細(xì)解釋Apache主配文件的每一行配置 - /etc/httpd/conf.d/*.conf(include文件,引用文件)
如果你不想要修改原始配置文件httpd.conf的話,那么可以將你自己的額外參數(shù)文件獨立出來,注意以.conf結(jié)尾放在/etc/httpd/conf.d/目錄下。重啟Apache的時候,這個配置文件就會被讀入主配文件之中了。他的好處就是當(dāng)你在進(jìn)行系統(tǒng)升級的時候,幾乎不需要改動原本的配置文件,只要將你自己的額外參數(shù)文件復(fù)制到正確的地點即可,維護(hù)起來非常方便。 - /usr/lib64/httpd/modules/
/etc/httpd/modules/
Apache支持很多的外掛模塊,例如PHP以及SSL都是Apache外掛的一種。所有你想要使用的模塊文件默認(rèn)是放置在這個目錄當(dāng)中的。 - /var/www/html/ ( (網(wǎng)站根目錄,發(fā)布目錄)
這個目錄就是Apache默認(rèn)的存放首頁的目錄(默認(rèn)是索引頁面index.html) - /var/www/error/
當(dāng)因為服務(wù)器設(shè)置錯誤,或是瀏覽器要求的數(shù)據(jù)錯誤時,在瀏覽器上出現(xiàn)的錯誤信息就以這個目錄的默認(rèn)信息為主 - /var/www/icons/
這個目錄提供Apache默認(rèn)給予的一些小圖示,可以隨意使用。 - /var/www/cgi-bin/
默認(rèn)給一些可執(zhí)行的CGI(網(wǎng)頁程序)程序放置的目錄。 - /var/log/httpd/
默認(rèn)的Apache日志文件都放在這里,對于流量比較大的網(wǎng)站來說,這個目錄要格外注意,這里的數(shù)據(jù)文件可能會非常大。 - /usr/sbin/apachectl
這個就是Apache的主要執(zhí)行文件,這個執(zhí)行文件其實就是一個Shell Script而已,他可以主動地偵測系統(tǒng)上面的一些設(shè)置值,好讓你啟動Apache時更簡單一些。 - /usr/sbin/httpd
這個是主要的Apache二進(jìn)制執(zhí)行文件。 - /usr/bin/htpasswd ( (Apache密碼保護(hù))
在當(dāng)你想要登入某些網(wǎng)頁時你需要輸入帳號與密碼,那Apache本身就提供一個最基本的密碼保護(hù)方式,該密碼的產(chǎn)生就是通過這個命令來實現(xiàn)的。
三、apache工作模式
一般來說常用的apache服務(wù)器有兩種工作模式prefork
和worker
兩種,源碼包預(yù)編譯的時候參數(shù)--with-mpm=MPM
就是選擇安裝引擎的工作模式MPM={beos|event|worker|prefork|mpmt_os2|winnt}
- prefork的工作原理(默認(rèn)模式)
如果不用參數(shù)--with-mpm
顯式指定某種MPM
,prefork
就是Unix平臺上缺省的MPM
.它所采用的預(yù)派生子進(jìn)程方式也是Apache1.3中采用的模式.prefork本身并沒有使用到線程,2.0版使用它是為了與1.3版保持兼容性;另一方面,prefork用單獨的子進(jìn)程來處理不同的請求,進(jìn)程之間是彼此獨立的,這也使其成為最穩(wěn)定的MPM之一.
也就是apache啟動時會產(chǎn)生主進(jìn)程master,由主進(jìn)程再預(yù)先派生一些子進(jìn)程來接收處理客戶端的請求,每個子進(jìn)程有一個獨立的線程,每個子進(jìn)程能處理一個請求,相互之間也是獨立的,好處是這是最穩(wěn)定的工作模式.
缺點是很占用內(nèi)存,無法為大數(shù)量級的客戶端提供服務(wù),不適用于高并發(fā)的網(wǎng)站. - worker的工作原理
worker是2.0版中全新的支持多線程和多進(jìn)程混合模型的MPM.由于使用線程來處理,所以可以處理相對海量的請求,而系統(tǒng)資源的開銷要小于基于進(jìn)程的服務(wù)器.但是,worker也使用了多進(jìn)程,每個進(jìn)程又生成多個線程,以獲得基于進(jìn)程服務(wù)器的穩(wěn)定性.這種MPM的工作方式將是Apache2.0的發(fā)展趨勢.
worker的工作原理是,由主控制進(jìn)程生成“StartServers”個子進(jìn)程,每個子進(jìn)程中包含固定的ThreadsPerChild線程數(shù),各個線程獨立地處理請求.同樣,為了不在請求到來時再生成線程,MinSpareThreads和MaxSpareThreads設(shè)置了最少和最多的空閑線程數(shù);而MaxClients設(shè)置了所有子進(jìn)程中的線程總數(shù).如果現(xiàn)有子進(jìn)程中的線程總數(shù)不能滿足負(fù)載,控制進(jìn)程將派生新的子進(jìn)程.
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)
Worker模式:Worker MPM 使用多個子進(jìn)程,每個子進(jìn)程有多個線程。每個線程在某個確定的時間只能維持一個連接。通常來說,在一個高流量的HTTP服務(wù)器上,Worker MPM是個比較好的選擇,因為Worker MPM的內(nèi)存使用比Prefork MPM要低得多。
Worker MPM也由不完善的地方,如果一個線程崩潰,整個進(jìn)程就會連同其所有線程一起"死掉".由于線程共享內(nèi)存空間,所以一個程序在運行時必須被系統(tǒng)識別為"每個線程都是安全的". - 查看安裝apache服務(wù)器支持的模塊
[root@mini bin]# /usr/local/apache2/bin/httpd -l
,列表中的prefork.c
模塊就代表的是prefork
模式
兩種工作模式配置文件,/usr/local/apache2/conf/extra/httpd-mpm.conf
[root@mini extra]# vim /usr/local/apache2/conf/extra/httpd-mpm.conf
# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_prefork_module>
StartServers 8 #初始化啟動工作子進(jìn)程,主進(jìn)程master只有1個,開啟服務(wù)時生成
ServerLimit 1000 #服務(wù)器最大并發(fā)數(shù)量,一般和 MaxClients保持一直,否則會報警,默認(rèn)是256
MinSpareServers 25 #預(yù)留最小空閑進(jìn)程
MaxSpareServers 75 #預(yù)留最大空閑進(jìn)程
MaxClients 1000 #客戶端最大連接數(shù)
MaxRequestsPerChild 100000 #每個子進(jìn)程最大處理請求數(shù)之和,0表示無限制是一直存在,否則達(dá)到數(shù)量后殺掉重新生成
</IfModule>
# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_worker_module>
StartServers 2 #初始化啟動工作子進(jìn)程
MaxClients 4000 #客戶端連接數(shù),每秒最大的并發(fā)數(shù)
MinSpareThrea ds 25 #預(yù)留最小空閑線程
MaxSpareThreads 75 #預(yù)留最大空閑線程
ThreadsPerChild 500 #每個子進(jìn)程支持的線程數(shù)量
MaxRequestsPerChild 10000 #每個線程處理連接總數(shù),之后殺掉重新生成
</IfModule>
四、ReWrite規(guī)則
即網(wǎng)頁重定向功能,實現(xiàn)的是URL的跳轉(zhuǎn),有兩種配置方式,一種是基于服務(wù)器級別的即修改主配置文件httpd.conf,一種書目錄級的即通過加載(.htaccess)文件.
實現(xiàn)rewrite功能需要在安裝預(yù)編譯的時候就增加參數(shù)--enable-rewrite
來為服務(wù)器增加特定的功能模塊.
修改配置文件httpd.conf
,增加配置語句
RewriteEngine on #啟用rewrite引擎
RewriteCond %{HTTP_HOST} ^wugk1.com [NC] //匹配以wugk1.com開頭的域名,NC忽略大小寫。
RewriteRule ^/(.*)$ http://www.wugk1.com/$1 [L]
//匹配上面條件,然后跳轉(zhuǎn)到http://www.wugk1.com
1)R 強(qiáng)制外部重定向。
2)F 禁用URL,返回403HTTP狀態(tài)碼。
3)G 強(qiáng)制URL為GONE,返回410HTTP狀態(tài)碼。
4)P 強(qiáng)制使用代理轉(zhuǎn)發(fā)。
5)L 表明當(dāng)前規(guī)則是最后一條規(guī)則,停止分析以后規(guī)則的重寫。
6)N 重新從第一條規(guī)則開始運行重寫過程。
7)C 與下一條規(guī)則關(guān)聯(lián)。