http協定
URL:unifrom Resource Locator
URL方案:scheme
伺服器位址:ip:prot
資源路徑:
基本文法:
<scheme>://<user>:<password>@<host>/<path>:<params>?<query>#<frag>
http封包文法:
request封包:<method><request-URL><version>
<headers>
<entity-body>
response封包:
<version><status><reason-phrase>
<headers>
<entity-body>
method:請求方法,标明用戶端喜歡伺服器對資源執行的動作
GET,HEAD,POST
version:
HTTP/<major>.<minor>
status:三位的數字,如200,301,302,404,502;标記請求過程中發生的情況
reason-phrase:簡要描述狀态碼,原因短語
headers:每個請求或響應封包可包含任意個首部;每個首部都有一個名稱,後面跟一個冒号,而後跟上一個可選空格,接着是一個值;
entity-body:實體部分,請求時附加的資料和響應附加的資料:
method
GET:從伺服器擷取一個資源
HEAD:隻從伺服器擷取文檔的響應首部。不是擷取響應内容
POST:向伺服器發送要處理的資料
PUT:将請求的主體部分存儲在伺服器上
DELETE:請求删除伺服器上指定的文檔;
TRACE:追蹤請求到達伺服器中間經過的代理伺服器
OPTIONS:請求伺服器傳回對指定資源支援使用的請求方法;
協定檢視或分析工具;
tcpdump,tshark,wireshark
status:
1xx:100-101,資訊提示
2xx:200-206,成功
3xx:300-305,重定向
4xx:400-415,錯誤資訊,用戶端
5xx:500-505,錯誤資訊,伺服器端
html:編輯語言,超文本标記語言;
css:cascading style sheet:
js:javascript,
MIME:多用途網際網路郵件擴充。使得可以基于文本傳輸發送非文本資料
web資源:
靜态檔案:.jpg、.gif、.html、.txt、.js、.css、.MP3、.avi
動态檔案:.php、.jsp
http協定版本:
http/0.9:原始版本
http/1.0:第一個廣泛使用的版本支援:MIME
http/1.1:增強了緩存功能
spdy
http/2.0
一次完整的http請求過程:
1.建立處理連接配接:接收請求或者拒絕請求
2.接收請求
接收來自網絡的請求封包中對某個資源的一次請求的過程
并發通路響應模型
單程序I/O結構:啟動一個程序,而且一次隻處理一個,多個請求被串行響應
多程序I/O結構:并行啟動多個程序。每個程序響應一個請求
複用I/O結構:一個程序響應N個請求
多線程模型:一個程序生成N個線程,每個線程響應一個請求:
事件驅動:
複用的多程序I/O結構:啟動多個程序,每個程序啟動多個線程
3.處理請求:對請求封包進行解析,并擷取請求的資源及請求方法等相關資訊
4.通路資源
本地檔案系統路徑下某個路徑稱為DocRoot
/var/www/html/
web伺服器資源路徑映射方式;
1.docroot
2.alias
3.虛拟主機docroot
4.使用者家目錄docroot
5.建構響應封包
6.發送響應封包
7.記錄日志
http伺服器程式;
httpd(apache)
nginx
lighttpd
應用程式伺服器:
IIS
tomcat,jetty,jboss,resin
webshpere(ibm),weblogic(ba--oracle),oc4j(oracle)
https://www.netcraft.com/檢視各種應用市場佔有率
httpd的安裝配置和使用
httpd:apache
a patchy server=apache
ASF:apache software foundation
httpd的特性;
高度子產品化:core+modules
DSO:Dynamic Shard Object 動态共享對象
MPM;Multipath Processing modules 多路處理子產品
prefork(非常重要):多程序模型,每個程序響應一個請求;
一個主程序,負責生産N個子程序,子程序也稱為工作程序,每個子程序處理一個使用者請求,即使沒有使用者請求,也會預先生成多個空閑程序,随時等待請求到達。
最大不會超過1024個
worker:啟動多個程序,每個程序生成多個線程,每個線程響應一個使用者請求;
event:啟動多個線程,每個線程響應N個請求;
event-driven:事件驅動
httpd的功能特性:
豐富使用者認證:基本認證和摘要認證
CGI:原生支援perl CGI
虛拟主機:
基于端口、IP、主機名
反向代理:
負載均衡
使用者站點:
路徑别名:
支援第三方子產品
安裝方式:
rpm
編譯安裝
CentOS 6: httpd
配置檔案:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
服務腳本:
/etc/rc.d/init.d/httpd
腳本配置檔案:/etc/sysconfig/httpd
子產品目錄:
/etc/httpd/modules: 連結檔案
/usr/lib64/httpd/modules
主程式:
/usr/sbin/httpd: prefork
/usr/sbin/httpd.event: event
/usr/sbin/httpd.worker: worker
日志檔案目錄:
/var/log/httpd
access_log: 通路日志
error_log: 錯誤日志
站點文檔根目錄:
/var/www/html/images/a.jpg
http://www.test.com/images/a.jpg
常用配置:
1.修改監聽端口
Listen [IP:]PORT
Listen 80
Listen 172.16.6.14:8080
2.持久連接配接:連接配接建立後,每個資源擷取完成後不會斷開連接配接,而是繼續等待其他的請求完成;
如何斷開?
數量限制;100
時間限制:可以配置
副作用:對并發通路量較大的伺服器,持久連接配接功能會使有些請求得不到響應;
使用較短的持久連接配接時間;
httpd-2.4 支援毫秒級的持久連接配接
KeepAlive {On|Off}
MaxKeepAliveRequests 100
KeepAliveTimeout 15
測試:telnet 172.16.6.14 80
GET / HTTP/1.1
Host:172.16.6.14
3.MPM
prefork,worker,event
http-2.2不支援同時編譯多個子產品,所有隻能編譯時標明一個:rpm安裝包提供了三個二進制的程式檔案,分别用于實作對
不同MPM機制的支援:确認方法
ps aux | grep httpd
預設為 /usr/sbin/httpd,其使用prefork
檢視子產品清單的指令
httpd -l
Compiled in modules:
core.c
prefork.c
mod_so.c
http_core.c
檢視所有今天編譯和動态裝載的子產品
httpd -M
更換使用的httpd程式:
修改/etc/sysconfig/httpd
vi /etc/httpd/conf/httpd
prefork的配置
<IfModule prefork.c>
StartServers 8
MinSpareServers 5 --最小空閑程序數
MaxSpareServers 20
ServerLimit 256 --最多啟動多少個程序
MaxClients 256
MaxRequestsPerChild 4000
</IfModule>
worker的配置
<IfModule worker.c>
StartServers 4
MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
PV,UV
PV:page view
UV:user view
獨立ip量
4.DSO
子產品路徑可以使用相對位址;
相對于ServerRoot(/etc/httpd)指向的路徑而言;
存放路徑/etc/httpd/modules/
修改/etc/httpd/conf/httpd 中的 LoadModule
service httpd reload
5.定義‘Main’server的穩當頁面路徑
DocmentRoot
文檔路徑映射:
DocmentRoot指向的路徑為url路徑的起始位置;
6.站點通路控制
可基于兩種類型的路徑指明對哪些資源進行通路控制
檔案系統路徑:<Directory “”></Directory>
<file ""></file>
<fileMatch""></FileMatch>
URL路徑:
<Location ""></Location>
通路控制機制:
基于來源位址:
基于賬号:
7.Directory中“基于來源位址”實作通路控制
(1)Options
所有可用值:Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
None,All
Indexes:索引
FollowSymLinks:運作跟蹤符号連結檔案
(2)基于來源位址的通路控制
Order:檢查次序
Order allow ,deny
Order deny,allow
Allow from 運作IP
Deny from 拒絕IP
文本浏覽器
enliks -dump http://172.16.6.14
來源位址:
IP
NetAddr:
172.16
172.16.0.0
172.16.0.0/16
8.定義預設首頁
DirectoryIndex index.html index.html.var
9.日志設定
錯誤日志:
Errlog logs/error_log
loglevel warn
debug, info, notice, warn, error, crit,alert, emerg.
通路日志:
Customlog logs/access_log
LogFormat 定義日志格式
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
10.路徑别名
Alias /test/ "/var/test2/index.html"
11.設定預設字元集
AddDefaultCharset UTF-8
gbk,gbk2312 ,gb18030
12.基于使用者的通路控制
WWW-Authenticate:響應碼為401,拒絕客戶請求,并說明要求使用者提供賬号和密碼
認證;Authorization:用戶端使用者填入賬号和密碼後再次發送請求封包:認證通過,則伺服器發送響應資源;
認證類型:
basic:明文
digest:消息摘要
安全域:需要使用者認證後才能通路的路徑,應該通過名稱對其辨別,并用于告知使用者認證的原因
使用者賬号密碼存儲:文本檔案;SQL資料庫;ldap;nis
(1) 基于使用者進行認證
<Directory "/var/www/html/admin">
Options none
AllowOverride AuthConfig
AuthType Basic
AuthName "Admin Area."
#AuthBasicProvider file
AuthUserFile /etc/httpd/conf/.htpasswd
Require valid-user
</Directory>
Require valid-user: 檔案中所有使用者均可通路
Require user USERNAME, ...
(2) 提供認證檔案
htpasswd
-c: 如果此檔案事先不存在,則建立;注意,隻能在建立第一個使用者時使用;
-m:以md5的格式編碼存儲使用者的密碼資訊
-D:删除指定使用者
(3) 組認證
AuthGroupFile /etc/httpd/conf/.htgroup
Require group GROUP_NAME
組檔案:
組名:user1 user2 user3
13.虛拟主機
有三種是實作方案;
基于IP
為每個虛拟主機準備至少一個ip位址:實踐中很少使用
基于port
為每個虛拟主機準備至少一個專用port:實踐中很少使用
基于hostname
為每個虛拟主機準備至少一個專用hostname;
可混合使用上述三種方式中的任意方式
注意:一般虛拟主機不要與中心主機混用,是以要使用虛拟主機,先禁用中心主機;
禁用中心主機:注釋DocmentRoot
每個虛拟主機都有專用配置;
<VirtualHost IP:PORT>
ServerName
DocumentRoot
ServerAlias
ErrorLog
CustomLog
</VirtualHost>
配置檔案文法檢查:
httpd -t
service httpd configtest
配置示例:
基于IP:
<VirtualHost 172.16.100.7:80>
ServerName web1.test.com
DocumentRoot "/web/hosta"
<VirtualHost 172.16.100.8:80>
ServerName web2.test.com
DocumentRoot "/web/hostb"
基于port:
<VirtualHost 172.16.100.8:8080>
ServerName web3.test.com
DocumentRoot "/web/hostc"
基于hostname:
啟用NameVirtualHost 172.16.100.7:80
VirtualHost 172.16.100.7:80>
14.内置status頁面
啟用server-status
本文轉自阿倫艾弗森 51CTO部落格,原文連結:http://blog.51cto.com/perper/1958645,如需轉載請自行聯系原作者