一、Apache 進程模式說明
在linux中,我們可以用httpd-l 查看安裝的模組是prefork模式還是worker模式
[root@LAMP ~]# /usl/local/apache/bin/apachectl -l |egrep "worker|prefoker"
worker.c
[root@LAMP ~]#
或
[root@LAMP ~]# /usr/local/apache/bin/apachectl l | /worker|prefork/p'
worker.c
[root@LAMP ~]#
prefork模式(預設)
prefork所使用的是多個行程只有一個行程,而每個行程子在某個確定的時間只能維持一個連結。
工作原理:
控制進程最初建立若干個子進程,為了不在請求到來時再產生子進程,所以要根據需求不斷的創建新的子進程,最大可以達到每秒32個知道滿足需求為止。
worker模式(預設)
worker模式是Apache2.x新引進的模式,是執行緒與進程的結合,在worker模式下會有多個子進程,每個子進程又會有多個執行緒。每個執行緒在某個確定時間只能維持一個連線。
運作原理:
由主控制進程產生若干個子進程,而每個子進程中又包含固定的執行緒數,各個執行緒獨立處理請求,同樣為了不在請求到來時再產生執行緒,在設定檔中設定了最小和最大空閒執行緒數及所有子程序的總執行緒,如果現有子程序中的總執行緒不能滿足並發負載,控制行程將派生新的子程序。
安裝方法:
在配置編譯的過程中,加入參數--with-mpm=worker,如果不加的話系統會採用預設的prefork模式
優點:記憶體佔用比prefork模式低,適合高且發高流量的HTTPD服務
缺點:假如一個執行緒崩潰,整個行程積極會連同其任何執行緒一起「死掉」。由於線程共享記憶體空間,所以一個程式在運行時必須被系統識別為「每個線程都是安全的」。服務穩定性不如prefork模式。
event模式:在非常繁忙的伺服器下,以上兩種伺服器有點吃不消,在worker基礎上,它把服務進程從連線中分離出來。在伺服器處理速度很快,同時具有非常高的點擊率時,可用的執行緒數量就是關鍵的資源限制,此時Event MPM方式是最有效的
1.prefork:
StartServersvers 5 #伺服器開始進程
MinSpareServers 5 #最小空閒進程
MaxSpareServers 10 #最大空閒進程
MaxClients 10 #最大空閒進程
MaxClients MaxRequestsPerChild 0 #進程處理的最大請求數,0沒有限制,可以設定大一點,不用回收
2.worker:
StartServers 150 #最大處理請求數
MinSpareThreads 25 #最小空閒執行緒數
MaxSpareThreads 75 #最大空閒執行緒數
ThreadsPerChild 75 #最大空閒執行緒數
ThreadsPerChild Child 0 #線程處理的最大請求數, 0無限制
worker模式下所能同時處理的請求總數是由子程序總數乘以Threadsperchild值決定的,應該大於等於maxclients。如果負載很大,現有的子進程數無法滿足時,控制進程會衍生新的子進程。
提示: 預設最大的子行程總數為16,如需加大時也需要明顯的申明serverlimit的值(最大值時20000)
查看Apache的worker下方並發連線數:
[root@LAMP ]# pstree -a|grep httpd|wc -l
84
[root@LAMP ~]#
3.event不研究了
二.測試解析
關鍵點:不研究了
二.測試解析
關鍵點:
l1 M 看是否載入libphp5.so2. httpd.conf 裡面是否寫對了AddType Application/x-httpd-php .php3. php程式碼格式要寫對4. selinux要關閉5. deny沒有改成allow 2.4 denied granted6. 沒有加host2. 設定第一個虛擬主機刪除httpd.conf中的這行前面的警號#Include conf/extra/http. confvim /usr/local/apache2/con5. 為某個虛擬主機設定使用者認證http://www.lishiming.net/thread-554-1-1.htmlf/extra/httpd-vhosts.conf 2、web防盜鏈技術🎜簡單的說,就是某些不法的網站,透過在其自身網站程式裡未經許可非法調用其他網站的資源,然後在自己的網站上顯示這些調用的資源,達到了填充自身網站顯示的效果,但浪費了呼叫資源網站的網路流量,造成其他網站的頻寬及服務壓力吃緊,甚至宕機。
網站被盜鏈的解決方案:
1、根據http referer實現防盜鏈
在HTTP協定中,有一個表頭欄位叫做referer,使用URL格式來表示從哪裡來的連結到目前網頁的資源,透過referer可以偵測到目標存取的來源網頁,如果是資源文件,可以追蹤到顯示它的網頁位址,一單偵測出來源不是本站進行封鎖或傳回指定頁面。 目前Apache,nginx,lighttpd三者都支援根據http referer實作防盜鏈
2、根據cookie處理
3、透過加密變換存取路徑實現防盜鏈lighttpd有類似的插件mod_secdownload
Apache web服務實作防盜鏈實戰
ServerAdmin ucode@gmail.com
DocumentRoot "/var/html/bbs"
表面com
ErrorLog "logs/bbs-error_log"
CustomLog "|/usr/local/sbin/cronolog /app/logs/access_bbs_%Y%m%d.log" combined RewriteCond % {HTTP_REFERER}!^http://ucode.blog.51cto.com/.*$ [NC]
RewriteCond %{HTTP_REFERER}!^http://ucode.blog.51cto.com/$ [NC]
RewriteCond %{HTTP_REFERER}!^http://ucode.blog.51cto.com/.*$ [NC]
RewriteCond %{HTTP_REFERER}!^http://ucode.blog.51cto.com$ [NC]
RewriteCond .*.(gif|jpg|swf)$ http://ucode.blog.51cto.com/img/nolink.jpg [ R,NC]
會回傳:http://ucode.blog.51cto.com/img/nolink.jpg圖片
Listen 80##預設監聽的連接埠是80
PidFile /export/servers/apache2/logs/httpd.pid
PidFile /export/servers/apache2/logs/httpd.pidPidFile LoadModule authn_file_module modules/mod_authn_file.so##載入的模組
User admin ##一般預設為admin
Group admin ##一般預設為admin
你的專案檔案路徑ServerAdmin you@example.com #當伺服器封包錯誤是,傳回客戶端,讓聯絡管理員ServerName localhost:80 ###S; .php 讓.php文字檔案格式也能運作php程式。 1Apache伺服器可以針對目錄進行文件的存取控制,然而存取控制可以透過兩種方式來實現,一個是在設定檔httpd.conf(或access.conf)中針對每個目錄進行設定
Timeout 300 ##客戶程式與伺服器連線的逾時間隔
KeepAlive On ###在一次連線中傳遞多個HTTP請求
MaxKeepAliveRequests 100 ###為一次連線可以進行的HTTP請求的最大請求次數
KeepAliveAliveAliveAliveAliveAliveAliveAlive測試一次連接中的多次請求傳輸之間的時間,如果伺服器已經完成了一次請求,但一直沒有接收到客戶程式的下一個請求,在間隔超過了這個參數設定的值之後,伺服器就斷開連接。
ErrorLog logs/error_log #日誌的保存位置
LogLevel warn ##幾種日誌等級 debug日誌界別,日誌就比較多
日誌的缺省格式有如下:
Logn % %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
LogFormat "%h %l %u %t "%r" %>s %b " common #common為日誌格式名稱
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
CustomLog logs/access_log common}i" agent
CustomLog logs/access_log commono格式中的個別參數如下:
%h –客戶端的ip位址或主機名稱
%l –The 這是由客戶端identd 判斷的RFC 1413身份,輸出中的符號"-" 表示此處資訊無效。
%u –由HTTP認證系統所得到的造訪該網頁的客戶名稱。有認證時才有效,輸出中的符號 "-" 表示此處資訊無效。
%t –伺服器完成對請求的處理時的時間。
"%r" –引號中是客戶發出的包含了許多有用資訊的請求內容。
%>s –這個是伺服器回傳給客戶端的狀態碼。
%b –最後這項是回傳給客戶端的不包含回應頭的位元組數。
"%{Referer}i" –此項指明了該請求是從被哪個網頁提交過來的。
"%{User-Agent}i" –此項是客戶瀏覽器提供的瀏覽器識別資訊