HTTP 之 httpd-2.4介紹和配置

** 1 概述**
HTTPD 2.4默認(rèn)是用于centOS7上,該軟件相比于HTTPD2.2 有了功能的改進(jìn)。本文將對httpd2.4的新功能進(jìn)行介紹,并介紹相關(guān)的常見配置
由于格式問題,本文的相關(guān)代碼見文章 http://ghbsunny.blog.51cto.com/7759574/1970553
2 HTTPD 新特性
.(1) MPM支持運(yùn)行為DSO機(jī)制拧烦;以模塊形式按需加載佑刷,DSO:動態(tài)的共享模塊
.(2) event MPM生產(chǎn)環(huán)境可用
.(3) 異步讀寫機(jī)制
.(4) 支持每模塊及每目錄的單獨(dú)日志級別定義莉擒,centos6上是每個虛擬主機(jī)的日志記錄,不支持目錄的日志記錄
.(5) 每請求相關(guān)的專用配置
.(6) 增強(qiáng)版的表達(dá)式分析式
.(7) 毫秒級持久連接時長定義
.(8) 基于FQDN的虛擬主機(jī)不需要NameVirutalHost指令
.(9) 新指令瘫絮,AllowOverrideList
.(10) 支持用戶自定義變量
.(11) 更低的內(nèi)存消耗
3 配置機(jī)制變更
HTTPD2.4不再支持使用Order, Deny, Allow來做基于IP的訪問控制
.新模塊
.(1) mod_proxy_fcgi
FastCGI Protocol backend formod_proxy
.(2) mod_remoteip
Replaces the apparent client remoteIP address and hostname for the request with the IP address list presented by aproxies or a load balancer via the request headers.
.(3) mod_ratelimit
Provides Bandwidth Rate Limiting forClients
CentOS 7 httpd程序環(huán)境
.CentOS 7:httpd-2.4
.安裝方法
rpm涨冀,編譯安裝
.Rpm安裝程序環(huán)境:
.配置文件:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/.conf
.模塊相關(guān)的配置文件:
/etc/httpd/conf.modules.d/
.conf
.systemdunit file:
/usr/lib/systemd/system/httpd.service
.主程序文件:
/usr/sbin/httpd
httpd-2.4支持MPM的動態(tài)切換
CentOS 7 httpd 程序環(huán)境
.日志文件:
/var/log/httpd
access_log:訪問日志
error_log:錯誤日志
.站點(diǎn)文檔:
/var/www/html
.模塊文件路徑:
/usr/lib64/httpd/modules
.服務(wù)控制:
systemctlenable|disablehttpd.servicesystemctl{start|stop|restart|status}httpd.service
4 常見配置
.(1) 切換使用的MPM
.Centos 7:/etc/httpd/conf.modules.d/00-mpm.conf
在00-mpm.conf這個文件下啟用對應(yīng)MPM相關(guān)的LoadModule指令即可
如果啟動的命令是apachectl,那么關(guān)閉的時候也要用apachectl來控制麦萤,而不能用systemctl來控制鹿鳖,這個是配套的
如果更換模塊為worker或者event后重啟失敗,可能是/etc/httpd/conf.d/php.conf的值設(shè)置有問題壮莹,把以下兩行注釋翅帜,再重啟即可

php_value session.save_handler "files"#php_valuesession.save_path "/var/lib/php/session"

.centos6編譯安裝:
vim /etc/httpd24/httpd.confInclude /etc/httpd24/extra/httpd-mpm.confLoadModule mpm_event_module modules/mod_mpm_event.so
(2)切換主目錄:
DocumentRoot /path
這個和centOS6不一樣,先改配置文件命满,把DocumentRoot更改涝滴,然后要設(shè)置directory進(jìn)行授權(quán)。cent7上默認(rèn)創(chuàng)建的目錄是不允許訪問的胶台。所以要進(jìn)行授權(quán)歼疮。
vim /etc/httpd/conf/httpd.confDocumentRoot /app

授權(quán)如下
vim /etc/httpd/conf.d/newhome.conf<directory /app>require all granted</directory>
(3) 基于IP的訪問控制
無明確授權(quán)的目錄,默認(rèn)拒絕
允許所有主機(jī)訪問:Require all granted
拒絕所有主機(jī)訪問:Require all denied
控制特定的IP訪問:
Require ip IP ADDR:授權(quán)指定來源的IP訪問
Require not ip IP ADDR:拒絕特定的IP訪問
控制特定的主機(jī)訪問:
Require host HOSTNAME:授權(quán)特定主機(jī)訪問
Require not host HOSTNAME:拒絕
HOSTNAME:
FQDN:特定主機(jī)
domin.tld:指定域名下的所有主機(jī)
.不能有失敗概作,至少有一個成功匹配
<RequireAll>……</RequireAll>

以下配置除了172.18.50.63這個ip不能訪問腋妙,其他所有的主機(jī)都能訪問

vim /etc/httpd/conf.d/newhome.conf<directory /app><requireall>require all grantedrequire not ip 172.18.50.63</requireall></directory>

.多個語句有一個成功,即成功
<RequireAny>……</RequireAny>

以下配置除了172.18.50.63這個ip能訪問讯榕,其他所有的主機(jī)都不能訪問

vim /etc/httpd/conf.d/newhome.conf<directory /app><requireany>require all deniedrequire ip 172.18.50.63</requireany></directory>

(4) 虛擬主機(jī)
基于FQDN的虛擬主機(jī)也不再需要NameVirutalHost指令,但是centos6(2.2)要配置namevirtualhost:80匙睹,2.4不需要配置這行代碼
例子一
<VirtualHost
:80>ServerName www.b.netDocumentRoot "/apps/b.net/htdocs" <Directory"/apps/b.net/htdocs">Options NoneAllowOverride NoneRequire all granted</Directory></VirtualHost>
例子二
首先要建立三個主站點(diǎn)a.com,b.com,c.com愚屁,虛擬主機(jī)建立完成后,默認(rèn)的主站點(diǎn)會失效痕檬,主站點(diǎn)會變更為配置文件中的第一個虛擬主機(jī)的站點(diǎn)霎槐,注意:任意目錄下的頁面只有顯式授權(quán)才能被訪問
虛擬主機(jī)配置文件如下
vim /etc/httpd/conf.d/virtualhost.conf<directory /app>require all granted</directory><virtualhost *:80>servername www.a.comdocumentroot "/app/a.com/"</virtualhost><virtualhost *:80>servername www.b.comdocumentroot "/app/b.com/"</virtualhost><virtualhost *:80>servername www.c.comdocumentroot "/app/c.com/"</virtualhost>
測試的主機(jī)指定的dns要能解析這三個站點(diǎn),或者可以直接添加在測試主機(jī)的hosts進(jìn)行測試
(5) 開啟https
安裝mod_ssl梦谜,和httpd-2.2相同配置
(6) 長連接
KeepAlive on #默認(rèn)支持持久連接KeepAlive Timeout #msMaxKeepAlive Requests 100

毫秒級持久連接時長定義
** (7) Sendfile機(jī)制**
提高訪問性能的設(shè)置丘跌,默認(rèn)啟用,配置語句
EnableSendfile on
Sendfile機(jī)制的相關(guān)原理如下
.不用sendfile的傳統(tǒng)網(wǎng)絡(luò)傳輸過程:
.read(file, tmp_buf, len)
.write(socket, tmp_buf, len)
實(shí)現(xiàn)機(jī)制如下:
.硬盤>>kernel buffer >> user buffer >> kernel socket buffer >> 協(xié)議棧
資源是從硬盤復(fù)制到內(nèi)核緩沖區(qū)唁桩,然后在復(fù)制到httpd的應(yīng)用程序緩沖區(qū)闭树,然后應(yīng)用程序封裝響應(yīng)頭部,再交給內(nèi)核緩存荒澡,造成了效率低下
.一般網(wǎng)絡(luò)應(yīng)用通過讀硬盤數(shù)據(jù)报辱,寫數(shù)據(jù)到socket 來完成網(wǎng)絡(luò)傳輸,底層執(zhí)行過程:
.1系統(tǒng)調(diào)用read()產(chǎn)生一個上下文切換:從user mode 切換到kernel mode,然后DMA 執(zhí)行拷貝单山,把文件數(shù)據(jù)從硬盤讀到一個kernel buffer 里碍现。
.2 數(shù)據(jù)從kernelbuffer 拷貝到userbuffer幅疼,然后系統(tǒng)調(diào)用read() 返回,這時又產(chǎn)生一個上下文切換:從kernel mode 切換到user mode
.3 系統(tǒng)調(diào)用write()產(chǎn)生一個上下文切換:從user mode 切換到kernel mode昼接,然后把步驟2讀到user buffer 的數(shù)據(jù)拷貝到kernel buffer(數(shù)據(jù)第2次拷貝到kernel buffer)爽篷,不過這次是個不同的kernel buffer,這個buffer和socket 相關(guān)聯(lián)慢睡。
.4 系統(tǒng)調(diào)用write()返回逐工,產(chǎn)生一個上下文切換:從kernel mode 切換到user mode(第4次切換),然后DMA從kernel buffer 拷貝數(shù)據(jù)到協(xié)議棧(第4次拷貝)
.上面4個步驟有4次上下文切換,有4次拷貝一睁,如果能減少切換次數(shù)和拷貝次數(shù)將會有效提升性能
.在kernel2.0+ 版本中钻弄,系統(tǒng)調(diào)用sendfile()就是用來簡化上面步驟提升性能的。sendfile() 不但能減少切換次數(shù)而且還能減少拷貝次數(shù)
.用sendfile()來進(jìn)行網(wǎng)絡(luò)傳輸?shù)倪^程:
.sendfile(socket, file, len);
.硬盤>>kernel buffer (快速拷貝到kernelsocket buffer) >> 協(xié)議棧
.1系統(tǒng)調(diào)用sendfile()通過DMA 把硬盤數(shù)據(jù)拷貝到kernel buffer者吁,然后數(shù)據(jù)被kernel 直接拷貝到另外一個與socket 相關(guān)的kernel buffer窘俺。這里沒有user mode 和kernel mode 之間的切換,在kernel 中直接完成了從一個buffer 到另一個buffer 的拷貝复凳。
.2DMA 把數(shù)據(jù)從kernelbuffer 直接拷貝給協(xié)議棧瘤泪,沒有切換,也不需要數(shù)據(jù)從usermode 拷貝到kernelmode育八,因?yàn)閿?shù)據(jù)就在kernel 里
5 反向代理功能
2.4默認(rèn)支持反向代理对途,反向代理相當(dāng)于是代替客戶端訪問后端服務(wù)器,httpd可以實(shí)現(xiàn)髓棋,但是httpd不能實(shí)現(xiàn)大規(guī)模的調(diào)度作用实檀,所以一般不用來實(shí)現(xiàn)反向代理, 一般前端用haproxy這種專業(yè)的反向代理服務(wù)器按声,本身沒有web功能膳犹,就是用來做代理用的。
nginx也可以做代理服務(wù)器签则,郵件服務(wù)器须床,網(wǎng)頁服務(wù)器,但是渐裂,nginx的功能比haproxy弱豺旬,但是企業(yè)還是比較多用nginx來做代理服務(wù)器,因?yàn)閚ginx的代理服務(wù)器功能基本能滿足轉(zhuǎn)發(fā)柒凉,而且可以當(dāng)網(wǎng)頁服務(wù)器族阅,本身可以響應(yīng)web請求。
.啟用反向代理
ProxyPass "/" "http://www.example.com/"# ProxyPass 指請求從客戶端到反向代理服務(wù)器#"/" 這里代表URL扛拨,這里是主站點(diǎn)的根#"http://www.example.com/" 是后端的服務(wù)器ProxyPassReverse "/" "http://www.example.com/"# ProxyPassReverse是指后端服務(wù)器"http://www.example.com/"將結(jié)果返回到反向代理的服務(wù)器上
以上兩個語句是配套出現(xiàn)
例子
例子一
.特定URL反向代理
在172.18.50.75這臺機(jī)器上配置耘分,如果訪問http://172.18.50.75 會被轉(zhuǎn)發(fā)到http://172.18.50.61/,如果訪問http://172.18.50.75/bbs,就會被轉(zhuǎn)發(fā)到http://172.18.50.63/sunny.txt
vim/etc/httpd/conf.d/virtualhost.conf
<directory/app>
requireall granted
</directory>
<virtualhost:80>
servername www.a.comdocumentroot"/app/a.com/"proxypass"/" "http://172.18.50.61/"proxypassreverse"/" "http://172.18.50.61"</virtualhost><virtualhost
:80>
servernamewww.b.com
documentroot"/app/b.com/"proxypass"/bbs" "http://172.18.50.63/sunny.txt"proxypassreverse"/bbs" "http://172.18.50.63/sunny.txt"</virtualhost>

測試求泰,在能夠解析http://172.18.50.75的主機(jī)上curl http://172.18.50.75/bbs 和curl http://172.18.50.75 看到結(jié)果央渣,如果有重定向,加-L選項(xiàng)渴频,會將請求再發(fā)一次芽丹,發(fā)到重定向后的地址
例子二
實(shí)現(xiàn)基于端口的虛擬主機(jī)
vim /etc/httpd/conf.d/virtualhost.conf
<directory/app>requireall granted
</directory>
listen8080
<virtualhost*:8080>
servernamewww.c.com
documentroot"/app/c.com/"
</virtualhost>
測試,在其他主機(jī)上curl http://172.18.50.75:8080
6 總結(jié)
本文主要是介紹了httpd的一些新特性和常見的幾種配置卜朗,其他內(nèi)容可以參見博客http://ghbsunny.blog.51cto.com/7759574/1970486拔第。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市场钉,隨后出現(xiàn)的幾起案子蚊俺,更是在濱河造成了極大的恐慌,老刑警劉巖逛万,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泳猬,死亡現(xiàn)場離奇詭異,居然都是意外死亡宇植,警方通過查閱死者的電腦和手機(jī)得封,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來指郁,“玉大人忙上,你說我怎么就攤上這事∠锌玻” “怎么了疫粥?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長腰懂。 經(jīng)常有香客問我手形,道長,這世上最難降的妖魔是什么悯恍? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮伙狐,結(jié)果婚禮上涮毫,老公的妹妹穿的比我還像新娘。我一直安慰自己贷屎,他們只是感情好罢防,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著唉侄,像睡著了一般咒吐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天恬叹,我揣著相機(jī)與錄音候生,去河邊找鬼。 笑死绽昼,一個胖子當(dāng)著我的面吹牛唯鸭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播硅确,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼目溉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了菱农?” 一聲冷哼從身側(cè)響起缭付,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎循未,沒想到半個月后陷猫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡只厘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年烙丛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片羔味。...
    茶點(diǎn)故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡河咽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赋元,到底是詐尸還是另有隱情忘蟹,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布搁凸,位于F島的核電站媚值,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏护糖。R本人自食惡果不足惜褥芒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嫡良。 院中可真熱鬧锰扶,春花似錦、人聲如沸寝受。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽很澄。三九已至京闰,卻和暖如春颜及,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蹂楣。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工俏站, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人捐迫。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓乾翔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親施戴。 傳聞我的和親對象是個殘疾皇子反浓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內(nèi)容