天天看點

淺析apache主配置檔案

Apache源于NCSAhttpd伺服器,經過多次修改,成為世界上最流行的 Web伺服器軟體之一。Apache取自“a patchy server”的讀音,意思是充滿更新檔的伺服器,因為它是自由

軟體,是以不斷有人來為它開發新的功能、新的特性、修改原來的缺陷。Apache的特點是簡單、速度快、性能穩定,并可做代理伺服器來使用

Apache的主要特征是: 可以運作上所有計算機平台; 支援最新的HTTP 1.1協定; 簡單而強有力的基于檔案的配置; 支援通用網關接口CGI; 支援虛拟主機; 支援HTTP認證;

內建Perl腳本程式設計語言。內建的代理伺服器; 具有可定制的伺服器日志; 支援伺服器端包含指令(SSI) 支援安全Socket層(SSL) 使用者會話過程的跟蹤能力; 支援FastCGI;

支援Java Servlets

下面讓我們一起探讨apache主配置檔案的功能及實作:

[root@lyt ~]# mkdir /mnt/cdrom/

[root@lyt ~]# mount /dev/cdrom /mnt/cdrom/

[root@lyt ~]# cd /mnt/cdrom/Server/

[root@lyt Server]# vim /etc/httpd/conf/httpd.conf       #編輯httpd的主配置檔案

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714214ZK0F.png"></a>

[root@lyt Server]# service httpd start      #隻有啟動httpd伺服器之後才會顯示父程序号,且沒重新開機一次httpd就會顯示不同的父程序号

[root@lyt Server]# vim /etc/httpd/conf/httpd.conf

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714214TW0s.png"></a>

[root@lyt Server]# ps aux |less         #檢視程序:

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_13497142155GdQ.png"></a>

[root@lyt Server]# vim /etc/httpd/conf/httpd.conf   

?在APACHE的httpd.conf中,KeepAlive指的是保持連接配接活躍,類似于Mysql的永久連接配接。換一句話說,如果将KeepAlive設定為On,那麼來自同一用戶端的請求就不需要再一次連接配接,避免每次請求都要建立一個連接配接而加重伺服器的負擔。KeepAlive的連接配接活躍時間當然是受KeepAliveTimeOut限制的。如果第二次請求和第一次請求之間超過KeepAliveTimeOut的時間的話,第一次連接配接就會中斷,再建立第二個連接配接。是以,一般情況下,圖檔較多的網站應該把KeepAlive設為On。timeout是apache收到上一個請求和後面一個請求到來之間的最大值。

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714216yow5.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714216HaBb.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714216tjDi.png"></a>

(1start)######################################################################################

這個多路處理子產品(MPM)實作了一個非線程型的、預派生的web伺服器,它的工作方式類似于Apache 1.3。它适合于沒有線程安全庫,需要避免線程相容性問題的系統。它是

要求将每個請求互相獨立的情況下最好的MPM,這樣若一個請求出現問題就不會影響到其他請求。

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714217400r.png"></a>

ServerLimit 

預設的MaxClient最大是256個線程,如果想設定更大的值,就的加上ServerLimit這個參數。20000是ServerLimit這個參數的最大值。如果需要更大,則必須編譯apache,此前都是不需要重新編譯Apache。 

生效前提:必須放在其他指令的前面

StartServers 

指定伺服器啟動時建立的子程序數量,prefork預設為5。

MinSpareServers 

指定空閑子程序的最小數量,預設為5。如果目前空閑子程序數少于MinSpareServers ,那麼Apache将以最大每秒一個的速度産生新的子程序。此參數不要設的太大。

MaxSpareServers 

設定空閑子程序的最大數量,預設為10。如果目前有超過MaxSpareServers數量的空閑子程序,那麼父程序将殺死多餘的子程序。此參數不要設的太大。如果你将該指令的值設定為比MinSpareServers小,Apache将會自動将其修改成"MinSpareServers+1"。

MaxClients 

限定同一時間用戶端最大接入請求的數量(單個程序并發線程數),預設為256。任何超過MaxClients限制的請求都将進入等候隊列,一旦一個連結被釋放,隊列中的請求将得到服務。要增大這個值,你必須同時增大ServerLimit。

MaxRequestsPerChild 

每個子程序在其生存期内允許伺服的最大請求數量,預設為10000.到達MaxRequestsPerChild的限制後,子程序将會結束。如果MaxRequestsPerChild為"0",子程序将永遠不會結束。将MaxRequestsPerChild設定成非零值有兩個好處: 

1.可以防止(偶然的)記憶體洩漏無限進行,進而耗盡記憶體。 

2.給程序一個有限壽命,進而有助于當伺服器負載減輕的時候減少活動程序的數量。

(1stop)#######################################################################################

(2start)######################################################################################

此多路處理子產品(MPM)使網絡伺服器支援混合的多線程多程序。由于使用線程來處理請求,是以可以處理海量請求,而系統資源的開銷小于基于程序的MPM。但是,它也使用了多

程序,每個程序又有多個線程,以獲得基于程序的MPM的穩定性。

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714217cxVl.png"></a>

伺服器啟動時建立的子程序數,預設值是"2。

允許同時伺服的最大接入請求數量(最大線程數量)。任何超過MaxClients限制的請求都将進入等候隊列。預設值是"400",16(ServerLimit)乘以25(ThreadsPerChild)的結果。是以要增加MaxClients的時候,你必須同時增加ServerLimit的值。

MinSpareThreads 

最小空閑線程數,預設值是"75"。這個MPM将基于整個伺服器監視空閑線程數。如果伺服器中總的空閑線程數太少,子程序将産生新的空閑線程。

MaxSpareThreads 

設定最大空閑線程數。預設值是"250"。這個MPM将基于整個伺服器監視空閑線程數。如果伺服器中總的空閑線程數太多,子程序将殺死多餘的空閑線程。MaxSpareThreads的取值範圍是有限制的。Apache将按照如下限制自動修正你設定的值:worker要求其大于等于MinSpareThreads加上ThreadsPerChild的和。

ThreadsPerChild 

每個子程序建立的常駐的執行線程數。預設值是25。子程序在啟動時建立這些線程後就不再建立新的線程了。

設定每個子程序在其生存期内允許伺服的最大請求數量。到達MaxRequestsPerChild的限制後,子程序将會結束。如果MaxRequestsPerChild為"0",子程序将永遠不會結束。将MaxRequestsPerChild設定成非零值有兩個好處: 

2.給程序一個有限壽命,進而有助于當伺服器負載減輕的時候減少活動程序的數量。 

注意對于KeepAlive連結,隻有第一個請求會被計數。事實上,它改變了每個子程序限制最大連結數量的行為。

(2stop)######################################################################################

(3start)######################################################################################

prefork和worker模式的比較 

prefork模式使用多個子程序,每個子程序隻有一個線程。每個程序在某個确定的時間隻能維持一個連接配接。在大多數平台上,Prefork MPM在效率上要比Worker MPM要高,但是記憶體使用大得多。prefork的無線程設計在某些情況下将比worker更有優勢:它可以使用那些沒有處理好線程安全的第三方子產品,并且對于那些線程調試困難的平台而言,它也更容易調試一些。

worker模式使用多個子程序,每個子程序有多個線程。每個線程在某個确定的時間隻能維持一個連接配接。通常來說,在一個高流量的HTTP伺服器上,Worker MPM是個比較好的選擇,因為Worker MPM的記憶體使用比Prefork MPM要低得多。但worker MPM也由不完善的地方,如果一個線程崩潰,整個程序就會連同其所有線程一起"死掉".由于線程共享記憶體空間,是以一個程式在運作時必須被系統識别為"每個線程都是安全的"。

總的來說,prefork方式速度要稍高于worker,然而它需要的cpu和memory資源也稍多于woker。

(3stop)###################################################################################### 

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714218V0E3.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714219laAA.png"></a>

(4start)######################################################################################

目錄安全性:(身份驗證,使用賬号密碼進行驗證)

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714219rML0.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_13497142198F8T.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714220ZDm1.png"></a>

[root@lyt Server]# cd /var/www/html/          #由于是對/var/www/html下作的安全性目錄,是以在該目錄下建立  .htaccess檔案

[root@lyt html]# vim .htaccess          #該檔案的作用是如何實作對來訪者的身份進行驗證

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_13497142205VeV.png"></a>

[root@lyt html]# htpasswd -c .htpasswd  user1         #使用htpasswd為user1建立密碼庫,首次使用要使用-c建立  .htpasswd檔案

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714220xy9C.png"></a>

[root@lyt html]# htpasswd  .htpasswd  user2         #為user2建立密碼庫,此處不必再使用-c參數,因為   .htpasswd檔案已經建立了

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714221YQD4.png"></a>

[root@lyt html]# vim index.html       #建立測試頁

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714221wHqO.png"></a>

[root@lyt html]# service httpd restart         #重新開機httpd服務

測試:

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714222EA1Y.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714222ZWho.png"></a>

目錄安全性:(來源控制,使用ip位址驗證)

[root@lyt html]# vim /etc/httpd/conf/httpd.conf    

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714222FqwU.png"></a>

[root@lyt html]# service httpd restart

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714223TMI0.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714223D4o5.png"></a>

(4stop)######################################################################################

(5start)######################################################################################

建立個人站點并使用賬号庫進行身份驗證:

[root@lyt httpd]# vim /etc/httpd/conf/httpd.conf

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714224TIyQ.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714224SXLI.png"></a>

[root@lyt httpd]# useradd test1       #添加使用者user1

[root@lyt httpd]# su – test1          #切換到使用者test1

[test1@lyt ~]$ mkdir public_html        #建立public_html目錄作為個人站點的目錄

[test1@lyt ~]$ cd public_html/

[test1@lyt public_html]$ vim test1.html      #建立個人站點的網頁test1.html

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714225lldY.png"></a>

[test1@lyt public_html]$ chmod o+rx   /home/test1/        #為test1目錄加上可讀可執行權限

[test1@lyt public_html]$ vim .htaccess          #編輯賬号庫檔案

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_13497142258xbd.png"></a>

[test1@lyt public_html]$ htpasswd -c .htpasswd user1      #建立密碼庫htpasswd,并建立user1使用者作為個人站點登入使用者

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714226PoPx.png"></a>

在httpd的配置檔案中使用别名Alias可以将上面的“~”去掉:

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714227klwb.png"></a>

<a href="http://blog.51cto.com/attachment/201210/004231678.png" target="_blank"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714227TEGa.png"></a>

(5stop)######################################################################################

[root@lyt html]# vim /etc/httpd/conf/httpd.conf

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714228ncHg.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714228xsXD.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714229wjKZ.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714229ptdU.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714230NBd4.png"></a>

[root@lyt html]# cd /etc/httpd/ #切換到httpd的根目錄

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714230wPoE.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714231d5EQ.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714231i6Yo.png"></a>

(6start)######################################################################################

實體目錄:實體目錄必須放置到别人的目錄中,而且在通路的時候必須寫上實體目錄的名稱。

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714231n732.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714232Enui.png"></a>

[root@lyt httpd]# cd /var/www/html/

[root@lyt html]# mkdir abc     #建立一個實體目錄abc

[root@lyt html]# cd abc/

[root@lyt abc]# echo "abc"&gt;index.html      #建立實體目錄abc的網頁index.html

[root@lyt abc]# su – test1       #切換到個人站點test1

[test1@lyt public_html]$ mkdir abc/       #在個人站點test1中建立實體目錄abc

[test1@lyt public_html]$ echo "lasdfjlas"&gt;index.html        #在個人站點test1中建立的實體目錄下建立index.html檔案

[test1@lyt abc]$ exit        #退出個人站點test1

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714232XF6O.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714233OMwp.png"></a>

虛拟目錄:其實是通過别名實作的,真實的目錄可以随意放置,通路時隻使用别名即可

[root@lyt abc]# mkdir /mnt/virtual

[root@lyt abc]# cd /mnt/virtual/

[root@lyt virtual]# mkdir qqqq

[root@lyt virtual]# cd qqqq/

[root@lyt qqqq]# echo ";adfsf"&gt;index.html        #為建立的虛拟目錄編寫一個網頁檔案

[root@lyt qqqq]# vim /etc/httpd/conf/httpd.conf

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714233SlUc.png"></a>

[root@lyt qqqq]# service httpd restart

目錄浏覽進行下載下傳:

[root@lyt qqqq]# cd ..

[root@lyt virtual]# mkdir download      #建立目錄

[root@lyt virtual]# cd download/

[root@lyt download]# cp /etc/passwd ./       #拷貝檔案用于用戶端下載下傳

[root@lyt download]# cp /etc/fstab ./        #拷貝檔案用于用戶端下載下傳

[root@lyt download]# vim /etc/httpd/conf/httpd.conf

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_13497142345q0D.png"></a>

[root@lyt download]# service httpd restart

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714235vgiR.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/8/5493845_1349714235KSBC.png"></a>

(6stop)######################################################################################

本文轉自 liuyatao666 51CTO部落格,原文連結:http://blog.51cto.com/5503845/1018275,如需轉載請自行聯系原作者

繼續閱讀