天天看點

httpd

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>

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/p_w_picpaths/a.jpg

http://www.test.com/p_w_picpaths/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

上一篇: HTTPD
下一篇: httpd

繼續閱讀