1. 程式人生 > >Linux學習(第十週)

Linux學習(第十週)

第十週學習內容:HTTPD

第十週作業:

1、Centos7系統下實現httpd的安裝,並分別實現prefork、worker、event等幾種工作方式。

      http協議接受請求的模型可以分為單程序I/0模型,啟動一個程序處理一個使用者的請求,這意味著一次只能處理一個請求,多個請求將被序列響應,這種模型已基本被淘汰;多程序I/O模型,由父程序並行啟動多個子程序,每個子程序響應一個請求,對應於prefork;複用I/O模型,一個程序響應n個請求;多執行緒模型:一個程序生成多個執行緒,一個執行緒處理一個請求;事件驅動模型:一個程序基於不同的事件直接響應多個請求,對應於event;複用的多程序I/O模型,一個父程序生成m個子程序,每個子程序再生成n個執行緒,每個執行緒響應一個請求,併發響應數量為m*n,對應於worker。

      http協議的具體實現有httpd這款程式,其中有一大特點就是MPM多路處理模組,可以在多種工作模式下切換:prefork對應多程序I/O模型,為了提升效率,會預先生成幾個空閒程序,隨時等待使用者請求;worker對應複用多程序I/O模型,三級管理結構,父程序——子程序——執行緒,響應數量m*n;event對應事件驅動模型,比較新的一個工作模式。

      httpd基於base倉庫即能安裝,基礎包為httpd.x86_64,開發工具為httpd-devel.x86_64,測試工具為httpd-tools.x86_64,幫助手冊為httpd-manual.noarch。

      image.png

      httpd2.2和2.4有一大區別就是2.2只支援編譯時選擇使用哪種工作模式,而2.4是可以隨意更換的,只需在配置檔案中修改,再重啟服務就可以了。編輯/etc/httpd/conf.modules.d/00-mpm.conf配置檔案,預設是載入的prefork工作模式,想換成其他的只要在現在用的工作模式前加“#”表示註釋,再把想使用的工作模式前的“#”去掉就可以了。

      image.png

      配置檔案中除了對於使用哪個工作模式有配置外,還有對於此工作模式的相關配置,可以在主配置檔案中新增,也可以單獨列出放在/etc/httpd/conf.d目錄下。使用<IfModule 工作模式.c>。。。</IfModule>上下文將配置指令框起來,讓其在載入此工作模式時生效,主要會用到的指令有:startservers,建立多少個空閒子程序;minspareservers,最小空閒子程序;maxspareservers,最大空閒子程序;serverlimit或maxclients,最大子程序數也就是併發請求數量;maxrequestperchild,一個子程序最多處理多少個請求會自動消滅,0表示無限制。生產環境中一般使用prefork的較多。

      載入了prefork工作模式,在/etc/httpd/conf.d目錄下添加了一個單獨的配置檔案:

      image.png

      啟動httpd服務後,立刻檢視程序ps aux發現有一個子程序因為空閒被消滅了,最終剩下3個子程序:

      image.png

2、簡述request報文請求方法和狀態響應碼 。

      http協議的工作方式是很簡單的,一端請求,一端響應;一端發的是http request報文,一端回的是http response報文,這麼一次報文互動就被稱為一次http事務。在使用者一次請求中得到的叫web資源,有靜態資源,如.html、.jpg、.png等。這種資源無需伺服器端做出額外處理,直接傳送給使用者即可;有動態資源,如.php.jsp等。這種資源是要在伺服器上執行某程式並將執行結果傳送給使用者的。一個web頁面中的資源可能有多個,每個資源都需要單獨請求。

      一次完整的http事務伺服器端處理過程:(1)建立或處理連線:接收或拒絕請求;(2)接受請求:接收來自網路上的主機請求報文中對某特定資源的一次請求過程;(3)處理請求:對請求報文進行分析,獲取客戶端請求的資源及請求方法等相關資訊;(4)訪問資源:從本地磁碟上獲取請求報文中請求的資源;(5)構建響應報文:在資源外部加上響應報文首部;(6)傳送響應報文;(7)記錄日誌。而對於客戶端只要傳送請求報文,等待響應就可以了。

      request報文格式:起始行,<method><request-url><version>,中間部分<HEADERS>,載核部分<entity-body>這一部分對於請求報文大多數的方法來說一般為空。method(方法)共有6種,GET:獲取;PUT:上傳;DELETE:刪除;TRACE:追蹤獲取資源要經過哪些代理;OPTIONS:探測資源所支援的方法;HEAD:只要資源的首部資訊。response報文格式:起始行,<version><status><reason-phase>,中間部分<HEAFERS>,載核部分<entity-body>。status(響應碼)表示用預先報告的行為告訴客戶這次申請是成功還是失敗,常見的響應碼,200:成功;301:請求的URL所指向的資源已刪除,但在響應報文首部LOCATION欄位標出了這個永久轉移的位置;302與301類似,只是標出的是臨時轉移的位置;304:本地快取過期後向伺服器申請新資源,架設伺服器資源發生了改變則回覆200和新資源,如果未發生改變則會回覆304表示並未過期;401:認證質詢,讓使用者提供使用者名稱和密碼;403:認證失敗,請求被禁止;404:無法找到請求的資源,not found;500:伺服器內部錯誤;502:代理伺服器從後臺伺服器得不到響應。總結下來就是4開頭的是客戶端問題,5開頭的是伺服器端問題。

      image.png

3、詳細描述httpd虛擬主機、站點訪問控制、基於使用者的訪問控制、持久連結等應用配置例項。

      虛擬主機:一臺物理主機可服務於多個站點,用虛擬主機的方式方便管理且安全可靠。共有三種方法:多個IP地址,基於不同的IP地址區分;多個埠,基於不同的埠區分;多個主機名,基於不同的主機名區分。使用<virtualhost ip地址:埠>。。。</virtualhost>上下文將配置指令框起來,基於哪種方法區分,就在哪個上面標註出區別就行了。框內其他的定義與主配置沒有區別。

      image.png

      image.png

      站點訪問控制:httpd對於每一個被訪問的路徑都要做訪問控制,不同意的堅決不能訪問,所以配置指令最好是設在限制區域中,如:<directory 路徑>。。。</directory>表示對於指定路徑的訪問做出的限制;<file 檔案>。。。</file>表示對於指定檔案;<filematch 模式>。。。</filematch>對於匹配到的檔案;<location>。。。</location>對於指定URL等等。在限制區域內的配置指令一般有,require all granted表示允許所有主機訪問;require all denied表示拒絕所有的訪問,require ip X.X.X.X表示允許某臺ip地址為多少的主機訪問。對上面的虛擬主機進行配置,是www.xiaogou.com只允許某臺主機訪問,其他主機訪問則會跳轉到httpd的預設頁面。

      image.png

      對於10.0.0.8主機無影響:

      image.png

      對於其他主機:

      image.png

      基於使用者的訪問控制:在站點訪問控制中只涉及了基於IP地址和URL等的控制,很有可能被仿冒,但如果基於使用者名稱和密碼的話,安全效能會更上一個臺階,就可以使用基於使用者的訪問控制。開啟此方法後,請求資源的流程就變成使用者傳送請求,伺服器會返回認證質詢要求使用者提供使用者名稱和密碼,只有使用者提供了正確的使用者名稱和密碼後,伺服器才會傳送資源。此訪問控制的認證不依賴於本地的passwd或shadow,而是新建一個文字檔案,為了能生成一個加密的認證用文字檔案,httpd還提供了一個專用工具叫htpasswd。使用方法非常簡單,只需要htpasswd+[選項]+檔案+使用者名稱,回車後在鍵入密碼,自動就在指定位置生成了這麼個認證檔案,能用到的選項有-c:建立檔案;-m:使用md5加密;-b:批量新增使用者名稱和密碼;-S:使用sha加密;-d:刪除使用者。當檔案建立好,就可以在配置檔案中將認證指定為該檔案即可。

      image.png

      image.png

      image.png

      持久連線:使用者請求某一網頁,若其中包含了多個資源,基於每個資源都要建立TCP三次握手和四次斷開是件非常不效率的事情,開啟持久連線功能的話可以在只建立一次TCP連線的情況下獲取多個資源,當然也要設定超時時間和最多獲取資源去限制一下連線的時長,當這兩個條件中滿足任意一個,伺服器端將直接斷開連線。用法:keepalive on,開啟持久連線,預設是關閉的;keepalive timeout XX,定義持久連線超時時長,時間以秒為單位;maxkeepaliverequest XX,定義資源請求數量限制。

      image.png