http协议及httpd配置
一、HTTP
http協(xié)議全稱為超文本傳輸協(xié)議(hyper text transfer protocol),是一種應(yīng)用層協(xié)議,監(jiān)聽在80/tcp。所謂超文本就是使用html編程語言開發(fā)的純文本文件
1. 超文本標(biāo)記語言
超文本標(biāo)記語言(hyper text mark language)就是用來開發(fā)超文本文檔的, 通過一些標(biāo)簽對文本進(jìn)行修飾,客戶端的瀏覽器引擎負(fù)責(zé)解析這些標(biāo)簽,將結(jié)果顯示在瀏覽器上
<html><head><title> TITLE</title></head><body><h1></h1><p> lianjie... <a href="https://www.busyops.com"> lianjie... </a></p><h2></h2></body> </html>2. HTTP協(xié)議版本
- HTTP/0.9:最原型版本,有很多的嚴(yán)重的設(shè)計(jì)缺陷,僅能夠?qū)崿F(xiàn)簡單的資源交互,不支持多媒體內(nèi)容,所以由于過于簡陋,很快就被HTTP/1.0版本取代
- HTTP/1.0:這是第一個(gè)被真正廣泛使用的版本,支持版本號、各種HTTP首部、HTTP請求的方法以及引入MIME,但仍然有很多問題,比如緩存機(jī)制設(shè)計(jì)的比較薄弱
- HTTP/1.1:增強(qiáng)了緩存功能,引入了長鏈接機(jī)制
- spdy:google為能夠加速http協(xié)議的資源獲取性能而專門設(shè)計(jì)的
- HTTP/2.0:2.0借鑒了spdy的優(yōu)勢,對1.1進(jìn)行了諸多改進(jìn),使得性能上有很大提升,所以google已經(jīng)放棄對spdy的支持了
3. http事務(wù)
http的工作模式就是客戶端發(fā)送一次請求、服務(wù)端回應(yīng)一次響應(yīng),而一次請求和響應(yīng)過程就叫做http事務(wù)
4. MIME機(jī)制(Multipurpose Internet Mail Extesion)
http是一種文本協(xié)議,意思是只能傳輸文本,任何要發(fā)送的內(nèi)容通通會編碼為艾斯克碼再進(jìn)行發(fā)送,但是圖片是二進(jìn)制格式的,強(qiáng)行將二進(jìn)制編碼為文本對方收到會亂碼的,在早些時(shí)候http協(xié)議僅能夠?qū)崿F(xiàn)超文本瀏覽,沒有任何圖片內(nèi)容。后來http協(xié)議當(dāng)中引入了mime機(jī)制之后才能支持多媒體瀏覽的。mime早期是為了smtp協(xié)議而設(shè)計(jì)的,smtp是一種古老的郵件協(xié)議,早期的時(shí)候也是只能傳輸文本的,但后來人們需要發(fā)送附件、發(fā)一些非文本文件,mime就可以將非文本數(shù)據(jù)編碼成文本,而后對方還能同樣的反向機(jī)制還原回來
Web服務(wù)器構(gòu)建響應(yīng)報(bào)文時(shí),會基于MIME機(jī)制對內(nèi)容進(jìn)行分類,以實(shí)現(xiàn)構(gòu)建響應(yīng)報(bào)文時(shí)能夠明確標(biāo)記資源內(nèi)容類型
- 顯示指定:自己提前在服務(wù)器上將資源類型定義完成
- 魔法分類:服務(wù)器自行掃描內(nèi)容并判斷類型
- 協(xié)商分類:服務(wù)器端和客戶端協(xié)商哪種類型最好,然后在決定發(fā)送哪個(gè)
媒體類型:每一種資源都有媒體類型,主要被MIME標(biāo)記以后由MIME對它們分別使用不同的編碼方式對它們進(jìn)行編碼,媒體類型標(biāo)記決定了客戶端瀏覽器在訪問此資源是應(yīng)該由哪個(gè)Web插件進(jìn)行解析
格式:主類型/次類型 major/minor
5. cookie
http協(xié)議是無狀態(tài)的(stateless),服務(wù)器無法持續(xù)追蹤用戶來源,通過引用cookie機(jī)制解決,客戶端第一次訪問服務(wù)器時(shí),服務(wù)器會發(fā)送cookie給客戶端,能唯一標(biāo)識用戶信息,每個(gè)cookie都有作用范圍
- 胖cookie:將用戶的訪問記錄都存儲在用戶本地,這種容易被其他第三方的殺毒軟件竊取信息
- session:用戶的訪問記錄都存儲在遠(yuǎn)端的服務(wù)器上
6. http請求首部和響應(yīng)報(bào)文語法格式
請求報(bào)文和響應(yīng)報(bào)文都有固定的格式,其第一行都稱為協(xié)議報(bào)文起始行。接著會跟上很多的<headers>,然后接兩個(gè)換行和<entity-body>部分,請求報(bào)文中如果沒用使用put或post方法,<entity-body>中的內(nèi)容一般都是空的。
(1) 請求報(bào)文首部格式
<method> <request-URL> <version> <headers>兩次換行 <entity-body>① method
method叫做請求方法,標(biāo)明客戶端希望服務(wù)器對資源執(zhí)行的動作,就是客戶端告訴服務(wù)器端你應(yīng)該做什么
- GET:從服務(wù)器獲取一個(gè)資源
- PUT:上傳,將請求的主體部分存儲在服務(wù)器端而不是被服務(wù)器處理,所以PUT方法中<entity-body>當(dāng)中一定是包含內(nèi)容的,此方法對服務(wù)器比較危險(xiǎn)。要使用PUT方法需要服務(wù)器端開啟分布式版本協(xié)作功能(DAV)機(jī)制,但一般不會有人互聯(lián)網(wǎng)中公開的
- MOVE:請求服務(wù)器將指定頁面移至另一個(gè)網(wǎng)絡(luò)
- DELETE:刪除服務(wù)器上指定的文檔,此方法對服務(wù)器很危險(xiǎn)
- TRACE:web服務(wù)器是可以被代理的,想知道一次資源請求到底經(jīng)過了多少級代理,就可以使用這個(gè)方法
- HEAD:只從服務(wù)器獲取文檔的響應(yīng)首部,意為著每一次服務(wù)器端在發(fā)響應(yīng)內(nèi)容給客戶端時(shí),不發(fā)送數(shù)據(jù)內(nèi)容,只發(fā)送http響應(yīng)首部,包含 <request-URL>、<version>、<headers>
- POST:向服務(wù)器發(fā)送要處理的數(shù)據(jù)。服務(wù)器端通常是有一個(gè)表單提供給我們,我們填入些數(shù)據(jù)點(diǎn)提交,這些提交的數(shù)據(jù)都會放在請求報(bào)文的<entity-body>當(dāng)中提交給服務(wù)器端,所以在使用POST方法時(shí)<entity-body>是有數(shù)據(jù)的,有時(shí)候注冊賬號、上傳賬號和密碼用到最多的就是post方法
- OPTIONS:可以請求服務(wù)器返回其指定資源支持的請求方法。比如很多服務(wù)器對某些資源允許HEAD、GET,但是不允許DELETE和PUT,這個(gè)時(shí)候如果知道一個(gè)資源支持哪些方法,就可以用options
② request-URL
請求的URL
③ version
使用的http協(xié)議版本,格式為HTTP/<major>.<minor>
④ headers
各種類型的headers
(2) 響應(yīng)首部語法格式
<version> <status> <reason-phrase> <headers>兩次換行 <entity-body>---------------------------------- <version>:響應(yīng)時(shí)使用的協(xié)議版本號 <reason-phrase>:原因短語,用來說明狀態(tài)碼簡要描述 <entity-body>:響應(yīng)實(shí)體status
狀態(tài)碼,三位數(shù)字,就是服務(wù)器端告訴客戶端,你的請求發(fā)生了什么
- 1xx:目前正在使用的只有100和101兩種,這類狀態(tài)碼主要做額外信息提示的,沒有太多額外的意義
- 2xx:200-206,主要用來表示成功類的響應(yīng)
- 200:成功,請求的所有數(shù)據(jù)通過響應(yīng)報(bào)文的entity-body部分發(fā)送給你了,對應(yīng)的原因短語為OK
- 201:上傳文件成功后顯示,對應(yīng)的原因短語為CREATED
- 3xx:300-305,重定向類的狀態(tài)碼。本來請求的是某一資源,但是服務(wù)器端沒有把那個(gè)資源響應(yīng)給你,而是給你重定向到別的位置
- 301:永久重定向,請求的URL資源已經(jīng)被刪除,但服務(wù)器端會在響應(yīng)報(bào)文中通過首部Location指明資源現(xiàn)在所處的新位置,下次客戶端請求這個(gè)資源時(shí)直接向新訪問即可。對應(yīng)的原因短語為Moved Permanently(永久)
- 302:臨時(shí)重定向,與301相似,也會在響應(yīng)報(bào)文中通過Location首部指明資源現(xiàn)在所處的臨時(shí)新位置,不過將來還有可能在回來,下次客戶端請求這個(gè)資源時(shí)依然會向老位置詢問。對應(yīng)的原因短語為Found
- 304:表示客戶端發(fā)出了條件式請求,也就是說客戶端請求資源時(shí)會問服務(wù)端這個(gè)資源在上次我請求過以后有沒有發(fā)生改變,如果發(fā)生了變化,服務(wù)器就會告訴客戶端發(fā)生變化了,并發(fā)送新資源給客戶端。如果未變化,服務(wù)器端會告訴客戶端,資源沒變化,你直接使用你緩存的資源就可以了,對應(yīng)的原因短語為Not Modified
- 4xx:400-415,表示客戶端類錯(cuò)誤
- 401:表示需要輸入賬號和密碼,當(dāng)客戶端請求需要認(rèn)證的資源時(shí),服務(wù)器端要求客戶端輸入賬號和密碼才能訪問,所以先返回個(gè)錯(cuò)誤給客戶端。對應(yīng)的原因短語為Unauthorized
- 403:請求被禁止,比如服務(wù)端禁止某個(gè)IP訪問。對應(yīng)的原因短語為Forbidden
- 404:資源請求失敗,無法找到客戶端請求的資源。對應(yīng)的原因短語為Not Found
- 405:你使用的方法不被允許、不支持,對應(yīng)的原因短語為Method Not Allowed
- 5xx:500-505,表示服務(wù)器端的錯(cuò)誤,比如你請求的資源服務(wù)器應(yīng)該響應(yīng)給你的,但是服務(wù)器資源因?yàn)樽约簝?nèi)部有語法錯(cuò)誤運(yùn)行不成功,這就沒法響應(yīng)了
- 500:服務(wù)器內(nèi)部錯(cuò)誤,對應(yīng)的原因短語為Internal(內(nèi)部的) server Error
- 502:代理服務(wù)器從上游服務(wù)器收到一條偽響應(yīng),不是真正的響應(yīng),是錯(cuò)誤的響應(yīng),對應(yīng)的原因短語為Bad Gateway
- 503:服務(wù)暫時(shí)不可用,對應(yīng)的原因短語為Service Unavailable
7. headers
用來標(biāo)記請求或響應(yīng)的屬性,每個(gè)請求或響應(yīng)報(bào)文可使用任意個(gè)header。通用格式為header名稱后面跟一個(gè)冒號,而后在跟上一個(gè)可選空格,(有沒有都行,但大多數(shù)都在,所以就成了標(biāo)準(zhǔn)語法)接著是一個(gè)值
(1) headers示例
請求header示例
Accept: text/html,application/xhtml+xml, Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 Cache-Control: max-age=0 Connection: keep-alive Host: www.bilibili.com Referer: https://www.bilibili.com/ Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64)響應(yīng)header示例
Access-Control-Allow-Credentials: true Access-Control-Allow-Headers: Origin, Access-Control-Allow-Origin: https://www.bilibili.com Connection: keep-alive Content-Encoding: gzip Content-Type: application/json;charset=UTF-8 Date: Thu, 22 Nov 2018 13:19:22 GMT Server: Apache-Coyote/1.1 Transfer-Encoding: chunked X-Cache: BYPASS from ks-bj6-webcdn-11.hdslb.com(2) headers分類
① 通用首部
請求與響應(yīng)報(bào)文都可用的首部
- Date:報(bào)文的創(chuàng)建時(shí)間
- Connection:通常表示這次鏈接是長鏈接或是短連接,常見的值如keep-alive、close
- Via:經(jīng)由。顯示報(bào)文經(jīng)過的中間節(jié)點(diǎn)(代理服務(wù)器),這些信息是由服務(wù)器管理員或網(wǎng)站程序員定義的,可以設(shè)置不顯示
- Cache-Control:控制緩存的生效機(jī)制,這是http1.1才有的功能
- Pragma:偶爾在HTTP\1.1中還會出現(xiàn),是為了兼容HTTP\1.0的,也是跟緩存相關(guān)
② 請求首部
- Accept:客戶端通知服務(wù)器自己能夠接收的媒體類型(MIME類型)
- Accept-Charset:客戶端通知服務(wù)器自己能夠接收的字符集類型
- Accept-Encoding:編碼格式,客戶端通知服務(wù)器端自己能接收哪些壓縮機(jī)制,如gzip、deflate、sdch
- Accept-Language:客戶端通知服務(wù)器端自己能接收哪些語言編碼的頁面
- Host:請求的服務(wù)器名稱和端口,大多數(shù)端口都省略了
- Referer:包含了當(dāng)前正在請求資源的上一級資源
- User-Agent:客戶端代理,說白了就是瀏覽器類型,現(xiàn)在的瀏覽器向服務(wù)器發(fā)請求一般都會附帶自己的瀏覽器類型,因此服務(wù)器就是因此來給你返回特定站點(diǎn)
- Client-IP
安全請求首部
- Authorization:向服務(wù)器發(fā)送認(rèn)證信息,如賬號密碼
- Cookie:客戶端向服務(wù)器端發(fā)送身份標(biāo)識
- Cookie2:版本2
條件式請求首部
- Expect:表示客戶端期望服務(wù)器發(fā)什么樣的信息
- If-Modified-Since:自從指定時(shí)間后資源有沒有修改過
- If-Unmodified-Since:自從指定時(shí)間后資源是否沒修改過
- If-None-Match:本地緩存中存儲文檔的Etag標(biāo)簽是否與服務(wù)器端文檔的Etag不匹配,Etag是擴(kuò)展標(biāo)簽
- If-Match:本地緩存中存儲文檔的Etag標(biāo)簽是否與服務(wù)器端文檔的Etag匹配
③ 代理請求首部
- Proxy-Authorization:與代理服務(wù)器進(jìn)行認(rèn)證是用到的首部
④ 響應(yīng)首部
信息性響應(yīng)首部
- Age:響應(yīng)持續(xù)時(shí)長,指這個(gè)資源有限期限
- Server:指服務(wù)器程序的版本號或者是服務(wù)器程序名稱
協(xié)商性響應(yīng)首部
某資源有多種表示方法時(shí)使用
- Accept-Ranges:服務(wù)器端通知客戶端可自己接受的請求類型
- Vary:首部列表,服務(wù)器會根據(jù)此列表挑選最適合的版本發(fā)給客戶端
安全響應(yīng)首部
- Set-Cookie:向客戶端設(shè)置Cookie
- Set-Cookie2:向客戶端設(shè)置Cookie2
- WWW-Authenticate:來自服務(wù)器對客戶端的質(zhì)詢認(rèn)證表單
⑤ 實(shí)體首部
用來標(biāo)示實(shí)體自己的相關(guān)信息的,很多時(shí)候用來表示報(bào)文中內(nèi)容的相關(guān)屬性
跟內(nèi)容格式相關(guān)
- Allow:列出對此實(shí)體可使用的請求方法,使用options時(shí)通常有這個(gè)響應(yīng)
- Location:告知客戶端真正實(shí)體位于何處,這是在重定向時(shí)使用的
- Content-Encoding:內(nèi)容的編碼格式
- Content-Language:內(nèi)容使用的語言
- Content-Length:內(nèi)容的長度
- Content-Location:實(shí)體真正的所處位置
- Content-Range:在整個(gè)資源中此實(shí)體表示的字節(jié)范圍
- Content-Type:實(shí)體的對象類型
跟緩存相關(guān)
- Etag:資源的擴(kuò)展標(biāo)簽。基于標(biāo)簽做條件請求時(shí)會使用,在網(wǎng)絡(luò)上圖片不會經(jīng)常改動,當(dāng)客戶端第一次請求資源時(shí),服務(wù)器在返回狀態(tài)碼200的同時(shí)還會返回該圖片的簽名Etag(可以理解為圖片的指紋)。接著客戶端再次訪問該圖片時(shí),就會去服務(wù)器校驗(yàn)指紋信息, 如果圖片沒有變化則直接使用緩存里的圖片,從而減輕了服務(wù)器的負(fù)擔(dān)。也就是說二次訪問返回狀態(tài)碼為304,瀏覽器就會從本地緩存里面取圖片,節(jié)省了圖片在網(wǎng)絡(luò)上傳輸?shù)臅r(shí)間
- Expires:內(nèi)容過期時(shí)間
- Last-Modified:最后一次修改時(shí)間
8. Web資源
請求和響應(yīng)中的內(nèi)容叫web資源(Web resource),這種資源有兩種類型,我們現(xiàn)在看到的網(wǎng)頁都是通過多個(gè)資源組成的,每個(gè)資源都需要單獨(dú)請求
- 常見的靜態(tài)資源:.jpg .gif htm txt .js .css .mp3,靜態(tài)資源是服務(wù)端無需額處理,客戶端請求時(shí)就直接發(fā)送給客戶端就可以了
- 常見的動態(tài)資源:.php .jsp,服務(wù)端需要執(zhí)行程序作出處理,將處理結(jié)果發(fā)送至客戶端
web資源能支持這么多種類型,就是因?yàn)閔ttp協(xié)議中引入了mime機(jī)制
9. URL
統(tǒng)一資源定位符(Uniform Resource Locator),在請求或響應(yīng)web資源時(shí)需要明確指出請求資源的位置,而url就是用來描述服務(wù)器某特定資源的位置
基本語法:<scheme>://<user>:<passwd>@<host>:<Port>/<Path>;<params>?<query>#<frag>
10. http的請求過程
- 第一步:建立連接。服務(wù)器端要判斷是否接受客戶端請求,如果要接受請求則建立鏈接
- 第二步:接受請求。接收來自于網(wǎng)絡(luò)上某主機(jī)請求報(bào)文中對某資源的一次請求
- 第三步:處理請求。服務(wù)器端對請求報(bào)文進(jìn)行解析,從而并獲知客戶端請求的資源及請求方法等相關(guān)信息
- 第四步:獲取資源。服務(wù)器端根據(jù)客戶端所請求的資源,向本地磁盤發(fā)起I/O請求從而獲取資源
- 第五步:構(gòu)建響應(yīng)報(bào)文。一旦服務(wù)器端拿到了資源,就開始構(gòu)建響應(yīng)報(bào)文并以此響應(yīng)客戶端請求,所謂構(gòu)建響應(yīng)報(bào)文就是在這個(gè)資源的外部加上響應(yīng)報(bào)文的首部
- 第六步:發(fā)送響應(yīng)報(bào)文
- 第七步:記錄日志
11. 并發(fā)訪問響應(yīng)模型(Web I/O)
服務(wù)器同時(shí)響應(yīng)多個(gè)用戶請求的方式
- 單進(jìn)程I/O結(jié)構(gòu):啟動一個(gè)進(jìn)程處理用戶請求,而且一次只處理一個(gè),多個(gè)請求被串行響應(yīng)
- 多進(jìn)程I/O結(jié)構(gòu):兩級進(jìn)程結(jié)構(gòu),主控進(jìn)程負(fù)責(zé)接收用戶請求,而后把請求分發(fā)給子進(jìn)程,每個(gè)子進(jìn)程響應(yīng)一個(gè)請求
- 復(fù)用I/O結(jié)構(gòu):一個(gè)進(jìn)程響應(yīng)N個(gè)請求,有兩種機(jī)制
- 多線程模型:一個(gè)進(jìn)程生成N個(gè)線程,每個(gè)線程響應(yīng)一個(gè)用戶請求,但是此種方式線程內(nèi)存空間都是共享的,可能會出現(xiàn)堵塞的情況
- 事件驅(qū)動(event-driven):一個(gè)進(jìn)程可以響應(yīng)多個(gè)請求,內(nèi)部沒有線程,通過事件回調(diào)機(jī)制完成
- 復(fù)用的多進(jìn)程I/O結(jié)構(gòu):啟動多個(gè)進(jìn)程,每個(gè)進(jìn)程響應(yīng)N個(gè)請求
二、http服務(wù)器程序
http是一個(gè)協(xié)議,而協(xié)議必須有實(shí)現(xiàn)方式,web服務(wù)器程序就是http協(xié)議的實(shí)現(xiàn)
1. 常見的靜態(tài)web服務(wù)器程序
- httpd:apache,a patchy server后來叫apache
- nginx
- lighttpd:德國人研發(fā)的Web服務(wù)器,性能與nginx不相上下的Web服務(wù)器
2. 應(yīng)用程序服務(wù)器
不單能服務(wù)靜態(tài)內(nèi)容,又能解析動態(tài)內(nèi)容
(1) 輕量級
- IIS:解析asp
- tomcat:著名的jsp容器
- jetty:在google當(dāng)中被廣泛使用的輕量級jsp容器
- jboss:早期時(shí)候被紅帽購買的第三方組織,提供專業(yè)級jsp服務(wù)器解決方案的應(yīng)用程序,是二次封裝的tomcat
(2) 重量級
- webshpere:IBM公司的重量級jsp容器,通常在企業(yè)級部署時(shí)使用
- weblogic:早期是小公司研發(fā)的,后來被BEA公司收購,對它做了大規(guī)模的改進(jìn),使得weblogic也占據(jù)了大量的市場
- oc4j:Oracle公司開發(fā),后來Oracle收購了BEA,于是就專注weblogic的維護(hù)了
互聯(lián)網(wǎng)上有一個(gè)著名的數(shù)據(jù)挖掘站點(diǎn),它會統(tǒng)計(jì)過去一段時(shí)間內(nèi)web站點(diǎn)使用的web服務(wù)器的程序比例。網(wǎng)址為www.netcraft.com
3. 網(wǎng)站衡量指標(biāo)
- PV:page view,用戶完成一次完整的頁面訪問叫一個(gè)pv,注意PV和一次資源請求是不一樣的
- UV:user view,統(tǒng)計(jì)有多少個(gè)用戶訪問
- IP:獨(dú)立的瀏覽量,這個(gè)數(shù)一定會小于uv的
計(jì)算網(wǎng)站帶寬:假如一個(gè)資源的大小為5K、用戶并發(fā)量為1000,那么服務(wù)器帶寬至少應(yīng)該準(zhǔn)備5M
三、httpd的簡介
httpd也稱為apache,據(jù)說是由美國的一個(gè)組織開發(fā)的最初版本。這個(gè)組織曾經(jīng)為了開發(fā)一個(gè)完整的web服務(wù)器軟件,從而召集了很多優(yōu)秀的工程師,當(dāng)開發(fā)成功后這個(gè)項(xiàng)目組就解散了。而開發(fā)人員就散布于各大互聯(lián)網(wǎng)公司,但是這些工程師對此前研發(fā)的這個(gè)程序仍然懷有一份感情,不舍得這個(gè)軟件沒落了。于是他們就各自通過互聯(lián)網(wǎng)進(jìn)行協(xié)作,通過打補(bǔ)丁的方式維護(hù)這個(gè)web服務(wù)器。后來,這個(gè)服務(wù)器程序就被戲謔的稱為a patchy server(一個(gè)充滿了補(bǔ)丁的服務(wù)器),在后來就被簡寫成了apache。現(xiàn)在httpd是由apache這個(gè)組織負(fù)責(zé)維護(hù)的,其成立后的兩年內(nèi)就讓httpd程序占據(jù)了60%的市場份額。隨著組織的影響力越來越大,于是就成立了軟件基金會(ASF),專門扶持更多的開源項(xiàng)目
1. httpd的特性
- 高度模塊化設(shè)計(jì):是由core加各種modules組成
- DSO:動態(tài)共享對象(Dynamic Shared Object),支持模塊的動態(tài)裝載
- MPM:多路處理模塊,實(shí)現(xiàn)多種不同的I/O訪問模型。prefork、worker、event
- CGI:一種動態(tài)網(wǎng)站技術(shù)的接口
- 支持虛擬主機(jī):一臺物理服務(wù)器可以服務(wù)多個(gè)網(wǎng)站
- 支持主機(jī)反向代理:將用戶的訪問發(fā)送至后端的主機(jī)
- 支持負(fù)載均衡
- 支持路徑別名
- 豐富的用戶認(rèn)證機(jī)制
- 支持第三方模塊
2. MPM
MPM叫做多路處理模塊,它是httpd上實(shí)現(xiàn)并發(fā)訪問模型的幾種機(jī)制
- prefork:父進(jìn)程負(fù)責(zé)管理子進(jìn)程,每個(gè)進(jìn)程響應(yīng)一個(gè)請求,即便沒有用戶請求時(shí),也會生成多個(gè)空閑進(jìn)程,隨時(shí)等待請求到達(dá)
- worker:父進(jìn)程管理子進(jìn)程,子進(jìn)程通過線程響應(yīng)用戶請求,每個(gè)線程響應(yīng)一個(gè)請求
- event:事件驅(qū)動模型,父進(jìn)程管理子進(jìn)程,子進(jìn)程通過事件驅(qū)動機(jī)制直接響應(yīng)多個(gè)請求
3. httpd 相關(guān)的安裝包
- httpd:主程序包
- httpd-devel:對httpd做二次開發(fā)時(shí)用到的包
- httpd-manual:httpd的手冊
- httpd-toosl:httpd相關(guān)的測試工具
- mod_ssl:httpd開啟ssl需要的包
4. rpm方式安裝httpd配置文件路徑
(1) rpm安裝
直接使用yum install httpd -y即可,分析依賴關(guān)系時(shí)會自動將httpd-tools也安裝上。如果將來可能無法訪問互聯(lián)網(wǎng),也可以將httpd-manual(手冊包)一并安裝
(2) 配置文件路徑
① httpd 2.2
httpd2.2中,主程序有三個(gè)用于啟用不同的MPM,需要哪個(gè)就啟動哪個(gè)。如果是編譯安裝的話,必須將三個(gè)都編譯才行
- /etc/httpd/conf/httpd.conf:主配置文件
- /etc/httpd/conf.d/*.conf:為httpd.conf提供額外配置片段
- /etc/rc.d/init.d/httpd:服務(wù)腳本文件
- /usr/sbin/httpd:主程序文件
- /usr/sbin/httpd.worker:主程序文件
- /usr/sbin/httpd.event:主程序文件
- /usr/sbin/apachectl:輔助的程序腳本
- /usr/lib64/httpd/modules/mod_*.so:模塊文件路徑
- /var/www/html:默認(rèn)網(wǎng)頁存放路徑
- /var/log/httpd/:日志文件目錄
② httpd 2.4
- /etc/httpd/conf:配置文件目錄
- /etc/httpd/conf/httpd.conf:主配置文件
- etc/httpd/conf.d/*.conf:為httpd.conf提供額外配置片段
- /etc/httpd/conf.modules.d/*.conf:專門配置模塊工作特性的配置文件,httpd2.2沒有這個(gè)目錄
- /usr/sbin/httpd:主程序文件
- /usr/sbin/apachectl:輔助的程序腳本
- /usr/lib/systemd/system/httpd.service:systemd unit文件
- /usr/lib64/httpd/modules/mod_*.so:模塊文件路徑
- /var/www/html:默認(rèn)網(wǎng)頁存放路徑
- /var/log/httpd/:日志文件目錄
5. 編譯安裝httpd
httpd依賴于arp、apr-util、apr-icon,apr就是apache portable runtime,意為apache運(yùn)行環(huán)境,類似apache虛擬機(jī),因?yàn)閍pache是一個(gè)跨平臺工具,不同的操作系統(tǒng)互相調(diào)用接口不相同,2.4需要1.4以上版本的apr
(1) 安裝apr
./configure --prefix=/usr/local/apr make && make install ./configure --prefix=/usr/local/arp-util --with=/usr/local/apr make && make install.apr安裝完畢后,需要安裝開發(fā)環(huán)境pcre-devel(2) 編譯安裝httpd
./configure --prefix=/usr/local/apache --sysconf=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most –enable -mpms-shared=all --with-mpm=prefork
四、配置httpd配置
在httpd 2.2中將配置文件邏輯分為三段全局環(huán)境段(Global Environment)、主服務(wù)器配置段(Main server configuration)、虛擬主機(jī)配置段(Virtual Hosts),但是在httpd 2.4中配置分段的概念已經(jīng)弱化了。不過二者配置格式是一致的,都需要使用指令后跟一個(gè)值配置,指令不區(qū)分大小寫,但是值要是定義路徑時(shí),大小寫取決于文件系統(tǒng)
1. 監(jiān)聽端口
文件為:/etc/httpd/conf/httpd.conf
Listen:格式為Listen [IP:]Port [protocol],省略ip表示監(jiān)聽所有地址,而后面的協(xié)議用來規(guī)定此Linten的端口只能通過哪種協(xié)議訪問,常用于SSL,比如Listen 8443 https。如果修改了監(jiān)聽端口需要重啟才能生效,但是如果添加了監(jiān)聽端口重載下配置即可。Listen可以應(yīng)用多次
2. 長連接
文件為:/etc/httpd/conf/httpd.conf
KeepAlive on|off:持久連接(Persistent Connection),http協(xié)議是基于tcp實(shí)現(xiàn)的,每一次的http事務(wù)都會三次握手、四次斷開,嚴(yán)重浪費(fèi)帶寬資源。那么就可以啟用長連接機(jī)制,讓客戶端僅需建立一次連接,請求完畢后再斷開。但是為了更好的保證資源不被浪費(fèi),長連接從兩個(gè)維度進(jìn)行了限制,一是請求資源限制,二是超時(shí)時(shí)長限制,當(dāng)二者中有一個(gè)達(dá)到閾值時(shí)就自動斷開連接,下一次http事務(wù)需要重新進(jìn)行三次握手、四次斷開。對并發(fā)訪問量較大的服務(wù)器,持久連接功能會導(dǎo)致有些請求的得不到響應(yīng)
- MaxkeepAliverequests #:數(shù)量限制,獲取規(guī)定的資源數(shù)后就斷開連接,默認(rèn)是100個(gè)
- KeepAliveTimeout #[ms]:持久連接時(shí)間限制,httpd 2.4支持毫秒級持久時(shí)間,使用毫秒級別需要在后面加上ms
3. MPM更換
確認(rèn)當(dāng)前運(yùn)行的是哪個(gè)模塊使用命令ps aux | grep httpd
(1) httpd 2.2
對于rpm安裝的httpd 2.2來講,為了支持不同MPM機(jī)制,其提供了三個(gè)二進(jìn)制文件,分別為/usr/sbin/httpd、/usr/sbin/httpd.worker、/usr/sbin/httpd.event,編輯vim/etc/sysconfig/httpd,修改里面HTTPD=對應(yīng)的值即可
(2) httpd 2.4
編輯配置文件/etc/httpd/conf.modules.d/00-mpm.conf,在其中將想要啟動的mpm注釋信息去掉即可,也就是LoadModule關(guān)鍵字對應(yīng)的值
4. prefork工作特性配置
文件為:/etc/httpd/conf/httpd.conf
- startservers:服務(wù)啟動后立即創(chuàng)建多少個(gè)子服務(wù)進(jìn)程,每個(gè)子進(jìn)程響應(yīng)一個(gè)請求
- minspareservers:最少空閑子進(jìn)程數(shù)
- maxspareservers:最大空閑子進(jìn)程數(shù)
- serverlimit:對maxclients做限定,在服務(wù)進(jìn)程生命周期內(nèi),允許啟動的進(jìn)程最大值
- maxclients:最大允許啟動的子進(jìn)程數(shù)量
- maxrequestperchild:一個(gè)進(jìn)程最多能響應(yīng)多少次請求,達(dá)到閾值后自動關(guān)閉這個(gè)子進(jìn)程,定義為0表示永不過期
5. worker工作特性配置
文件為:/etc/httpd/conf/httpd.conf
- startservers:服務(wù)啟動后立即創(chuàng)建多少個(gè)子進(jìn)程
- minsparethreads:最少空閑線程
- maxsparethreads:最大空閑線程
- threadsperchild:每個(gè)進(jìn)程最大啟動的線程數(shù)
- maxclients:最大并發(fā)請求數(shù)
- maxrequestperchild:每個(gè)線程響應(yīng)的最大請求次數(shù),0表示不做限制
6. event工作特性配置
7. DSO機(jī)制
使用命令httpd -M查看模塊時(shí),后面顯示為shared類型的模塊都是可以LoadModule關(guān)鍵字動態(tài)裝卸載的。指定模塊路徑可使用相對地址路徑,相對于主配文件ServerRoot關(guān)鍵字指向的路徑,默認(rèn)路徑為/etc/httpd/modules,這個(gè)路徑是個(gè)鏈接,指向了/usr/lib64/httpd/modules,如果需要添加第三方模塊就可以編譯完成后將模塊放置在這個(gè)路徑,接著使用LoadModule關(guān)鍵字進(jìn)行裝載
8. 中心主機(jī)相關(guān)指令
- DocumentRoot:定義中心主機(jī)的網(wǎng)頁文檔路徑,默認(rèn)為/var/www/html/
- ServerName:定義中心主機(jī)名稱,格式為ServerName [scheme://]FQDN[:port],用于定義當(dāng)前主機(jī)域名
- DirectoryIndex:定義默認(rèn)頁面
- user/group:指定以哪個(gè)用戶的身份運(yùn)行進(jìn)程
- AddDefaultCharset:設(shè)定默認(rèn)字符集
9. 訪問控制機(jī)制
可基于三種方式指明對哪些資源進(jìn)行訪問控制
(1) 文件系統(tǒng)路徑
- <Directory ""> </Directory>:對目錄文件做控制
- <File ""> </File>:對單個(gè)文件做控制
- <FileMatch ""> </FILEMatch>:根據(jù)正則表達(dá)式匹配做控制,但建議不使用,因?yàn)槊看纹ヅ鋾r(shí)要調(diào)用正則表達(dá)式匹配引擎,效率會降低
(2) URL路徑
可以明確指明限制哪些請求方法
- <Location ""> </Localtion>
- <LocationMatch ""> </LocaltionMatch>
10. 配置Directory訪問控制
(1) httpd 2.2
使用<Directory ""> </Directory>將配置段包含,其中可使用的指令如下
- options:定義當(dāng)不存在主頁時(shí),用戶對此目錄下的資源訪問機(jī)制,可以多參數(shù)共存,多項(xiàng)指令可以使用空白字符分割A(yù)ll: Indexes:允許索引目錄 FollowSymLinks:允許索引目錄,意思將目錄中所有文件以索引形式展示 SymLinksifOwnerMatch:符號鏈接文件和源文件屬主是同一個(gè)用戶時(shí)允許追蹤 AllowOverride:是否允許當(dāng)前配置去覆蓋每一個(gè)網(wǎng)站頁面路徑下的.htaccess
- Order:檢查次序
- Allow from IP:允許某個(gè)ip地址或網(wǎng)絡(luò)地址訪問,默認(rèn)為Allow from all
- Deny from IP:拒絕某個(gè)IP或網(wǎng)絡(luò)地址訪問Deny from all
(2) httpd 2.4
使用<Directory ""> </Directory>將配置段包含,其中可使用的指令如下
- options:定義當(dāng)不存在主頁時(shí),用戶對此目錄下的資源訪問機(jī)制,可以參數(shù)有很多,多項(xiàng)指令可以使用空白字符分割A(yù)ll:啟用所有選項(xiàng),除了MultiViews None:什么選項(xiàng)都不啟用 Indexes:允許索引目錄,意思將目錄中所有文件以索引形式展示 FollowSymLinks:允許跟蹤符號鏈接文件所指向的源文件 SymLinksifOwnerMatch:符號鏈接文件和源文件屬主是同一個(gè)用戶時(shí)允許追蹤 AllowOverride:是否允許當(dāng)前配置去覆蓋每一個(gè)網(wǎng)站頁面路徑下的.htaccess。
- Require [not] ip | host:拒絕或允許某個(gè)IP或網(wǎng)段訪問,當(dāng)IP有多個(gè)時(shí)需要使用子配置<Requireall>或<Requireany>將其包含,拒絕所有和允許所有使用Require all denied和Require all granted
11. 配置路徑別名
(1) httpd 2.2
直接在配置文件中加入Alias /URL/ "/PATH/TO/SOMEDIR/"
(2) httpd 2.4
- 在配置文件中加入Alias /URL/ "/PATH/TO/SOMEDIR/"
- 使用<Directory>配置塊對/PATH/TO/SOMEDIR/進(jìn)行授權(quán)
12. 配置日志
(1) 定義訪問日志格式
- LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined:通過LogFormat定義日志格式,后面給這個(gè)格式起個(gè)名稱用于后面引用
使用CustomLog "logs/access_log" combined定義日志路徑及啟用哪個(gè)日志格式
(2) 錯(cuò)誤日志
- ErrorLog "logs/error_log":定義錯(cuò)誤日志路徑
- LogLevel warn:debug、info、notice、warn、error、crit、alert、emerg
13. 用戶認(rèn)證質(zhì)詢
對指定的頁面資源提供賬號密碼認(rèn)證功能,這個(gè)機(jī)制是http協(xié)議內(nèi)建的,
(1) 認(rèn)證過程
- 第一步:當(dāng)客戶端請求需要認(rèn)證的資源時(shí),服務(wù)器端會向客戶端發(fā)送認(rèn)證質(zhì)詢響應(yīng)首部(WWW-Authenticate),響應(yīng)碼為401并拒絕客戶端請求,要求客戶端輸出賬號密碼
- 第二步:客戶端填入賬號密碼后發(fā)送一個(gè)請求認(rèn)證的首部(Authorization)
- 第三步:認(rèn)證通過則向客戶端發(fā)送響應(yīng)資源
(2) 認(rèn)證類型
- basic:明文認(rèn)證,這種方式會以明文的方式發(fā)送賬號密碼,極度不安全
- digest:消息摘要認(rèn)證,使用單向加密方式傳出加密后的認(rèn)證密碼結(jié)果
(3) 認(rèn)證配置
① 生成密碼文件
使用命令:htpasswd命令,格式:htpasswd [options] passwdfile name [passwd]
optons:-c:自動創(chuàng)建passwordfile:因此應(yīng)該在第一次添加用戶時(shí)使用-m:MD5加密用戶密碼-s:sha1:加密用戶密碼-D:刪除指定用戶-b:直接在命令中指定密碼 注:文件放在/etc/httpd/conf.d/.htpasswdhtpasswd -c -s /etc/httpd/conf.d/.htpasswd tom
htpasswd -b -s /etc/httpd/conf.d/.htpasswd mike 123456
② 對用戶進(jìn)行授權(quán)
/etc/httpd/conf.d/admin.conf<Directory "/var/www/html/admin">options NoneAllowOverride NoneAuthType BasicAuthName "Please enter user and passwd."AuthUserFile "/etc/httpd/conf.d/.htpasswd"Require valid-user </Directory>如果僅授權(quán)個(gè)別用戶使用 Require user tom 即可③ 對組進(jìn)行授權(quán)
- 第一步:使用htpasswd命令創(chuàng)建密碼文件
- 第二步:創(chuàng)建組定義文件,組文件手動創(chuàng)建,每一行定義一個(gè)組:GRP_NAME: username
- 第三步:在配置文件中進(jìn)行授權(quán)
? digest:消息摘要;
c) 需要用戶認(rèn)證后方能訪問的路徑叫安全域;
d) 虛擬賬號:僅用于訪問某服務(wù)時(shí)用到的認(rèn)證標(biāo)識;
14. 虛擬主機(jī)
互聯(lián)網(wǎng)上有些站點(diǎn)訪問量非常小,一臺物理服務(wù)器去承載一個(gè)站點(diǎn)太浪費(fèi)了,因此可以使用單臺物理服務(wù)器承載多個(gè)站點(diǎn),這就需要用到虛擬主機(jī),每一個(gè)虛擬主機(jī)承載一個(gè)獨(dú)立的域名,維護(hù)自己獨(dú)立的網(wǎng)頁路徑。這里需要注意,httpd 2.2虛擬主機(jī)不要與中心主機(jī)混用,如要使用虛擬主機(jī),先禁用中心主機(jī),只需注釋掉DocumentRoot就能實(shí)現(xiàn)。而在httpd 2.4中直接定義虛擬主機(jī)即可。另外,每個(gè)虛擬主機(jī)最好能分開定義日志文件
(1) 基于ip的虛擬主機(jī)
vim /etc/httpd/conf.d/virtualhost.conf<VirtualHost 192.168.1.200:80>ServerName web1.busyops.comDocumentRoot "/vhosts/web1/htdocs"<Directory "/vhosts/web1/htdocs">options NoneAllowOVerride NoneRequire all granted</Directory></VirtualHost><VirtualHost 192.168.1.201:80>ServerName web2.busyops.comDocumentRoot "/vhosts/web2/htdocs"<Directory "/vhosts/web2/htdocs">options NoneAllowOVerride NoneRequire all granted</Directory></VirtualHost>(2) 基于端口的虛擬主機(jī)
基于端口區(qū)分虛擬主機(jī)需要使用Listen關(guān)鍵字啟用端口
<VirtualHost 192.168.1.200:80>ServerName web1.busyops.comDocumentRoot "/vhosts/web1/htdocs"<Directory "/vhosts/web1/htdocs">options NoneAllowOVerride NoneRequire all granted</Directory></VirtualHost>Listen 8080 <VirtualHost 192.168.1.200:8080>ServerName web2.busyops.comDocumentRoot "/vhosts/web2/htdocs"<Directory "/vhosts/web2/htdocs">options NoneAllowOVerride NoneRequire all granted</Directory></VirtualHost>(3) 基于域名的虛擬主機(jī)
<VirtualHost 192.168.1.200:80>ServerName www.web1.comDocumentRoot "/vhosts/web1/htdocs"<Directory "/vhosts/web1/htdocs">options NoneAllowOVerride NoneRequire all granted</Directory></VirtualHost><VirtualHost 192.168.1.200:80>ServerName www.web2.comDocumentRoot "/vhosts/web2/htdocs"<Directory "/vhosts/web2/htdocs">options NoneAllowOVerride NoneRequire all granted</Directory></VirtualHost>注意:在httpd 2.2中,如果啟用基于主機(jī)名稱的虛擬主機(jī),需要將NameVirtualHost項(xiàng)啟用
15. httpd內(nèi)建的status頁面
以虛擬主機(jī)為例,編輯器配置文件在其中加入<Location>定義
<VirtualHost 192.168.1.200:80>ServerName www.web1.comDocumentRoot "/vhosts/web1/htdocs"<Directory "/vhosts/web1/htdocs">options NoneAllowOVerride NoneRequire all granted</Directory><Location /admin-status>SetHandler server-statusRequire ip 192.168.1.208</Location></VirtualHost> 進(jìn)程槽位狀態(tài)_:空閑進(jìn)程W:正在發(fā)送響應(yīng)的S:正在啟動的R:正在接受用戶請求K:保持連接D:正在做DNS查詢C:正在斷開連接L:正在記錄日志G:正在優(yōu)雅終止I:正在空閑清理進(jìn)程.:沒啟動在httpd 2.2的主配文件中,可以啟用ExtendedStatus On讓status頁面顯示的更加詳細(xì)
16. 頁面壓縮
壓縮頁面優(yōu)化傳輸速度,需要使用mod_deflate模塊。適用于帶寬稀缺,CPU空閑較多的情況。需要注意可能有些較老瀏覽器不支持。并且壓縮那些適合壓縮的資源,例如文本文件
第一步:開啟主配文件deflate模塊(或檢查模塊是否裝載httpd -M | grep deflate
LoadModule deflate_module modules/mod_deflate.so
第二步:在主配文件中或conf.d/目錄下加入壓縮配置
SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/css DeflateCompressionLevel 9 BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html第三步:使用httpd -t檢查配置文件,執(zhí)行systemctl restart httpd.service
- SetOutputFilter DEFLATE:作為Web服務(wù)器來講,把文件響應(yīng)給客戶端叫輸出。這選項(xiàng)表示調(diào)用一個(gè)叫做Deflate的輸出過濾器
- AddOutputFilterByType DEFLATE:定義壓縮的MIME類型,將這些類型都調(diào)用一個(gè)叫做Deflate的輸出過濾器
- DeflateCompressionLevel 9:定義壓縮比(Highest 9 - Lowest 1)
較老版本的瀏覽器不支持壓縮,服務(wù)器根據(jù)客戶端請求首部中的User-Agent來判斷客戶端是哪種類型
- BrowserMatch ^Mozilla/4 gzip-only-text/html:表示對mozilla/4的瀏覽器只用gzip壓縮text/html
- BrowserMatch ^Mozilla/4\.0[678] no-gzip:Mozilla4.0[678]的表示不壓縮
- BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html:對于MSIE瀏覽器不壓縮,如果要壓縮的話那也只壓縮這一種類型!gzip-only-text/html
17. 配置HTTPS
(1) SSL會話的簡化過程
- 客戶端發(fā)送可供選擇的加密方式,并向服務(wù)器請求證書
- 服務(wù)器端發(fā)送證書以及選定的加密方式給客戶端
- 客戶端取得證書并進(jìn)行證書驗(yàn)證:驗(yàn)證證書來源的合法性(用CA的公鑰解密證書上數(shù)字簽名)、驗(yàn)證證書的內(nèi)容的完整性(使用同樣的單向加密算法進(jìn)行驗(yàn)證)、檢査證書的有效期限、檢査證書是否被吊銷、證書中擁有者的名字與訪問的目標(biāo)主機(jī)要一致
- 客戶端生成臨時(shí)會話密鑰(對稱密鑰),并使用服務(wù)器端的公鑰加密此對稱秘鑰發(fā)送給服務(wù)器,完成密鑰文換
- 服務(wù)器用此密鑰加密用戶請求的資源,響應(yīng)給客戶端
注意:SSL會話是基于IP地址創(chuàng)建,所以單IP的服務(wù)器上僅可以使用一個(gè)https虛擬主機(jī)
(2) 配置過程
① 建立私有CA
(1) 生成CA自己的私鑰文件 cd /etc/pki/CA (umask 077; openssl genrsa -out private/cakey.pem 2048)(2) 生成CA自簽證書 touch index.txt echo 01 > serial openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 7300② 在web服務(wù)器創(chuàng)建證書簽署請求
(1) 創(chuàng)建單獨(dú)保存秘鑰的文件 mkdir /etc/httpd/ssl(2) 生成web服務(wù)器私鑰文件 (umask 077; openssl genrsa -out ssl/httpd.key 1024)(3) 生成證書頒發(fā)請求并發(fā)送給CA服務(wù)器 openssl req -new -key ssl/httpd.key -out ssl/httpd.csr scp ssl/httpd.csr root@192.168.1.250:/tmp/③ CA簽證并發(fā)還證書
(1) 簽署請求并發(fā)還客戶端 openssl ca -in /tmp/httpd.csr -out certs/web.server.com.crt -days 365 scp certs/web.busyops.crt root@192.168.1.200:/etc/httpd/ssl/④ 安裝ssl模塊
httpd服務(wù)器安裝mod_ssl:yun install -y mod_ssl,生成的配置文件如下
- /etc/httpd/conf.d/ssl.conf:配置文件
- /etc/httpd/conf.modules.d/00-ssl.conf:模塊配置文件
- /usr/lib64/httpd/modules/mod_ssl.so:模塊
- /usr/libexec/httpd-ssl-pass-dialog
- /var/cache/httpd/ssl:ssl會話緩存
⑤ 修改配置ssl.conf
配置文件:/etc/httpd/conf.d/ssl.conf
- Listen 443 https:設(shè)置端口及協(xié)議,保持不變即可
- SSLSessionCache:SSL會話非常消耗資源,使用會話保持功能可減少建立SSL的頻次,此項(xiàng)第一SSL會話緩存位置
- SSLSessionCacheTimeout:SSL會話緩存時(shí)長
- SSLRandomSeed:定義SSL會話隨機(jī)數(shù)來源
- DocumentRoot:于需要提供SSL會話的主機(jī)保持一致
- ServerName:于需要提供SSL會話的主機(jī)保持一致
- SSLCertificateFile:服務(wù)器公鑰
- SSLCertificateKeyFile服務(wù)器私鑰文件
⑥ 測試基于https訪問相應(yīng)的主機(jī)
openssl s_client [-connect host:port] [-CAfile filename]
五、http相關(guān)命令
1. httpd命令
option -l:顯示編譯 進(jìn)核心的模塊 -M:顯示靜態(tài)編譯及動態(tài)裝載的模塊 -t:檢查語法 -t -D DUMP_VHOSTS:導(dǎo)出虛擬主機(jī)配置信息2. curl命令
curl是基于URL語法在命令行方式下工作的文件傳輸工具,它支持FTP、FTPS、HTTP、HTTPS、GOPHER、TELNET、DICT、FILE及LDAP等協(xié)議。curl支持HTTPS認(rèn)證、HTTP的POST、PUT等方法、FTP上傳、kerberos認(rèn)證、HTTP上傳、代理服務(wù)器、cookies、用戶名/密碼認(rèn)證、下載文件斷點(diǎn)續(xù)傳、上載文件斷點(diǎn)續(xù)傳、http代理服務(wù)器管道(proxy tunneling),甚至它還支持IPv6、socket4代理服務(wù)器,通過http代理服務(wù)器上傳文件到FTP服務(wù)器等等,功能十分強(qiáng)大
命令格式:curl [options] URL
3. ab命令
壓力測試(apache bench)
命令格式:ab [option] URL
輸出信息
Server Software:服務(wù)器程序 Server Hostname:域名 Server Port:Document Path: 測試的URL Document Length: 請求的頁面大小Concurrency Level: 并發(fā)數(shù)量 Time taken for tests: 這個(gè)測試的時(shí)間 Complete requests: 在請求數(shù) Failed requests: 失敗的數(shù)量 Write errors: 響應(yīng)報(bào)文錯(cuò)誤數(shù) Non-2xx responses: 10000 Keep-Alive requests: 10000 Total transferred: 總數(shù)據(jù)傳輸量 HTML transferred: 主體部分大小 Requests per second: 沒秒鐘可以完成的響應(yīng)數(shù)量 Time per request: 每并發(fā)數(shù)完成需要的時(shí)間 Time per request: 每單個(gè)請求需要的時(shí)長 Transfer rate: 傳輸速率Connection Times (ms)min mean[+/-sd] median max最短 平均 中間值 最長 Connect: 請求建立需要的時(shí)間 Processing: 處理請求的時(shí)間 Waiting: 發(fā)送響應(yīng)報(bào)文的時(shí)間 Total: 一次請求完成的時(shí)間 Percentage of the requests served within a certain time (ms)50% 7 :完成50%消耗的時(shí)間66% 8 :完成66%消耗的時(shí)間75% 215 :完成75%消耗的時(shí)間80% 218 :完成80%消耗的時(shí)間90% 428 :完成90%消耗的時(shí)間95% 856 :完成95%消耗的時(shí)間98% 1757 :完成98%消耗的時(shí)間99% 6680 :完成99%消耗的時(shí)間100% 56953 (longest request) :完成100%消耗的時(shí)間總結(jié)
以上是生活随笔為你收集整理的http协议及httpd配置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计蒜客_Lpl and Energy-s
- 下一篇: 保弘实业|打工族怎么投资理财