天天看點

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>

<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,如需轉載請自行聯系原作者