下面介紹的是http協議基礎、http協議的報文格式、httpd(Apache)、httpd-2.2、httpd-2.4。
一、http協議基礎 -------------超文本傳輸協議,無狀態,可通過 cookie 機制來進行狀態保存。
1、協議版本
http協議的版本有:http/0.9、http/1.0、http/1.1。
http/1.0 ---------支持MIME機制,支持Cache機制,Method機制。
http/1.1 --------強化了緩存、提出了持久連接機制
http/1.0 的三種機制解釋如下:
MIME機制 ------------多用途互聯網郵件擴展
Cache機制 -----------緩存機制
Method機制:
GET --------請求獲取相關資源
POST -------在資源之後附加的數據
HEAD -------請求資源的相應首部
PUT --------請求服務器存儲一個資源
DELETE -----請求服務器刪除某個資源
TRACE ------請求服務器回送請求信息,用於故障診斷或檢測
CONNECT ----保留未被使用
OPTIONS ----查詢服務器性能,查詢與資源相關的選項和請求資源的需求
http協議 ------應用層協議,接口 80/tcp
https協議 -----應用層協議,接口 443/tcp
2、URI -----------統一資源標識符(web上的各種資源都可以用uri來標識)
URI分爲三部分:
1)、訪問資源的命名機制
2)、存放資源的主機名稱
3)、資源自身的名稱
URL ------------統一資源【定位】符,可以說URL是URI的子集(URI自身存在的機制)。
URL是互聯網上,【描述web資源】的特定格式的一組字符串。
URL由三部分構成:
1)、協議 ------表資源的提供方式或訪問方式
2)、主機標識 --------可以是主機名稱,也可以是IP地址
3)、資源路徑 --------使用某種特定方式實現的路徑映射機制,標識資源的具體位置
URL的通用格式:scheme://Server[:port]/PATH/TO/SOME_RESOUECE?PARAMETERS=VALUE#FLAGS
例:http://www.baidu.com/index.html
3、Web資源
Web上可用的各種資源,如:html文檔,圖片,視頻或音頻片段,應用程序等,都可以使用URI來進行標識。客戶端發送的一次請求,只能請求一個web資源。
(1)、資源分類
web資源分爲兩類:分爲靜態、動態兩種資源。
靜態資源:服務器直接發送給客戶端響應的資源。(html文檔、圖片、流媒體、文本、js)
動態資源:在服務器上需要服務器按照某種方式執行之後生成相應的頁面,再將頁面發送給客戶端響應的資源。(.php、.jsp、.NET、js)
(2)、資源路徑映射 ----------------chroot
資源服務器的映射方式:DocumentRoot、Alias、vhost docroot、用戶自己的docroot
html文檔 -------------超文本標記語言(查詢訪問時使用)
格式:
<html>
<head>
<title>xxxx</title>
<meta>
</head>
<body>
</body>
</html>
4、五種併發響應模型(服務器):
(1)、單進程IO模型:只有一個進程,每次只能響應一個用戶請求,串行響應。
(2)、多進程IO模型:同時啓動多個進程,每個進程可以響應一個用戶請求。
(3)、複用的IO模型:一個進程可以響應多個用戶請求。
多線程模型:一個進程可以生產多個線程,每個線程響應一個用戶提供請求。
事件驅動模型:一個進程【直接響應】多個用戶請求。
(4)、複用的多進程IO模型:啓動多個進程,每個進程再分爲多個線程,每個線程響應一個用戶提供請求。
(5)、複用的事件驅動IO模型:啓動多個進程,每個進程直接響應多個用戶請求。
5、web服務器一次完整的http請求的處理過程:
(1)、建立連接 -----三次握手
(2)、接收請求:將客戶端發送來的報文解封后放置於服務進程所在的內存空間。
(3)、處理請求:對於接收到的數據報文,進行解析。
(4)、訪問資源:通過各種IO方式,獲取到用戶請求的資源。
(5、)構建響應報文
(6)、發送響應報文
(7)、記錄訪問日誌
6、http請求處理的連接方式:持久連接、短連接
持久連接:長連接,keepalive。對於持久連接,有時間限制(15秒)和數量限制(100個)
非持久連接:短連接
7、http協議的實現方式:httpd、nginx、lighttpd。
二、http協議的報文格式 -----------也稱爲http首部、http頭
1、通用格式:
起始行
首部
...
主題
2、請求報文首部 -----------request headers
<Method> <request-URL> <Version>
<header: > value
Host: www.qhdlink.com
<body>
3、響應報文首部 -----------response headers
<Version> <Status-Code> <reason-phrase>
<header: > value
...
<body>
4、對於請求、響應報文首部中,各個字段的定義如下:
Method:請求方法,客戶端希望服務器執行的操作
GET ----------服務器到客戶端
HEAD ---------只在乎表頭
POST ---------客戶端到服務器
Status-Code --------狀態碼,三位十進制整數,公有5類。
主要作用:是標識請求處理過程的結果狀態。
五類:
1xx:代碼爲100-101,信息提示
2xx:200-206,成功類的相應狀態碼
3xx:300-305,重定向類相應狀態碼
301:永久重定向(響應一個提示信息,提示改變位置)
302:臨時重定向(用於響應新版)
304:資源未被修改
4xx:400-415,客戶端錯誤類的響應狀態碼
401:認證質詢
403:請求被拒絕(所請求的資源沒有權限訪問、用戶身份錯誤)
404:請求的資源不存在
5xx:500-505,服務器端錯誤類的響應狀態碼
500:服務器內部錯誤
502:反向代理和上一級服務器通信失敗,或請求超時
reason-phrase ---------狀態短語
如:Forbidden
header ------首部內容
格式:Name: Value
首部分類(5種):通用首部、請求首部、響應首部、實體首部、擴展首部
1)、通用首部:請求報文和響應報文中都可以使用
Date -------------創建報文的時間
Connection -------------連接狀態(長連接、短連接,即keepalive、closed)
Via ---------------經由(報文傳輸過程中經由的代理節點的IP地址)
Cache-Control ----------------緩存控制機制
2)、請求首部:
Accept ----------------可以接受的媒體形式,MIME(多用途互聯網郵件擴展)
媒體格式(MIME格式):Major/Minor ------主類型和次類型
常用的媒體格式有:text/html、text/plaintext、p_w_picpath/jpeg、p_w_picpath/png、application/X-php
Accept-Charset ------------可以接受的字符集
如:ASCII碼(單字節碼),Linux每個漢字默認3個字節,Windows每個漢字默認2個字節
Accept-Encoding ----------可以接受的編碼格式(byte、gzip、deflate)
Accept-Language ----------可以接受的語言
Client-IP --------------可接受的客戶端IP地址
Host -----------請求的服務器名稱,也稱爲主機頭
Referer -----------從哪跳轉過來,不是直接鍵入的
User-Agent --------------客戶端代理程序
Expect -----------期望到的內容(條件使式請求首部,3個)
If-Modified-Since --------某時間後是否被修改過
If-Unmodified-Since -------某時間後是否沒被修改過
If-Match ------本地緩存和服務器ETag是否相同
3)、響應首部:消息性首部、安全響應首部
消息性首部如下:
Age -----------響應持續的時長;
Server ----------服務器端軟件程序的名稱、版本
Accept-Ranges -------------服務器端請求類型範圍,*表所有
Vary --------------服務器查看的其他首部列表
安全響應首部如下:
WWW-Authenticate -----------詢問握手
Set-Cookie ----------爲客戶端設定Cookie
4)、實體首部:Allow、Location、Content-Encoding、Content-Language、Content-Location、Content-Type、Content-Length
Allow --------------請求方法
Location -------------資源的真正的URL地址
Content-Location ----------真正實體資源的所在位置
5)、擴展首部 ---------X開頭
三、httpd(Apache)
httpd -----------應用程序(http daemon)
1、版本
httpd軟件的版本:httpd-1.3、httpd-2.0、httpd-2.2、httpd-2.4。常用的是httpd-2.4。
2、httpd特性
httpd的特性:高度模塊化(一個核心+多個模塊)。其中,模塊分爲兩類:動態和靜態。靜態是編譯到核心中的功能,如果要更改靜態模塊,必須更換核心,所以必須重啓。
httpd的功能特性(7個):
(1)、支持CGI(通用網關接口)
(2)、支持虛擬主機的功能:標識虛擬主機----IP+port+主機名
(3)、支持反向代理 ----------相當於代理服務器,可影響內部拓撲結構
代理(正向代理) --------相當於代理客戶
(4)、支持負載均衡 ----------基於流量、基於業務、基於請求(相當於集羣)
(5)、可進行路徑別名的設置
(6)、支持身份驗證機制:basic、digest。
(7)、支持大量的第三方模塊
3、MPM模塊 ---------多道處理模塊,是併發響應模型的機制。(3種工作方式)
(1)、prefork(默認):是一種多進程IO模型,有一個主進程和多個子進程,一個進程響應一個請求。其子進程,負責處理和響應請求。
prefork具有主進程、子進程(子進程,處理請求和響應請求)。
(2)、worker:複用的多進程IO模型(多線程),多進程多線程,一個線程響應一個請求。其子進程,負責管理線程,線程負責處理和響應請求。
worker具有主進程、子進程、線程(線程,處理請求和響應請求)。
(3)、event:複用的IO模型(事件驅動),其子進程處理和響應請求。
event具有主進程、子進程(子進程,處理請求和響應請求)。
event模型使用:
在httpd-2.4中,event爲建議使用模型,其前的版本中,event不穩定或沒有加載。
在centos6 中,採用httpd-2.2,所以採用的是event 測試模型,也不支持動態機制的MPM。
在centos7 中,採用httpd-2.4,採用成熟的event,支持MPM機制。
四、httpd-2.2
1、httpd-2.2中的服務(centos6)
啓動服務 ----------------/etc/rc.d/init.d/httpd
# /etc/rc.d/init.d/httpd {start|stop|restart|reload|status}
# service httpd {start|stop|restart|reload|status}
開機自啓:chkconfig [--level 23456] httpd on|off
2、httpd-2.2的程序環境
配置文件:
/etc/httpd/conf/httpd.conf ----------主配置文件
/etc/httpd/conf.d/*.conf ----------輔助配置文件
/etc/httpd/conf.d/magic -----------實現MIME功能(多用途互聯網郵件擴展)
/etc/sysconfig/httpd -------------httpd服務器【啓動腳本】的配置文件
程序文件:/usr/sbin/httpd
/usr/sbin/httpd.event
/usr/sbin/httpd.worker
日誌文件:/var/log/httpd -----包括訪問日誌和錯誤日誌
默認站點的文檔和目錄:/var/www/html
模塊文件的路徑:/usr/lib64/httpd/modules -----------存在符號鏈接文件/etc/httpd/modules
3、httpd-2.2與centos7的httpd-2.4比較:
啓動服務:/usr/lib/systemd/system/httpd.service
# systemctl {start|stop|restart|reload|status} httpd[.service]
開機自啓:
# systemctl enable|disable httpd.service
在httpd2.4中,支持靜態模塊,每個MPM模型對應一個模塊。
配置文件:(多了一種)
/etc/httpd/conf.modules.d -------------額外的模塊專用的配置文件
程序文件(二進制文件):---------------/usr/sbin/httpd
/usr/lib64/httpd/modules/mod_mpm_event.so
/usr/lib64/httpd/modules/mod_mpm_prefork.so
/usr/lib64/httpd/modules/mod_mpm_worker.so
/usr/sbin/apachectl -------------------服務控制命令
4、安裝httpd --------------------httpd、httpd-tools、httpd-devel、httpd-manual
安裝httpd的兩種方式如下:
1)、rpm包 -----本地光盤yum源中
2)、編譯安裝 ------定製新功能,爲了安全,可去除帶有漏洞後門的模塊
安裝的httpd擁有的四個包:主程序包、httpd的工具包、httpd的開發包、離線幫助文檔。
# yum list all httpd*
httpd2.2的主配置文件:-------------------/etc/httpd/conf/httpd.conf
在此配置文件中,所有的配置選項都被稱爲選項,指令格式爲:directive value(駝峯式)。在修改了配置文件中的指令後,可以使用reload使之生效。在httpd2.2 中,如果【更改了監聽的IP地址,則必須重啓服務】。在主配置文件中,所有的指令被分別寫到三個配置部分中
下面是修改配置文件中的指令:(16類)
(1)、修改監聽的地址和端口
格式:Listen [IP:]PORT
注意:listen指令可以定義多次,如果省略了IP地址,即 0.0.0.0,意味着httpd服務進程將監聽服務器上配置的所有IP地址。
(2)、持久連接的特性(3個)------------KeepAlive
持久連接,就是當服務器和客戶端已經建立其tcp連接之後,在完成一次請求之後,連接不斷開,而是等待其他用戶發送請求。
斷開條件:數量限制、時間限制。
相關指令:KeepAlive Off|On ------------------持久連接開啓或關閉
MaxKeepAliveRequests 100 ----------------最多持久連接數
KeepAliveTimeout 15 --------------持久連接的時間,默認單位爲秒
# httpd -t -----------------測試語法結構的對錯
請求測試:
# telnet SERV_IP SERV_PORT
GET /PATH/TO/RESOURCE HTTP/1.1
Host: SERV_IP
例:# telnet 172.16.67.1 80 ------------進入Telnet模式,進行請求輸入。
> GET html HTTP/1.1
> Host: 172.16.67.1 -------------兩次回車載入
(3)、MPM ------------多道處理模塊
httpd-2.2的MPM不支持DSO機制,並且event爲測試模式。
# httpd -M -----------列出所有支持模塊,包括靜態和共享模塊
# httpd -l -----------查看靜態編譯的模塊
三個配置文件:/usr/sbin/httpd、/usr/sbin/httpd.event、/usr/sbin/httpd.worker。
與prefork相關的配置指令:(子進程)
<IfModule prefork.c>
StartServers 8 -------------在服務剛啓動時,預先fork幾個子進程
MinSpareServers 5 --------------最小預留的空閒子進程的數量
MaxSpareServers 20 -------------最多預留的空閒子進程的數量
ServerLimit 256 --------------爲MaxClients指定的最大值
MaxClients 256 ----------------最大的併發訪問量
MaxRequestsPerChild 4000 -------------------每個子進程處理的最大請求數量
</IfModule>
與worker相關的配置指令:(線程)
<IfModule worker.c>
StartServers 4 -------------------在服務剛啓動時,預先fork幾個子進程
MaxClients 300 ------------------並行訪問的上限
MinSpareThreads 25 -------------------最小預留的空閒線程數量
MaxSpareThreads 75 -----------------最大預留的空閒線程數量
ThreadsPerChild 25 -----------------每個進程管理的最大線程數量
MaxRequestsPerChild 0 ------------------每個子進程處理的最大請求數量
</IfModule>
(4)、DSO機制 -----------LoadModule
modules,即/etc/httpd/modules。
(5)、"Main" Server -----------定義主機的基本指令
格式:ServerName FQDN[:PORT]
DocumentRoot "/var/www/html"
配置:
http://172.16.69.1/test.html ----------路徑映射
DocumentRoot "/myweb/data"
例:配置了配置文件後,進行以下操作:
# mkdir -pv /myweb/data
# vim /myweb/data/index.html
重載配置文件
客戶端訪問到http://172.16.69.1/index.html
(6)、站點資源的訪問控制
1)、基於文件系統的訪問控制:分爲三類,分別爲:基於【指定目錄】的訪問控制、基於【特定文件】的訪問控制、基於【模式匹配】進行文件的訪問控制。
基於【指定目錄】的訪問控制,格式如下:
<Directory "/PATH/TO/SOME_DIR">
Directive Value
</Directory>
基於【特定文件】的訪問控制,格式如下:
<File "/PATH/TO/SOME_FILE">
Directive Value
</File>
基於【模式匹配】進行文件的訪問控制,格式如下:
<FileMatch "PATTERN">
Directive Value
</FileMatch>
2)、基於URL路徑進行訪問控制:分爲兩類,分別爲:基於【URL】進行、基於【模式匹配】進行URL路徑訪問。
基於URL進行,格式如下:
<Location "/PATH/TO/SOME_URL">
Directive Value
</Location>
基於模式匹配進行URL路徑訪問,格式如下:
<LocationMatch "URL_PATTERN">
Directive Value
</LocationMatch>
3)、常用的目錄中的訪問控制指令有:各種options指令、AllowOverride指令。
Options指令:
Indexes ---------允許索引(一般用於資源下載站點),對於正常的Web站點來說,應禁用此功能。
FollowSymLinks -------跟蹤符號鏈接
SymLinksifOwnerMatch -------------只有當子進程的所有者和鏈接文件的所有者爲同一用戶時,纔跟蹤符號鏈接
ExecCGI ---------允許執行CGI腳本
AllowOverride指令:-----------------控制那些允許放置於 .htaccess 文件中的指令,具有繼承特性。該指令的值設置爲None
.htaccess的三個配置文件:/myweb/data/.htaccess /myweb/data/p_w_picpaths/.htaccess /myweb/data/admin/.htaccess
Order指令、Allow指令、Deny指令:
Order指令 ----------定義基於IP地址的訪問控制,規定了訪問控制的檢查順序,allow,deny 和 deny,allow 訪問結果不同。
(7)、web站點主頁文件的定義
當用戶給出的URL中,【沒有明確指明資源的具體名稱】時,此處會根據此處的文件名去依次匹配,先後順序優先。
例:
DirectoryIndex index.html in.html index.html.var
(8)、定義路徑別名
格式:Alias /URL/ "/PATH/TO/SOME_DIR/"
在Alias指令格式中,URL右側的"/"相當於後面的路由右側的"/",他們是匹配的。
(9)、日誌功能:錯誤日誌、訪問日誌。
訪問日誌的各選項解釋:
%h -----------客戶端的IP地址
%l ------------登錄名,沒有則爲"-"
%s ------------狀態信息
%b ------------資源大小
(10)、離線幫助手冊 ---------------配置文件:/etc/httpd/conf.d/manual.conf(重載之後生效)
# yum -y install httpd-manual
(11)、基於用戶的訪問控制
httpd的認證功能:(2種)
認證質詢機制(響應報文的狀態碼爲 401)-----------需進行身份驗證,先拒絕訪問,進行登錄
認證 -------客戶端填寫賬戶和密碼,登錄後之後,發送報文
httpd的認證方式:(2種)
basic認證 ---------明文認證
digest認證 --------消息摘要認證
虛擬用戶賬號 ----------該賬號無法進行系統級認證,只能用於訪問服務器上某特定服務的賬戶
一般來講,虛擬用戶時存放於某特定的數據格式中,如:文本文件、SQL數據庫(寫效率高)、LDAP目錄數據庫(讀效率高)
安全域 ------需要通過用戶認證才能訪問資源
htpasswd命令 ---------------------創建用戶/組文件
常用選項:
-c 創建用戶賬戶文件(只用於創建第一個,建第二個用戶以後的賬戶不要用-c)
-m 使用md5加密用戶密碼
-s 使用sha加密用戶密碼
-D 刪除用戶
例:basic認證的配置(定義安全域、創建用戶/組文件)
1)、定義安全域
<Directory "/PATH/TO/SOME_DIR"> ------------基於【虛擬用戶】做身份驗證
Options None
AllowOverride None
Authtype basic
AuthName "SOME_STRING"
AuthUserFile "/PATH/TO/HTTP_USER_FILE"
Require user user1 user2 ...
</Directory>
<Directory "/PATH/TO/SOME_DIR"> ----------基於【虛擬組】做身份驗證
Options None
AllowOverride None
Authtype basic
AuthName "SOME_STRING"
AuthUserFile "/PATH/TO/HTTP_USER_FILE"
AuthGroupFile "/PATH/TO/HTTP_GROUP_FILE"
Require group group1 group2 ...
</Directory>
2)、創建用戶/組的文件(htpasswd命令)
格式:GROUP_NAME: user1 user2 ...
(12)、系統狀態數據查詢:server-status
# httpd -M | grep status
ExtendedStatus On|Off -----------開啓或關閉更多的額外系統狀態信息
例:
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 172.16
</Location>
(13)、虛擬主機
對於每個web站點,都有一個屬於其獨立的標識。Main Server 和虛擬主機不能同時使用。兩個都有的話,Main Server失效,虛擬主機有效。
站點標識:IP地址、PORT、主機頭(FQDN)
三種典型的虛擬主機實現方式:
1)、基於IP地址的虛擬主機 -----每個虛擬主機使用一個獨立的IP地址
2)、基於PORT端口的虛擬主機 -------每個虛擬主機使用一個端口
3)、基於主機頭的虛擬主機 ----------每個虛擬主機使用一個獨有的FQDN
虛擬主機的配置方法:------------在 ./conf.d/ 下進行主機配置
<VirtualHost IP:80>
DocumentRoot /www/docs/dummy-host.example.com
ServerName dummy-host.example.com
</VirtualHost>
vhosts-www1.conf
基於IP地址的配置示例:(2臺虛擬主機)---------------vim /etc/httpd/conf.d/vhost-www1.conf
# vim /etc/httpd/conf.d/vhost-www1.conf
# vim /etc/httpd/conf.d/vhost-www2.conf
/etc/httpd/conf.d/vhosts-www1.conf
<VirtualHost 172.16.69.1:80>
DocumentRoot "/myweb/vhosts/www1"
ServerName www1.qhdlink.com
</VirtualHost>
/etc/httpd/conf.d/vhosts-www2.conf
<VirtualHost 172.16.69.2:80>
DocumentRoot "/myweb/vhosts/www2"
ServerName www2.qhdlink.com
</VirtualHost>
基於端口的配置示例:------------/etc/httpd/conf.d/vhosts-www3.conf
注意基於端口配置的時候,要指明端口號,不然和沒指明的時候一樣,不是端口的配置。進行端口配置的前提,是需要讓httpd事先監聽於指定的額外端口,即Listen PORT。
/etc/httpd/conf.d/vhosts-www3.conf
Listen 60080
<VirtualHost 172.16.69.1:60080>
DocumentRoot "/myweb/vhosts/www3"
ServerName www3.qhdlink.com
</VirtualHost>
基於FQDN的虛擬主機配置示例:----------------------/etc/httpd/conf.d/vhosts-www4.conf
主機名成爲關鍵,IP和端口號都可以和前面一致。
# httpd -t ------檢驗語法
/etc/httpd/conf.d/vhosts-www4.conf
NameVirtualHost 172.16.69.1:80
<VirtualHost 172.16.69.1:80>
DocumentRoot "/myweb/vhosts/www4"
ServerName www4.qhdlink.com
</VirtualHost>
(14)、https的實現 ------------SSL會話是基於IP地址所創建的,【單IP地址】的主機上,僅可以創建一個https虛擬主機。
1)、爲httpd生成私鑰並簽發證書,步驟如下:
1).生成私鑰及證書請求
# mkdir /etc/httpd/ssl
# cd /etc/httpd/ssl
# (umask 077; openssl genrsa -out httpd.key 2048)
# openssl req -new -key httpd.key -out httpd.csr -days 3653
# scp httpd.csr 172.16.72.1:/tmp
2).在CA上籤發證書
CA]# openssl ca -in /tmp/httpd.csr -out certs/httpd.crt -days 3653
CA]# scp certs/httpd.crt 172.16.69.1:/etc/httpd/ssl
3).在httpd服務器上清除證書請求文件
# rm -f httpd.csr
2)、配置httpd -------------------支持使用SSL,確定已裝載mod_ssl模塊
# yum -y install mod_ssl
修改配置文件,修改公鑰和私鑰的安裝位置。
例:
/usr/lib64/httpd/modules/mod_ssl.so
/etc/httpd/conf.d/ssl.conf
<VirtualHost 172.16.69.1:443>
DocumentRoot "/myweb/vhosts/ssl"
ServerName www.qhdlink.com
SSLCertificateFile /etc/httpd/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
</VirtualHost>
(15)、user/group ------------指定以哪個用戶的身份運行httpd服務進程
格式:
User apache
Group apache
(16)、mod_deflate模塊 -----------------壓縮頁面,優化傳輸速度
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 ----------------壓縮級別,1~9,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-2.4
1、httpd-2.4具有特性如下:(10個)
(1)、MPM支持DSO機制,以模塊方式加載和卸載
(2)、event MPM 穩定,生產可用
(3)、支持異步IO機制,使得併發傳輸性能提高
(4)、支持沒模塊及每目錄單獨日誌級別定義
(5)、每請求相關的專用配置
(6)、增強版的表達式分析器
(7)、毫秒級的keepalive超時時長
(8)、基於FQDN的虛擬主機無需使用NameVirtualHost指令
(9)、支持用戶自定義變量
(10)、更低的內在開銷
2、httpd-2.4的新模塊(3個):
mod_proxy_fcgi
mod_proxy_scgi
mod_remoteip
3、安裝httpd-2.4 ---------centos6中需編譯安裝。
# yum install httpd
httpd的配置環境:主配置文件、模塊的配置文件、片段配置文件。
主配置文件 ---------------/etc/httpd/conf/httpd.conf
模塊配置文件 -------------/etc/httpd/conf.modules.d/*.conf
片段配置文件 -------------/etc/httdp/conf.d/*.conf
4、httpd-2.4配置特點(特有):
(1)、切換MPM -----------三個模塊只能有一個生效,不能讓多個MPM同時生效
編輯:/etc/httpd/conf.modules.d/00-mpm.conf
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
LoadModule mpm_worker_module modules/mod_mpm_worker.so
LoadModule mpm_event_module modules/mod_mpm_event.so
(2)、基於IP地址的訪問控制
不再支持Allow、Deny這樣的指令,改用Require指令完成訪問控制功能。
注意:【默認】情況下,httpd-2.4拒絕所有主機訪問。如果拒絕和允許同時要控制,則所有Require必須放在RequireAny容器中。
【允許和拒絕】同時要控制,則所有Require指令必須放在RequireAny容器中,具體解釋如下:
<RequireAny>
Require all denied
Require ip 172.16.69.1
</RequireAny>
<RequireAny>
Require all granted
Require not ip 172.16.69.1
</RequireAny>
<RequireAny>
Require all denied
Require host qhdlink.com
</RequireAny>
(3)、虛擬主機
即便使用基於FQDN方式構建的虛擬主機,也無需再使用NameVirtualHost指令。
<VirtualHost 172.16.72.1:80>
DocumentRoot "/myweb/vhosts/www"
ServerName www.qhdlink.com
<Directory "/myweb/vhosts/www"
Options None
AllowOverride None
Require all granted
</Directory>
<VirtualHost>
(4)、毫秒級的keepalive持久連接 ----------單獨創建文件/etc/httpd/conf.d/keepalive.conf
/etc/httpd/conf.d/keepalive.conf
KeepAlive On
KeepAliveTimeout 500ms --------------支持寫爲 500ms
MaxKeepAliveRequests 100
CentOS 7:httpd-2.4
啓動服務:Systemd Unit文件,/usr/lib/systemd/system/httpd.service
systemctl {start|stop|restart|reload|status} httpd[.service]
開機自動啓動或停止服務:
systemctl enable|disable httpd.service
5、httpd-2.4的程序環境
啓動服務:/usr/lib/systemd/system/httpd.service
# systemctl {start|stop|restart|reload|status} httpd[.service]
開機自啓:
# systemctl enable|disable httpd.service
在httpd2.4中,支持靜態模塊,每個MPM模型對應一個模塊。
配置文件:(多了一種)
/etc/httpd/conf.modules.d -------------額外的模塊專用的配置文件
/etc/httpd/conf/httpd.conf ----------主配置文件
/etc/httpd/conf.d/*.conf ----------輔助配置文件
/etc/httpd/conf.d/magic -----------實現MIME功能(多用途互聯網郵件擴展)
/etc/sysconfig/httpd -------------httpd服務器【啓動腳本】的配置文件
程序文件(二進制文件):---------------/usr/sbin/httpd
/usr/lib64/httpd/modules/mod_mpm_event.so
/usr/lib64/httpd/modules/mod_mpm_prefork.so
/usr/lib64/httpd/modules/mod_mpm_worker.so
/usr/sbin/apachectl -------------------服務控制命令
日誌文件:/var/log/httpd -----包括訪問日誌和錯誤日誌
默認站點的文檔和目錄:/var/www/html
模塊文件的路徑:/usr/lib64/httpd/modules -----------存在符號鏈接文件/etc/httpd/modules
6、curl命令 ------------文件傳輸工具
格式:curl [options] [URL...]
常用選項:
-A <string> ---------------設置用戶代理髮送給服務器
--basic ------------------使用HTTP基本認證
--tcp-nodelay ----------------使用TCP_NODELAY選項
-e <URL> ------------------來源網址
--cacert <file> ------------CA證書 (SSL)
--compressed --------------要求返回的壓縮格式
-H <line> ---------------自定義首部信息傳遞給服務器
-I ----------------------只顯示響應報文首部信息
--limit-rate <rate> --------------設置傳輸速度
-u <user[:password]> ------------設置服務器的用戶和密碼
-0 -------------使用http/1.0
7、elinks命令
格式:elinks [OPTION]... [URL]...
常用選項:
-dump ------------------------直接將URL的內容輸出至標準輸出
8、ab命令 ------------壓力測試工具
常用選項:
-c -------------併發連接數
-n -------------請求總數
-k -------------使用keepalive