http協議及Apache服務
http協議
什么是http?
http全稱為超文件傳輸協議(Hyper text transfer protocol),其是一個應用層協議,基于tcp的80端口,一般使用ASCII編碼傳輸。http協議是無狀態的(stateless),即服務器無法追蹤訪問者來源. 其可以使用cokie機制來追蹤同一個用戶.
Cookie的追蹤用戶的原理
第一次方訪問服務時,服務器發送一個cookie的小數據(隨機數,用來標識客戶端身份)
, 客戶端會將其保存下來,隨后 , 訪問同一個站點時,會把應用于此站點的cookie提交給服務器,從而服務器就能識別客戶端身份.
- 胖Cookie的實現原理
將用戶會話及狀態信息都保存至客戶端本地,在請求數據時,將狀態信息回傳至服務器 - 瘦cookie + session的實現原理
將用戶的狀態信息都保存至服務器端,并與相應客戶端的cookie令牌相對應,請求數據的時候,只是需向告訴服務器自己的cookie信息.
什么是超文本?
使用html(Hyper text mark language)編程語言編寫,被稱為文本標記語言。大致格式如下:
<html>
<head>
<title>Title</title>
</head>
<body>
<h1></h1>
<h2></h2>
<p>正文<a href="www.magedu.com/download.html">正文</a></p>
<h2></h2>
</body>
</html>
http協議版本
-
http 0.9
: 原型版本,功能簡單,只添加了GET的方法 -
http 1.0
:增加cache,MIME,Method,長連接等功能-
MIME
: multipurpose internet mail extesion(多用途郵件傳輸擴展協議,實現文本傳輸能添加非文本數據等附加),其原理為,將非文件數據在傳輸前重新編碼為文件格式再傳輸,接收方能夠用相反的方式將其重新還原的格式,同時能夠調用相應的程序打開此文件 -
常見的method
: 客戶端請求數據的方法:-
GET
: 從服務器獲取一個資源,通常不包含主體(entiy-body), 其為安全的方法 -
POST
: 向服務器發送服務器要處理的數據,通常包含主體(entiy-body),通常向服務器發送HTML的表單數據. -
HEAD
: 只從服務器獲取文檔的響應首部,不包含entiy-body,其為安全的方法. -
PUT
: 將請求的主體部分直接存儲在服務器上, 包含entiy-body,如果上傳的文檔已經存在,就用這個主體替代它. -
DELETE
: 請求刪除服務器上指定URL的文檔,通常服務器不會返回刪除成功或是失敗的消息通知.,不包含主體. -
TRACE
: 追蹤請求到達服務器中間經過的代理服務器,由服務器發回一個trace響應,通常不包含主體 -
OPTIONS
: 請求獲得可以在服務器上執行那些方法,或者對某些特殊資源支持那些方法,通常不包含主體
-
-
擴展方法
:-
lock
: 允許用戶鎖定資源,可以在編輯某個資源的時候將其鎖定,以防止別人同時對其進行修改 -
mkcol
: 允許用戶創建資源 -
copy
: 便于在服務器上復制資源 -
move
: 在服務器上移動資源
-
-
-
http 1.1
: 其增加了緩存功能,是目前被廣泛使用的標準 -
http 2.0
: 借用Google開放的html協議標準spdy,改進的版本
http的工作模式
-
http請求報文(http request):格式如下:
<method><request-URL><version> #獲取方法 請求的資源 http協議版本 <headers> #http協議首部 #空白行 <entity-body> #報文主體 #空白行
-
http響應報文(http response)
<version><status><reason-phrase> #http版本 狀態碼 <headers> #響應報文首部 #空白行 <entity-body> #空白行
報文示例:
-
請求報文
GET / HTTP/1.1 Host:www.zhenping.me Connection:keep-aliv #連接方式為長連接 #空白行
-
響應報文
HTTP/1.1 200 OK X-powered-By:PHP/5.2.17 # 說明是一個PHP動態網頁 Vary : Accept-Encodeing,cookie,User-Agent Cache-Control:max-age=3,must-revalidate Content-Encoding:gzip :網頁壓縮技術 Content-Length:6931 :網頁長度 #空白行
手動模擬一個http請求會話:
telnet 172.16.36.60 80
Trying 172.16.36.60...
Connected to www.a.com.
Escape character is '^]'.
GET /index.html HTTP/1.1 #輸入獲取方法 請求的url 使用的協議
host:www.a.com #指定主機
#兩次回車
HTTP/1.1 200 OK
Date: Tue, 12 Jan 2016 04:29:18 GMT
Server: Apache/2.2.15 (CentOS)
Last-Modified: Mon, 11 Jan 2016 11:41:51 GMT
ETag: "e000f-13-5290d6c437a91"
Accept-Ranges: bytes
Content-Length: 19
Connection: close
Content-Type: text/html; charset=UTF-8
<h1>www.a.com</h1>
Connection closed by foreign host.
http的狀態碼:
-
1XX
: 純信息(100-101)-
100
: continue,說明收到了請求的初始部分,請客戶端繼續 -
101
: switching protocols,說明服務器正在根據客戶端的指定,將協議切換成update首部所列的協議
-
-
2XX
: 成功類的狀態信息(200-206)-
200
: OK,請求沒有問題,實體的主體部分包含了所請求的資源
-
-
3XX
: 重定向類的信息(300-305)-
301
: 永久重定向 -
302
: 臨時重定向 -
304
: 內容沒有發生改變,使用緩存(客戶端發出了條件式請求,但服務器上的資源未發生改變,則通過)
-
-
4XX
: 客戶端錯誤類的信息(400-415)-
400
: 用于告知客戶端發送了一個錯誤的請求 -
401
: unauthorized,未授權,訪問前需要對用戶認證 -
403
: forbidden,請求服務器拒絕,服務器不想說明拒絕原因的時候使用 -
404
: not found, 不存在的文件 -
405
: Method not allowed , 發起的請求不支持的方法
-
-
5XX
: 服務器端錯誤類的信息-
500
: internal server error,服務器內部錯誤 -
502
: bad gateway ,無法連接至其父網關 -
504
: gateway timeout, 服務器連接超時
-
http報文首部
-
通用首部
-
Date
: 報文的創建時間 -
connection
: 連接方式,如keepalive, close. -
Via
: 顯示報文經過的中間節點(via本意為:經由) -
Cache-control
: 控制緩存 -
pragma
: 跟緩存相關,為了兼容1.0版本 -
MIME-version
: 給出發送端使用的MIME版本 -
trailer
: 如果報文采用分塊傳輸編碼方式,就可以用這個首部列出位于報文拖掛部分 -
Transfer-Encoding
: 告知接收端為了保證報文可選傳輸,對報文采用的編碼方式 -
Update
: 給出發送端可能想要"升級"使用新的版本或協議
-
-
請求首部
-
accept
: 通知服務器自己可接受的媒體類型 -
Accept-charset
: 接收的字符集 -
Accept-Encoding
: 接收內容編碼格式(如壓縮格式) -
Accept-Language
: 接收的語言 -
Accept-Length
:實體主體數據包含了多少字節數據 -
Accept-type
: 實體主體數據是什么類型 -
From
: 提供了客戶端用戶的Email地址 -
Client-ip
: 客戶端IP地址 -
Host
: 請求服務器名稱和端口號 -
Referer
: 包含了當前正在請求的資源上一級資源(由那跳轉過來的) -
User-agent
:瀏覽器類型-
條件式請求首部
-
Expect
: 允許客戶端列出某請求所要求的服務器行為 -
If-modified-since
: 請求的數據如果晚于此修改時間,服務器將發回新文件 -
If-unmodified-sinec
: 除非在某個指定日期之后資源沒有被修改過, 否則就限制這個請求 -
If-none-match
:本地緩存中存儲的文檔中的ETag標簽是否與服務端文檔的ETag不匹配(如果提供的實體標記與當前文檔的實體標記不相符,就獲取文檔) -
If-Match
: 如果實體標記與文檔當前實體標記相匹配,就獲取這份文檔 -
If-range
: 允許對文檔的某范圍進行條件請求 -
Range
: 如果服務器支持范圍請求,就請求資源的指定范圍
-
-
安全請求首部
-
authorization
: 向服務器發送認證信息,如帳號密碼 -
Cookie
: 客戶端向服務器發送cookie -
cooki2
: cookie的版本2
-
-
代理請求首部
-
proxy-authorization
: 向代理服務器認證 -
proxy-connection
: 與connection首部相同,但這個首部是在與代理建立連接時使用 -
max-forward
: 在通往源服務器的路徑上,將請求轉發給其它代理網關的最大次數---與trace方法一周使用
-
-
-
-
響應首部
-
信息性
-
Age
: 響應持續時長 -
Server
: 服務器程序軟件名稱和版本 -
date
: 服務器產生報文的時間 -
Content-length
: 實體主體數據包含了多少字節數據 -
Content-type
: 實體數據是什么類型 -
Location
: 重定向的連接 -
Public
: 服務器為其資源支持的請求方法列表 -
Retry-after
: 如果資源不可用的話,就在此時間或日期重試 -
Title
: 對HTML文檔來說,就是HTML文檔的源端給出標題 -
Warning
: 對原因短語中更詳細的一些警告報文
-
-
協商首部(某資源有多種表示方法時使用)
-
Accept-Ranges
: 服務器可接受的請求范圍類型 -
Vary
: 服務器查看的其它首部列表
-
-
安全響應
-
set-cookie
: 不是真正的安全首部,但隱含有安全功能,可以在客戶端設置一個令牌,以便服務器對客戶端進行標識 -
set-cookie2
: 與set-cookie類似 -
www-authenticate
: 來自服務器對客戶端的質詢認證表單 -
Porxy-Authenticate
: 來自代理的對客戶端的質詢列表
-
-
-
實體首部
-
Allow
: 列出對些實體可使用的請求方法 -
Location
: 告訴客戶端真正的實體位于何處,重定向時使用
-
-
內容首部
-
Content-base
: 解析主體中相對URL時使用的基礎URL -
Content-Encoding
: 內容的編碼格式 -
Content-Language
: 理解主體時最適宜使用的自然語言 -
Content-length
: 主體的長度或尺寸 -
Content-Location
: 實體真正所處位置 -
Content-md5
: 主體的MD5校驗和 -
Content-range
: 在整個資源中些實體表示的字節范圍 -
Content-Type
: 主體的對象類型-
緩存相關
-
ETag
: 實體的擴展標簽 -
Expires
: 實體的過期時間,實體不再有效,要從原始的源端再次獲取此實體的日期和時間 -
Last-Modified
: 最后一次修改時間和日期
-
-
-
-
擴展首部
什么是keep-alive?
其被稱之為長連接,由于http基于tcp協議通信,每個資源的請求都需要建立一個會話的虛擬通道,如果對于并發大的服務器來講,高頻的TCP會議建立和拆除將消耗更多的系統開銷,故長連接可以實現tcp協議通信建立后,在允許的機制下,進行多個資源請求獲取,當服務端設定的條件達到時,將斷開與客戶端的TCP連接。
keep-alive的控制機制
空閑超時機制(httpd2.2版本以秒為單位,httpd2.4可以以毫秒為單位)
-
請求次數限制
注意:在高并發的應用場景中,空閑超時機制將會導致后面用戶的請求進行掛起操作,以導致訪問慢的情況。故時間需要測試而設定,并且對請求次數進行設定,這樣可以避免高并發的情況中,用戶的請求長時間連接,而新的用戶請求一直得不到處理。 空閑超時機制在低并發的應用場景中, 可以加速用戶的訪問請求。
實現步驟
client發起請求并與server建立Tcp的連接,進行數據傳輸,當client的資源請求完成后,通知服務端斷開連接,服務端并予ack報文,并不發送fin報文,此時連接將處理半連接狀態,服務器會檢查httpd的keep-alive參數設置的兩個條件:1、如果半連接空閑時間超出keep-alive設定的值,將主動斷開連接 ;2、當客戶端請求的資源次數達到httpd的參數設置,也將會主動斷開連接。
客戶端瀏覽器加速訪問的機制
- 1、多線程請求,同時打開不同的資源
- 2、靜態內容進行緩存
web資源的類型:
-
1、靜態資源
- 無需服務器做出額外處理,一般內容格式為:
- jpg,png,gif,html,txt,js,css,mp3,avi等
- 無需服務器做出額外處理,一般內容格式為:
-
2、動態資源
- 服務端需要通過執行程序做出處理,并發送給客戶端程序的運行結果,一般格式為:
- php,jsp
- 服務端需要通過執行程序做出處理,并發送給客戶端程序的運行結果,一般格式為:
服務端完整的HTTP請求處理過程
- 1、建立和處理連接(接收請求或拒絕請求)
- 2、接收請求:通過網絡讀取HTTP請求報文
- 3、處理請求:解析請求報文并做出相應的動作
- 4、訪問資源:訪問請求報文中相應的資源
- 5、構建響應報文:使用正確的首部生成http響應報文
- 6、發送響應:向客戶端發送生成的響應報文
- 7、記錄日志:當已經完成的http事務記錄進日志文件
HTTP的訪問歸類:
- 1、PV(Page view),頁面的訪問量,其在訪問日志中的URL字段中第二個位置
- 2、UV(User view),用戶的訪問量,以IP訪問數量來統計,其在訪問日志中的第一個字段
服務端接收請求的模型
1、單進程I/O模型
啟動一個進程處理用戶請求,這意味著,一次只能處理一個請求,多個請求被串形響應
2、多進程I/O模型
每個請求都有一個獨立的進程來響應,并行啟動多個進程,每個進程響應一個請求
3、復用的I/O模型(必須要有多路IO管理機制)
- 1、多線程模式
- 一個進程生成N個線程,一個線程處理一個請求,其能生成的線程也是有限定的
- 2、事件驅動
- 一個進程直接響應N個請求,不用啟動線程
4、利用的多進程I/O結構
啟動M個進程,每個進程生成N個線程
http服務的實現軟件
-
1、服務程序
httpd
nginx
lighttpd
thttpd
-
2、應用程序服務器
-
IIS
:(windwos .net) -
tomcat
:(apache,JSP,open source) -
websphere
: (IBM,JSP,commodity) -
weblogic
: (Oracle,JSP,commodity) -
JBoos
: (readhat,open source,commidity,核心是tomcat)
-
httpd服務程序
httpd簡介
httpd是apache基金會(ASF:apache foundation)維護,其官網為httpd.apache.org,其基金會下有眾多的著名軟件。
http的版本
- httpd 1.3
- httpd 2.0
- httpd 2.2 (Centos 6平臺的默認版本,其event模型仍為測試模型)
- httpd 2.4(Centos 7平臺的默認版本,目前最新穩定版本,對event可用于生產環境中)
httpd的功能特性
1、CGI(Common Gateway Interface)
-
2、虛擬主機
IP
PORT
FQDN
3、支持反向代理
4、負載均衡
5、路徑別名
-
6、豐富的用戶認證機制
-
basic
:基本身份認證 -
digest
: 摘要身份認證
-
7、支持第三方模塊
8、高度模塊化
9、動態模塊加載(DSO,Dynamic shared object)
-
10、多路處理模塊(MPM,Multipath processing modules)
-
prefork
: 多進程模型,每個進程響應一個請求,特性如下:-
工作模型
- a) 有一個主進程,其負責生成子進程及回收子進程,負責創建套接字,負責接收請求,并將其派發給某子進程處理
- b) 多個子進程,每個子進程處理一個請求,主進程不負責接收請求
- c) 會預先生成幾個空置的進程,隨時等待用于響應用戶請求,其預先定義最大空閑和最小空閑
-
-
worker
: 多進程多線程模型,每個線程處理一個用戶請求,特性如下:-
工作模型
- a) 有一個主進程,其負責生成子進程及回收子進程,負責創建套接字,負責接收請求,并將其派發給某子進程處理
- b) 每個子進程負責生成多個線程,每個線程負責響應用戶請求
-
-
event
: 事件驅動機制,事件驅動模型,多進程模型,每個進程響應多個請求-
工作模型
- a) 有一個主進程,其負責生成子進程及回收子進程,負責創建套接字,負責接收請求,并將其派發給某子進程處理
- b) 子進程基于事件驅動機制直接響應多個請求
-
-
11、支持https協議,由
mod_ssl
模塊提供-
12、支持用戶認證
簡單認證
摘要認證
基于表單認證
-
13、訪問控制機制
基于IP或主機名的訪問控制
基于每目錄的訪問控制
HTTPD的配置文件
1、httpd-2.2的版本(Centos 6)
- 配置文件
- /etc/httpd/conf/httpd.conf
- /etc/httpd/conf.d/*.conf
- 服務腳本
- /etc/rc.d/init.d/httpd
- 腳本配置文件
- /etc/sysconfig/httpd
- 主程序文件
- /usr/sbin/httpd
- /usr/sbin/httpd.event
- /usr/sbin/httpd/worker
- 日志文件
- /var/log/httpd/access_log
- /var/log/httpd/error_log
- 站點文檔
- /var/www/html
- 模塊文件路徑
- /usr/lib64/httpd/modules
- 網站文件存放路徑
- /var/www/html : 靜態網頁存放路徑
- /var/www/cgi-bin : 動態網頁存放路徑
- 服務控制和啟動
- service httpd on|off
- service {start|stop|restart|status|configtest|reload} httpd
2、httpd-2.4的版本(Centos 7)
- 配置文件
- /etc/httpd/conf/httpd.conf
- /etc/httpd/conf.d/*.conf
- /etc/httpd/conf.modules.d/*.conf : 模塊相關的配置文件
- /usr/lib/systemd/system/httpd.service
- 主程序文件
- /usr/sbin/httpd : 2.4版本支持MPM的動態切換
- 日志文件
- /var/log/httpd/access_log
- /var/log/httpd/error_log
- 站點文檔
- /var/www/html
- 模塊文件路徑
- /usr/lib64/httpd/modules
- 網站文件存放路徑
- /var/www/html : 靜態網頁存放路徑
- /var/www/cgi-bin : 動態網頁存放路徑
- 服務控制
- systemctl enable | disable httpd.service
- systemctl {start|stop|restart|status} httpd.service
HTTPD的進程
1、主進程的屬主和屬組
root:root
2、子進程或工作進程
apache:apache
HTTPD主配置文件
主配置文件的選項
- 1、全局配置段:影響apache的全局配置選項
- 2、中心主機配置段
- 3、虛擬主機配置段
主配置文件的格式
-
指令 + 值
- 指令:不區分大小寫
- 值:在為路徑時,是否區分大小寫,取決于文件系統
常用配置選項
-
1、
修改監聽的IP和PORT
- 格式:Listen [IP:] PORT
a) 省略IP表示0.0.0.0
-
b) Listen指令可復現出現多次
Listen 80 Listen 8080 Listen 172.16.0.1:80
c) 修改監聽的socket,中有重啟服務進程方可有效
- 格式:Listen [IP:] PORT
-
2、持久連接功能
- TCP連接建立后,每個資源獲取完成后,不會斷開連接,而是繼續等待其它資源請求的進行,如何斷開 ?
a) 數量限制
-
b) 時間限制
KeepAlive on | off KeepAlive Timeout 15 MaxKeepAliveRequests 100 注意:副作用:對并發訪問量較大的服務器,長連接機制會使得后續某些請求無法得到正常響應。折衷處理:使用較短的持久連接時長,以及較少的請求數量
- TCP連接建立后,每個資源獲取完成后,不會斷開連接,而是繼續等待其它資源請求的進行,如何斷開 ?
-
3、MPM
修改2.2版本中的MPM機制,需要修改/etc/sysconfig/httpd中,啟用HTTPD=/usr/sbin/httpd.worker或者指定其它的MPM模塊,需要重啟服務方可生效。-
prefork
的配置<IfModule prefork.c> StartServers 8 #啟動時啟動多少個進程 MinSpareServer 5 #最少空閑進程 MaxSpareServers 20 #最大空閑進程 ServerLimit 256 #最大啟動多少個進程數,可大于maxclients MaxClients 256 #最大進程在線數量,不能大于serverlimit MaxRequestsPerChild 4000 #表示每個進程最多處理多少個請求,達到數量時由主進程銷毀 </IfModule>
-
worker
的配置<IfModule worker.c> StartServers 4 MaxClients 300 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 #0表示不啟用 </IfModule>
-
-
4、配置指定實現模塊加載
-
1、定義格式
LoadModule <mod_name> <mode_path>
2、使用相對路徑,是相對于serverroot,默認為/etc/httpd
-
-
5、定義中心主機"Main server"的文檔頁面路徑
-
1、定義格式
DocumentRoot "/var/www/html"
-
2、文檔路徑映射
- DocumentRoot指向的路徑為URL路徑的起始位置,相當于站點URL的根路徑
-
-
6、站點訪問控制定義方法
-
1、基于文件系統路徑
方法一: <Directory "/PATH"> ...... </Directory> 方法二 <File "/PATH"> ...... </File> 方法二 <FileMatch "PATTERN"> ..... </FileMatch> #以模式匹配,需要啟動正則表達式引擎,其效率低
-
2、基于URL
方法一: <Location "/"> ...... </Location> 方法二: <LocationMatch "/"> ...... </LocationMatch>
-
-
7、站點訪問控制設定
-
1、基于IP方式實現控制
<Location /server-status> SetHandler server-status order deny,allow #定義生效次序 deny from all allow from 172.16.249.148 </Location> ##注意: 來源地址定義格式,可如下方式: 172.16 172.16.0.0 172.16.0.0/16 172.16.0.0/255.255.255.0
-
2、基于用戶名和密碼方式實現控制
<Directory "/www/b.com/htdocs"> Options None #可以定義多個,使用空格分開,None表示不定義 AllowOverride None #是否允許覆蓋,覆蓋面面order或者auth的認證,None表示不定義 AuthType Basic #認證類型 AuthName "Please Enter your username and password." #認證提示 AuthUserFile "/etc/httpd/conf/.htpass" #用戶和密碼存放路徑 AuthGroupFile "/etc/httpd/conf/.htpass_group" #用戶組的定義存放路徑 Require group mygrp #允許mygrp組中的用戶 或者只是定義用戶,不定義組 AuthType Basic #認證類型 AuthName "Please Enter your username and password." #認證提示 AuthUserFile "/etc/httpd/conf/.htpass" #用戶和密碼存放路徑 Require user zhenping #只允許用戶zhenping登錄,多個用戶可以使用空格隔開 </Directory> 注意1:如果需要定義的所有用戶都可以訪問,需使用: Require valid-user 注意2:認證方式有兩種: basic :明文 digest : 消息摘要認證 注意3:用戶及密碼的存儲方式 文本文件 SQL數據庫 Ldap目錄服務 注意4:組文件定義格式 GROUP_NAME: group1 group2 注意4:用戶名的密碼需要使用htpasswd工具來創建,如下格式: htpasswd -c -m /etc/httpd/conf/.htpasswd tom Options: -c : 自動創建加密文件,一般用于第一次 -D : 刪除用戶 -m : 以MD5格式加密 -s : 以sha格式加密
-
Options的各參數說明:
Index:定義索引,索引是指列出目錄下所有的文件 None:不支持任何選項 FollowSymLinks:跟隨符號連接,意味訪問符號連接所指向的文件,會降低服務器的性能 Includes:允許執行服務器端包含(SSI),此方式不安全 SymLinksifOwnerMatch:允許執行符號連接,但屬主必須與執行httpd進程的屬主相匹配,不 開放 ExecCGI:允許執行CGI腳本 MultiViews:判斷客戶端使用的語言,并顯示相應語言的網頁,一般比較消耗資源 ALL:啟用所有選項
-
-
-
8、定義站點主頁
-
1、定義格式
DocumentRoot "/www/htdocs"
-
2、未定義的錯誤提示
- 404 Not Found錯誤
- 顯示目錄下的所有文件
-
-
9、定義路徑別名
- 1、定義格式
-
alias /URL/ "/PATH"
alias /download/ "/rpms/pub" #后者為文件系統路徑
-
- 1、定義格式
-
10、定義默認字符集
-
1、定義格式
AddDefaultCharset UTF8 可支持的中文字符集:GBK,GB2312,GB18030
-
-
11、日志設定
-
1、錯誤日志的定義格式
ErroLog logs/error_log LogLevel warn ##日志等級為: Debug Info notice Warn Error Crit Alert Emerg
-
2、訪問日志的定義格式
CustomLog logs/access_log combined #combined為日志格式 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent #其宏定義的格式: %h :客戶端的IP地址 %l :遠程登陸的用戶名,通常為一個減號“-” %u :遠程登陸的用戶(from auth),非登陸訪問時,其為一個減號 %t :服務器收到請求的時間,standerd english time %r :First line of request,表示請求報文的首先,記錄了此次請求的:方法,URL,協議版本 %>s :響應的狀態碼 %b :響應報文的大小,單位字節,不包含http請求首部 %{Referer}i : 請求報文中首部"referer"的值,即從那個頁面中的超連接跳轉至當前頁面 %{User-Agent}i : 請求報文中首部"User-Agent"的值,即發出請求的應用程序,瀏覽器類型
-
-
12、虛擬主機(如果需要虛擬主機的方式,需先注釋中心主機的DocumentRoot)
- 1、實現方式
-
基于IP
<VirtualHost 192.168.0.1:80> ...... </VirtualHost> <VirtualHost 192.168.0.2:80> ...... </VirtualHost>
-
基于PORT
<VirtualHost 192.168.0.1:80> ...... </VirtualHost> <VirtualHost 192.168.0.1:8080 ...... </VirtualHost>
-
基于FQDN
<VirtualHost 192.168.0.1:80> servername www.a.com ...... </VirtualHost> <VirtualHost 192.168.0.1:80> servername www.b.com ..... </VirtualHost> 注意:如果需要在2.2版本及以下,需要使用NameVirtualHost IP:PORT來先定義,2.4以后版本不需要
-
- 1、實現方式
-
13、status頁面
1、啟用加載對應的模塊 LoadModules status_module modules/mod_status.so 啟用server-status容器選項 <Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from .example.com </Location> 訪問 www.a.com/server-status
-
14、域名別名
-
1、定義格式
serveralias www.b.com www.a.com #將www.b.com定義為www.a.com
-
httpd的子命令
-
httpd -l
: 查看httpd所支持的MPM類型 -
httpd -t
: 測試主配置文件是否有語法錯誤 -
httpd -M
: 查看http的加載模塊
========
15 Curl命令
Curl是基于URL語法在命令行下工作的文件傳輸工具,它支持FTP,FTPS,HTTP,HTTPS,GOPHER,TELNET,DICT,FILE及LDAP等協議,curl支持https認證,并且支持HTTP的POST,PUT等方法,FTP上傳,kerberos認證,HTTP上傳,代理服務器,cookies,用戶名/密碼認證,下載文件斷點續傳,上載文件斷點續傳,http代理服務器管道(proxy tunneling),甚至它還支持IPv6,socket5代理服務器,通過http代理服務器上傳文件到FTP服務器等,功能十分強大.
-
用法:
- curl [options] [URL....]
-
常用選項
-
-A / --user-agent <string>
: 設置用戶代理發送給服務器 -
--base
: 使用http基本認證 -
--tcp-nodelay
: 使用tcp_nodelay選項 -
-e / --referer <URL>
: 來源網址 -
--cacert <file>
: CA證書(SSL) -
--compressed
: 要求返回是壓縮的格式 -
-H / --header <line>
: 自定義首部信息傳遞給服務器 -
-I / --head
: 只顯示響應報文首部信息 -
--limit-rate <rate>
: 設置傳輸速度 -
-u / --user <user[:password]>
: 設置服務器的用戶和密碼 -
-0 / --http1.0
: 使用HTTP1.0
-
16 apache的用戶及組
指定以哪個用戶的身份運行httpd服務進程
- user apache
- group apache
如果需要使用root權限執行操作時,需要使用SUexec命令調用相關操作
17 使用mod_deflate模塊壓縮頁面優化傳輸速度
- 適用場景
- 節約帶寬,額外消耗CPU,同時可能有些老瀏覽器不支持
- 壓縮適于壓縮的資源,例如文本文件
####設置一個過濾器,名稱為DEFLATE ,名稱用于后面設置參數引用
SetOutputFilter DEFLATE
# mod_deflate configuration
####設置指定那些類型需要壓縮
# Restrict compression to these MIME types
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
####設置壓縮級別
# Level of compression (Highest 9 - Lowest 1)
DeflateCompressionLevel 9
####排除老的瀏覽器
# Netscape 4.x has some problems.
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
18 配置https
-
配置https的注意事宜
- yum安裝httpd服務情況:
需要安裝mod_ssl模塊,其安裝后會在/etc/httpd/conf.d/目錄下生成ssl.conf文件,需要其配置文件中加載相應的模塊文件及配置
- 編譯安裝httpd服務的情況:
要編譯的時候可以使用 --enable-ssl選項啟用ssl功能,只需要在httpd的配置文件中, 加載相應的ssl模塊及配置相關ssl參數
-
SSL會議的簡化過程
- 客戶端發送可供選擇的加密方式,并向服務器請求證書
- 服務器端發送證書以及選定的加密方式給客戶端
- 客戶端取得證書并先進行證書驗證
- 驗證證書的合法性,用CA的公鑰解密證書上數字簽名
- 驗證證書的內容合法性:完整性驗證
- 檢查證書的有效期限
- 檢查證書是否被吊銷
- 證書中擁有者的名字,與訪問的目標主機是否一致
- 客戶端生成臨時會議密碼(對稱密鑰),并使用服務器端的公鑰加密此數據發送給服務器,完成密鑰交換
- 服務器用此密碼加密用戶請求的資源,響應給客戶端
-
https配置實例
yum install httpd -y
CA
cd /etc/pki/CA/
[root@Centos7 CA]# ls
certs crl newcerts private
[root@Centos7 CA]# cd private/
[root@Centos7 private]# (umask 077; openssl genrsa -out cakey.pem 2048)
Generating RSA private key, 2048 bit long modulus
.........................................+++
........................+++
e is 65537 (0x10001)
[root@Centos7 private]#
[root@Centos7 CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:CN
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:Mageedu
Organizational Unit Name (eg, section) []:Ops
Common Name (eg, your name or your server's hostname) []:ca.mageedu.com
Email Address []:admin@mageedu.com
[root@Centos7 CA]# ls
cacert.pem certs crl newcerts private
[root@Centos7 CA]# touch index.txt serial
[root@Centos7 CA]# echo 01 > serial
[root@Centos7 CA]# ls
cacert.pem certs crl index.txt newcerts private serial
http server
root@Centos7 ~]# cd /etc/httpd/
[root@Centos7 httpd]# ls
conf conf.d conf.modules.d logs modules run
[root@Centos7 httpd]# mkdir ssl
root@Centos7 ssl]# (umask 077;openssl genrsa -out httpd.key 2048)
Generating RSA private key, 2048 bit long modulus
...+++
.................................................................................+++
e is 65537 (0x10001)
[root@Centos7 ssl]# openssl req -new -key httpd.key -out httpd.csr -days 365
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:CN
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:Mageedu
Organizational Unit Name (eg, section) []:Ops
Common Name (eg, your name or your server's hostname) []:www.zhenping.com
Email Address []:admin@zhenping.com
[root@Centos7 ssl]# scp httpd.csr root@172.16.36.71:/tmp
CA Server
[root@Centos7 CA]# openssl ca -in /tmp/httpd.csr -out certs/httpd.crt -days 365
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Jan 17 23:42:58 2016 GMT
Not After : Jan 16 23:42:58 2017 GMT
Subject:
countryName = CN
stateOrProvinceName = CN
organizationName = Mageedu
organizationalUnitName = Ops
commonName = www.zhenping.com
emailAddress = admin@zhenping.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
61:7F:29:8A:68:A6:70:C2:F2:0E:49:15:D7:DD:4D:02:BF:EF:92:6A
X509v3 Authority Key Identifier:
keyid:18:F8:A6:71:FB:05:F3:0C:D3:56:9C:90:78:F1:4D:B5:0E:EC:51:5F
Certificate is to be certified until Jan 16 23:42:58 2017 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
[root@Centos7 CA]# scp certs/httpd.crt root@172.16.36.70:/etc/httpd/ssl
The authenticity of host '172.16.36.70 (172.16.36.70)' can't be established.
ECDSA key fingerprint is f7:6e:2f:38:57:8e:8c:0b:12:74:cc:af:44:82:88:17.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.16.36.70' (ECDSA) to the list of known hosts.
root@172.16.36.70's password:
httpd.crt 100% 4606 4.5KB/s 00:00
httpd server
vim /etc/httpd/conf.d/ssl.conf
DocumentRoot "/var/www/html"
ServerName www.zhenping.com
SSLCertificateFile /etc/httpd/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
http的配置實例:
root@Centos6-ser1 ~]# cat /etc/httpd/conf.d/vhost.conf
LoadModule status_module modules/mod_status.so
<Location /server-status>
SetHandler server-status
order deny,allow
deny from all
allow from 172.16.249.148
</Location>
namevirtualhost 172.16.36.60:80
<VirtualHost 172.16.36.60:80>
servername wwww.a.com
Documentroot "/www/a.com/htdocs/"
alias /download "/www/a.com/htdocs/file"
Errorlog /www/log/a.com/error.log
LogLevel warn
Customlog /www/log/a.com/access.log combined
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
<Directory "/www/a.com/htdocs/file/">
Options Indexes
AllowOverride None
AuthType Basic
AuthName "Please enter you username and password...."
AuthUserFile "/etc/httpd/conf/.htpass"
Require user zhenping
</Directory>
</virtualhost>
<virtualhost 172.16.36.60:80>
servername www.b.com
documentroot "/www/b.com/htdocs"
Errorlog /www/log/b.com/error.log
LogLevel warn
Customlog /www/log/b.com/access.log combined
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
<Directory "/www/b.com/htdocs">
Options None
AllowOverride None
AuthType Basic
AuthName "Please Enter your username and password."
AuthUserFile "/etc/httpd/conf/.htpass"
AuthGroupFile "/etc/httpd/conf/.htpass_group"
Require group mygrp
</Directory>
</virtualhost>
<virtualhost 172.16.36.60:80>
servername www.c.com
documentroot "/www/c.com/htdocs"
ErrorLog /www/log/c.com/error.log
LogLevel warn
CustomLog /www/log/c.com/access.log combined
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
<Directory "/www/c.com/htdocs">
Options None
AllowOverride None
order deny,allow
deny from all
allow from 172.16.249.148
</Directory>
</virtualhost>