一次HTTP請求過程
1、建立連接:接收或拒絕連接請求
2、接收請求:接收客戶端請求報文中對某資源的一次請求的過程
Web訪問響應模型(Web I/O)
單進程I/O模型:啟動一個進程處理用戶請求,而且一次只處理一個,多個請求被串行響應
多進程I/O模型:并行啟動多個進程,每個進程響應一個連接請求
復用I/O結構:啟動一個進程,同時響應N個連接請求
實現方法:多線程模型和事件驅動
多線程模型:一個進程生成N個線程,每線程響應一個連接請求
事件驅動:一個進程處理N個請求
復用的多進程I/O模型:啟動M個進程,每個進程響應N個連接請求,同時接收M*N
3、處理請求:服務器對請求報文進行解析,并獲取請求的資源及請求方法等相關信息,根據方法,資源,首部和可選的主體部分對請求進行處理元數據:請求報文首部HEADERS格式name:value
示例:
Host: www.magedu.com 請求的主機名稱
Server: Apache/2.4.7
HTTP常用請求方式,Method
GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS
4、訪問資源:
服務器獲取請求報文中請求的資源web服務器,即存放了web資源的服務器,負責向請求者提供對方請求的靜態資源,或動態運行后生成的資源
資源放置于本地文件系統特定的路徑:DocRoot
DocRoot?/var/www/html
web服務器資源路徑映射方式:
docroot
alias
虛擬主機docroot
用戶家目錄docroot
5、構建響應報文:
一旦Web服務器識別除了資源,就執行請求方法中描述的動作,并返回響應報文。響應報文中包含有響應狀態碼、響應首部,如果生成了響應主體的話,還包括響應主體。
1)響應實體:如果事務處理產生了響應主體,就將內容放在響應報文中回送過去。響應報文中通常包括:
描述了響應主體MIME類型的Content-Type首部
描述了響應主體長度的Content-Length
實際報文的主體內容
2)URL重定向:web服務構建的響應并非客戶端請求的資源,而是資源另外一個訪問路徑。分為永久重定向和臨時重定向
3)MIME類型:
Web服務器要負責確定響應主體的MIME類型。有很多配置服務器的方法可以將MIME類型與資源管理起來
魔法分類:Apache web服務器可以掃描每個資源的內容,并將其與一個已知模式表(被稱為魔法文件)進行匹配,以決定每個文件的MIME類型。這樣做可能比較慢,但很方便,尤其是文件沒有標準擴展名的時候
顯式分類:可以對Web服務器進行配置,使其不考慮文件的擴展名或內容,強制特定文件或目錄內容擁有某個MIME類型
類型協商:有些Web服務器經過配置,可以以多種文檔格式來存儲資源。在這種情況下,可以配置Web服務器,使其可以通過與用戶的協商來決定使用哪種格式(及相關的MIME類型)”最好”
6、發送響應報文
Web服務器通過連接發送數據時也會面臨與接收數據一樣的問題。服務器可能有很多條到各個客戶端的連接,有些是空閑的,有些在向服務器發送數據,還有一些在向客戶端回送響應數據。服務器要記錄連接的狀態,還要特別注意對持久連接的處理。對非持久連接而言,服務器應該在發送了整條報文之后,關閉自己這一端的連接。對持久連接來說,連接可能仍保持打開狀態,在這種情況下,服務器要正確地計算Content-Length首部,不然客戶端就無法知道響應什么時候結束了
7、記錄日志
最后,當事務結束時,Web服務器會在日志文件中添加一個條目,來描述已執行的事務
CentOS 6環境:yum 方式安裝httpd-2.2
Httpd:
高度模塊化:core + modules
DSO: Dynamic Shared Object 動態加/卸載
MPM:multi-processing module多路處理模塊
MPM工作模式:
prefork:多進程I/O模型,每個進程響應一個請求,默認模型
一個主進程:生成和回收n個子進程,創建套接字,不響應請求
多個子進程:工作work進程,每個子進程處理一個請求;系統初始時,預先生成多個空閑進程,等待請求,最大不超過1024個
worker:復用的多進程I/O模型,多進程多線程,IIS使用此模型
一個主進程:生成m個子進程,每個子進程負責生個n個線程,每個線程響應一個請求,并發響應請求:m*n
event:事件驅動模型(worker模型的變種)
一個主進程:生成m個子進程,每個進程直接響應n個請求,并發響應請求:m*n,有專門的線程來管理這些keep-alive類型的線程,當有真實請求時,將請求傳遞給服務線程,執行完畢后,又允許釋放。這樣增強了高并發場景下的請求處理能力。
配置文件:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
檢查配置語法:httpd–t
service httpdconfigtest
服務腳本:/etc/rc.d/init.d/httpd
腳本配置文件:/etc/sysconfig/httpd
服務控制和啟動:
chkconfighttpdon|off
service {start|stop|restart|status|configtest|reload} httpd
站點網頁文檔根目錄:/var/www/html
模塊文件路徑:/etc/httpd/modules /usr/lib64/httpd/modules
主程序文件:
/usr/sbin/httpd
/usr/sbin/httpd.worker
/usr/sbin/httpd.event
主進程文件:/etc/httpd/run/httpd.pid
日志文件目錄:/var/log/httpd
常見配置:
1、ServerTokens Prod 隱藏服務器版本信息。
2、修改監聽的IP和Port
Listen [IP:]PORT
(1) 省略IP表示為0.0.0.0;
(2) Listen指令至少一個,可重復出現多次
Listen 80
Listen 8080
(3)修改監聽socket,重啟服務進程方可生效
3、持久連接
Persistent Connection:連接建立,每個資源獲取完成后不會斷開連接,而是繼續等待其它的請求完成,默認關閉持久連接
斷開條件:數量限制:100
時間限制:以秒為單位,httpd-2.4 支持毫秒級
副作用:對并發訪問量較大的服務器,持久連接功能會使用有些請求得不到響應
折衷:使用較短的持久連接時間
設置:KeepAliveOn|Off
KeepAliveTimeout15
MaxKeepAliveRequests100
4、定義Main server的文檔頁面路徑
DocumentRoot“/path”
文檔路徑映射:DocumentRoot指向的路徑為URL路徑的起始位置
5、站點訪問控制常見機制
可基于兩種機制指明對哪些資源進行何種訪問控制訪問控制機制有兩種:客戶端來源地址,用戶賬號
ag:
order deny,allow
deny from 172.16. 100.100
allow from 172.16
6、日志設定
日志類型:訪問日志 錯誤日志
定義日志格式:LogFormatformat strings
LogFormat”%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”” combined
?使用日志格式:
CustomLoglogs/access_logcombined
7、定義路徑別名
格式:Alias /URL/ “/PATH/”
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/87690