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">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">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">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,如需轉載請自行聯系原作者