日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

http协议及httpd配置

發(fā)布時(shí)間:2024/1/8 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 http协议及httpd配置 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、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

text/html:文本類型中的超文本文檔 text/plain:純文本文檔 image/jpeg image/gif

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>

Scheme:方案,用來指明協(xié)議 params:參數(shù) query:查詢標(biāo)準(zhǔn) 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
1. 僅允許一臺主機(jī)進(jìn)行訪問 <Directory "/var/www/html">Order allow,denyAllow from 192.168.1.100 </Directory> ---------------------------2. 開放一個(gè)網(wǎng)段訪問 <Directory "/var/www/html">Order allow,denyAllow from 192.168.1 </Directory> ---------------------------3. 開放一個(gè)網(wǎng)段,但是拒絕此網(wǎng)段的一臺主機(jī) <Directory "/var/www/html">Order allow,denydeny from 192.168.1.200Allow from 192.168.1 </Directory> ---------------------------

(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
1. 允許一臺主機(jī)訪問 <Directory "/var/www/html">Require ip 192.168.1.100 </Directory><Directory "/var/www/html">Require host www.busyops.com </Directory> ---------------------------2. 拒絕一臺主機(jī)訪問 <Directory "/var/www/html">Require not ip 192.168.1.100 </Directory><Directory "/var/www/html">Require not host www.busyops.com </Directory> ---------------------------3. 拒絕某個(gè)主機(jī)訪問,并允許一個(gè)網(wǎng)段訪問,檢測次序由上至下 <Directory "/var/www/html"><Requireall>Require not host www.busyops.comRequire ip 192.168.1</Requireall> </Directory>

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è)名稱用于后面引用
%h:客戶端IP地址 %l:客戶訪問時(shí)登錄的用戶名,一般都沒有登錄所以記錄為一個(gè)橫線- %u:認(rèn)證登錄時(shí)使用的用戶名,沒登錄的話記錄為一個(gè)橫線- %t:訪問時(shí)間 %r:請求報(bào)文的首行 %>s:使用%s記錄請求重定向等響應(yīng)碼,使用%>s記錄請求重定向后的響應(yīng)碼 %b:響應(yīng)報(bào)文的大小,單位是字節(jié),但是不包含http首部,如果大小為0記錄為- %{Referer}i:請求報(bào)文當(dāng)中referer首部的值,就是從哪個(gè)頁面中的超鏈接跳轉(zhuǎn)而來 %{User-Agent}i:請求報(bào)文當(dāng)中User-Agent首部的值,客戶端的瀏覽器類型

使用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/.htpasswd

htpasswd -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
/etc/httpd/conf.d/.htgroup admingrp: tom
  • 第三步:在配置文件中進(jìn)行授權(quán)
<Directory "/var/www/html/admin">options NoneAllowOverride NoneAuthType BasicAuthName "Please enter user and passwd."AuthUserFile "/etc/httpd/conf.d/.htpasswd"AuthGroupFile "/etc/httpd/conf.d/.htgroup"Require group admingrp </Directory>

? 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

options-A "string":可以把自己偽裝為某個(gè)瀏覽器向服務(wù)器端發(fā)請求-e "URL":偽裝自己的referer來源網(wǎng)址-H <header>:自定義首部信息傳遞給服務(wù)器-I:只顯示響應(yīng)報(bào)文首部信息-0:使用HTTP 1.0版本--basic:使用HTTP基本認(rèn)證-u <user[:password]>:設(shè)置服務(wù)器的用戶和密碼,結(jié)合--basic選項(xiàng)使用--tcp-nodelay:使用TCP_NODELAY選項(xiàng)--cacert <file>:CA證書(SSL)--compressed:要求返回是壓縮的格式,前提是兩端都支持壓縮--limit-rate <rate>:設(shè)置傳輸速度 elinks是一個(gè)交互式命令行瀏覽器,可以解析html標(biāo)簽。 命令格式:elinks option URL --dump:不進(jìn)入交互式模式,直接將內(nèi)容輸出值屏幕

3. ab命令

壓力測試(apache bench)
命令格式:ab [option] URL

option -n:總的請求數(shù) -c:模擬的并發(fā)數(shù) -k:以持久鏈接模式測試

輸出信息

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。