第十五節(jié)、apache虛擬主機(jī)配置參數(shù)、常用文件及工作模式說明及rewrite規(guī)則

一、虛擬主機(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è)置:
  1. AllowOverride 設(shè)置為 None 時, .htaccess 文件將被完全忽略。指令設(shè)置為 All 時,所有具有 “.htaccess” 作用域?qū)⑸?
  2. Options -Indexes FollowSymLinks禁止顯示目錄,如果要以目錄顯示需要改成Options Indexes FollowSymLinks,一般作為資源下載站會以目錄結(jié)構(gòu)顯示.一般網(wǎng)站禁止瀏覽防止代碼被下載.
  3. Order allow,deny ,默認(rèn)情況下禁止所有客戶機(jī)訪問;Order deny,allow 默認(rèn)情況下允許所有客戶機(jī)訪問.
  4. Allow from all允許所有客戶機(jī)訪問
二、apache常用文件說明(以yum安裝為例,源碼安裝則在對應(yīng)的安裝目錄下)
  1. /etc/httpd/conf/httpd.conf (Apache的主配文件)
    httpd.conf是Apache的主配文件,整個Apache也不過就是這個配置文件,里面幾乎包含了所有的配置。有的distribution都將這個文件拆分成數(shù)個小文件分別管理不同的參數(shù)。但是主要配置文件還是以這個文件為主。只要找到這個文件名就知道如何設(shè)置了。后面會詳細(xì)解釋Apache主配文件的每一行配置
  2. /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ù)起來非常方便。
  3. /usr/lib64/httpd/modules/
    /etc/httpd/modules/
    Apache支持很多的外掛模塊,例如PHP以及SSL都是Apache外掛的一種。所有你想要使用的模塊文件默認(rèn)是放置在這個目錄當(dāng)中的。
  4. /var/www/html/ ( (網(wǎng)站根目錄,發(fā)布目錄)
    這個目錄就是Apache默認(rèn)的存放首頁的目錄(默認(rèn)是索引頁面index.html)
  5. /var/www/error/
    當(dāng)因為服務(wù)器設(shè)置錯誤,或是瀏覽器要求的數(shù)據(jù)錯誤時,在瀏覽器上出現(xiàn)的錯誤信息就以這個目錄的默認(rèn)信息為主
  6. /var/www/icons/
    這個目錄提供Apache默認(rèn)給予的一些小圖示,可以隨意使用。
  7. /var/www/cgi-bin/
    默認(rèn)給一些可執(zhí)行的CGI(網(wǎng)頁程序)程序放置的目錄。
  8. /var/log/httpd/
    默認(rèn)的Apache日志文件都放在這里,對于流量比較大的網(wǎng)站來說,這個目錄要格外注意,這里的數(shù)據(jù)文件可能會非常大。
  9. /usr/sbin/apachectl
    這個就是Apache的主要執(zhí)行文件,這個執(zhí)行文件其實就是一個Shell Script而已,他可以主動地偵測系統(tǒng)上面的一些設(shè)置值,好讓你啟動Apache時更簡單一些。
  10. /usr/sbin/httpd
    這個是主要的Apache二進(jìn)制執(zhí)行文件。
  11. /usr/bin/htpasswd ( (Apache密碼保護(hù))
    在當(dāng)你想要登入某些網(wǎng)頁時你需要輸入帳號與密碼,那Apache本身就提供一個最基本的密碼保護(hù)方式,該密碼的產(chǎn)生就是通過這個命令來實現(xiàn)的。
三、apache工作模式

一般來說常用的apache服務(wù)器有兩種工作模式preforkworker兩種,源碼包預(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)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容