第五章:Web服务器,第1张

51各种形状和尺寸的Web服务器

Web服务器会对HTTP请求进行处理并提供响应。术语“Web服务器”可以用来表示Web服务器的软件,也可以用来表示提供Web页面的特定设备或计算机。

Web服务器有着不同的风格、形状和尺寸。有普通的10行Perl脚本的Web服务器、50MB的安全商用引擎以及极小的卡上服务器。但不管功能有何差异,所有的 Web服务器都能够接收请求资源的 HTTP请求,将内容回送给客户端(参见图1-5)。

511Web服务器的实现

Web服务器实现了HTTP和相关的TCP连接处理。负责管理Web服务器提供的资源,以及对Web服务器的配置、控制及扩展方面的管理。

Web服务器逻辑实现了HTTP 协议、管理着Web资源,并负责提供Web服务器的管理功能。Web服务器逻辑和操作系统共同负责管理TCP连接。底层操作系统负责管理底层计算机系统的硬件细节,并提供了TCP/IP网络支持、负责装载Web资源的文件系统以及控制当前计算活动的进程管理功能。

53实际的Web服务器会做些什么

例5-1显示的 Perl服务器是一个Web服务器的小例子。最先进的商用Web服务器要比它复杂得多,但它们确实执行了几项同样的任务,如图5-3所示。

(1)建立连接一—接受一个客户端连接,或者如果不希望与这个客户端建立连接,就

将其关闭。

(2)接收请求——从网络中读取一条HTTP请求报文。(3)处理请求——对请求报文进行解释,并采取行动。(4)访问资源-———访问报文中指定的资源。

(5)构建响应——创建带有正确首部的 HTTP响应报文。(6)发送响应——将响应回送给客户端。

(7)记录事务处理过程—-将与已完成事务有关的内容记录在一个日志文件中。

54第一步——接受客户端连接

如果客户端已经打开了一条到服务器的持久连接,可以使用那条连接来发送它的请求。否则,客户端需要打开一条新的到服务器的连接(回顾第4章,复习一下HTTP的连接管理技术)。

541处理新连接

客户端请求一条到Web服务器的TCP连接时,Web服务器会建立连接,判断连接的另一端是哪个客户端,从TCP连接中将IP地址解析出来。'一旦新连接建立起来

并被接受,服务器就会将新连接添加到其现存Web服务器连接列表中,做好监视连接上数据传输的准备。

Web服务器可以随意拒绝或立即关闭任意一条连接。有些Web服务器会因为客户端IP地址或主机名是未认证的,或者因为它是已知的恶意客户端而关闭连接。Web服务器也可以使用其他识别技术。

542客户端主机名识别

可以用“反向 DNS”对大部分Web服务器进行配置,以便将客户端IP地址转换成客户端主机名。Web服务器可以将客户端主机名用于详细的访问控制和日志记录。但要注意的是,主机名查找可能会花费很长时间,这样会降低Web事务处理的速度。很多大容量Web服务器要么会禁止主机名解析,要么只允许对特定内容进行解析。

可以用配置指令HostnameLookups启用Apache的主机查找功能。比如,例5-2中的Apache配置指令就只打开了HTML和CGI资源的主机名解析功能。

例5-2配置Apache,为 HTML和CGI资源查找主机名

HostnameLookups off

<Files ~" - 《html |htmlcgi)$">

HostnameLookups on

</Files>

55第二步—接收请求报文

连接上有数据到达时,Web服务器会从网络连接中读取数据,并将请求报文中的内容解析出来(参见图5-5)。

解析请求报文时,Web服务器会:

·解析请求行,查找请求方法、指定的资源标识符(URI)以及版本号,3各项之

间由一个空格分隔,并以一个回车换行(CRLF)序列作为行的结束,“

·读取以CRLF结尾的报文首部;

检测到以CRLF结尾的、标识首部结束的空行(如果有的话)﹔

·如果有的话(长度由content-Length首部指定),读取请求主体。

解析请求报文时,Web服务器会不定期地从网络上接收输入数据。网络连接可能随时都会出现延迟。Web服务器需要从网络中读取数据,将部分报文数据临时存储在内存中,直到收到足以进行解析的数据并理解其意义为止。

551 报文的内部表示法

有些Web服务器还会用便于进行报文操作的内部数据结构来存储请求报文。比如,数据结构中可能包含有指向请求报文中各个片段的指针及其长度,这样就可以将这些首部存放在一个快速查询表中,以便快速访问特定首部的具体值了(参见图5-6)。

552连接的输入/输出处理结构

高性能的 Web服务器能够同时支持数千条连接。这些连接使得服务器可以与世界各地的客户端进行通信,每个客户端都向服务器打开了一条或多条连接。某些连接可能在快速地向Web服务器发送请求,而其他一些连接则可能在慢慢发送,或者不经常发送请求,还有一些可能是空闲的,安静地等待着将来可能出现的动作。

因为请求可能会在任意时刻到达,所以Web服务器会不停地观察有无新的Web请求。不同的Web服务器结构会以不同的方式为请求服务,如图5-7所示。

·单线程Web服务器(参见图5-7a)

单线程的Web服务器一次只处理一个请求,直到其完成为止。一个事务处理结束之后,才去处理下一条连接。这种结构易于实现,但在处理过程中,所有其他连接都会被忽略。这样会造成严重的性能问题,只适用于低负荷的服务器,以及type-o-serve这样的诊断工具。

·多进程及多线程Web服务器(参见图5-7b)

多进程和多线程Web服务器用多个进程,或更高效的线程同时对请求进行处理。3可以根据需要创建,或者预先创建一些线程/进程。°有些服务器会为每条连接分配一个线程/进程,但当服务器同时要处理成百、上千,甚至数以万计的连接时,需要的进程或线程数量可能会消耗太多的内存或系统资源。因此,很多多线程Web服务器都会对线程/进程的最大数量进行限制。

·复用I/O的服务器(参见图5-7c)

为了支持大量的连接,很多Web服务器都采用了复用结构。在复用结构中,要同时监视所有连接上的活动。当连接的状态发生变化时(比如,有数据可用,或出现错误时),就对那条连接进行少量的处理,处理结束之后,将连接返回到开放连接列表中,等待下一次状态变化。只有在有事情可做时才会对连接进行处理,在空闲连接上等待的时候并不会绑定线程和进程。

·复用的多线程Web服务器(参见图5-7d)

有些系统会将多线程和复用功能结合在一起,以利用计算机平台上的多个CPU多个线程(通常是一个物理处理器)中的每一个都在观察打开的连接(或打开的连接中的一个子集),并对每条连接执行少量的任务。

56第三步———处理请求

一旦Web服务器收到了请求,就可以根据方法、资源、首部和可选的主体部分来对请求进行处理了。

有些方法(比如POST)要求请求报文中必须带有实体主体部分的数据。其他一些方法(比如OPTIONS)允许有请求的主体部分,也允许没有。少数方法(比如GET)禁止在请求报文中包含实体的主体数据。

这里我们并不对请求的具体处理方式进行讨论,因为本书其余大多数章节都在讨论这个问题。

57第四步——-对资源的映射及访问

Web 服务器是资源服务器。它们负责发送预先创建好的内容,比如HTML页面或JPEG ,以及运行在服务器上的资源生成程序所产生的动态内容。

571 docroot

Web服务器支持各种不同类型的资源映射,但最简单的资源映射形式就是用请求URI作为名字来访问Web服务器文件系统中的文件。通常,Web服务器的文件系统中会有一个特殊的文件夹专门用于存放Web内容。这个文件夹被称为文档的根目录(document root,或docroot)。Web服务器从请求报文中获取URI,并将其附加在文档根目录的后面。

在图5-8中,有一条对/specials/saw-bladegif 的请求到达。这个例子中Web服务器的文档根目录为/us/local/httpd/files。Web服务器会返回文件/usr/local/httpd/files/specials/saw-bladegif。

在配置文件httpdconf中添加一个 DocumentRoot行就可以为Apache Web服务器设置文档的根目录了:

DocumentRoot /usr/ local/httpd/files

服务器要注意,不能让相对URL退到docroot之外,将文件系统的其余部分暴露出来。比如,大多数成熟的Web服务器都不允许这样的URI看到Joe的五金商店文档根目录上一级的文件:

http://wwwjoes-hardwarecom/

583重定向

Web服务器有时会返回重定向响应而不是成功的报文。Web服务器可以将浏览器重定向到其他地方来执行请求。重定向响应由返回码3XX说明。Location响应首部包含了内容的新地址或优选地址的URI。重定向可用于下列情况。

·永久删除的资源

资源可能已经被移动到了新的位置,或者被重新命名,有了一个新的URL。Web服务器可以告诉客户端资源已经被重命名了,这样客户端就可以在从新地址获取资源之前,更新书签之类的信息了。状态码301 Moved Permanently就用于此类重定向。·临时删除的资源

如果资源被临时移走或重命名了,服务器可能希望将客户端重定向到新的位置上去。但由于重命名是临时的,所以服务器希望客户端将来还可以回头去使用老的URL,不要对书签进行更新。状态码303 See Other以及状态码307 TemporaryRedirect就用于此类重定向。

在web服务器部署一个网站的方法

一般在安装操作系统时不默认安装IIS,所以在第一次配置Web服务器时需要安装IIS。安装方法为:

1、打开“控制面板”,打开“添加/删除程序”,弹出“添加/删除程序”窗口。

2、单击窗口中的“添加/删除Windows组件”图标,弹出“Windows组件向导”对话框。

添加/删除程序

3、选中“向导”中的“应用程序服务器”复选框。单击“详细信息”按钮,弹出“应用程序服务器”对话框。

添加/删除Windows组件

4、选择需要的组件,其中“Internet信息服务(IIS)”和“应用程序服务器控制台”是必须选中的。选中“Internet信息服务(IIS)”后,再单击“详细信息”按钮,弹出“Internet信息服务(IIS)”对话框。

5、选中“Internet信息服务管理器”和“万维网服务”。并且选中“万维网服务”后,再单击“详细信息”按钮,弹出“万维网服务”对话框。

6、其中的“万维网服务”必须选中。如果想要服务器支持ASP,还应该选中“ActiveServerPages”。逐个单击“确定”按钮,关闭各对话框,直到返回图1的“Windows组件向导”对话框。

7、单击“下一步”按钮,系统开始IIS的安装,这期间可能要求插入WindowsServer2003安装盘,系统会自动进行安装工作。

8、安装完成后,弹出提示安装成功的对话框,单击“确定”按钮就完成了IIS的安装。

友情提示:如果想要同时装入FTP服务器,在“Internet信息服务(IIS)”对话框中应该把“文件传输协议(FTP)服务”的复选框也选中。

在IIS中创建Web网站

打开“Internet信息服务管理器”,在目录树的“网站”上单击右键,在右键菜单中选择“新建→网站”,弹出“网站创建向导”:

网站描述就是网站的名字,它会显示在IIS窗口的目录树中,方便管理员识别各个站点。本例中起名为“枝叶的网站”。

网站IP地址:如果选择“全部未分配”,则服务器会将本机所有IP地址绑定在该网站上,这个选项适合于服务器中只有这一个网站的情况。也可以从下拉式列表框中选择一个IP地址(下拉式列表框中列出的是本机已配置的IP地址,如果没有,应该先为本机配置IP地址,再选择。)

TCP端口:一般使用默认的端口号80,如果改为其它值,则用户在访问该站点时必须在地址中加入端口号。

主机头:如果该站点已经有域名,可以在主机头中输入域名。

主目录路径是网站根目录的位置,可以用“浏览”按钮选择一个文件夹作为网站的主目录。

网站访问权限是限定用户访问网站时的权限,“读取”是必需的,“运行脚本”可以让站点支持ASP,其它权限可根据需要设置。

单击“下一步”,弹出“完成向导”对话框,就完成了新网站的创建过程,在IIS中可以看到新建的网站。把做好的网页和相关文件复制到主目录中,通常就可以访问这个网站了。

访问网站的方法是:如果在本机上访问,可以在浏览器的地址栏中输入“”,则用户访问“/pic/文件1”时,访问的实际位置是服务器的“D:myimage文件1”,所以虚拟目录的真实名字和位置对用户是不可知的。

创建虚拟目录的方法:

打开Internet信息服务窗口,在想要创建虚拟目录的Web站点上单击右键,选择“新建”→“虚拟目录”。弹出虚拟目录创建向导:

别名是映射后的名字,即客户访问时的名字;

路径:服务器上的真实路径名,即虚拟目录的实际位置;

访问权限:指客户对该目录的访问权限。

单击“下一步”按钮,弹出完成对话框,虚拟目录就建立成功了。把相关文件复制到虚拟目录中,用户就可以按照虚拟的树形结构访问到指定文件了。

通常虚拟目录的访问权限、默认文档等都继承自主目录,如果需要修改,可在“Internet信息服务管理器”中的虚拟目录上单击右键,选择“属性”,就可以修改虚拟目录的参数设置了。

如何设置默认文档;在同一台服务器上架设多个Web站点;(可以通过改变端口号)创建Web虚拟目录;

(1)了解DNS主机名和IP地址。 如果此WEB服务器在Internet上,需向ISP申请和注册此服务器的DNS主机名和IP地址。如果此服务器只在企业网内使用,则在内部的DNS服务器上注册。

(2)打开服务器文档,选择端口-Internet端口,启用TCP/ IP端口。

(3)选择Internet协议,完成以下选项后,保存文档。

绑定主机名:

A、选择是则您可在主机名项中输入主机别名,WEB用户可用此别名替代Domino服务器名访问WEB服务器。

B、选择否(缺省)则不允许使用别名。

DNS查询: 选择是则Domino服务器查询发送请求的WEB客户机的DNS名。

Domino日志文件和数据库将包含WEB客户机的DNS主机名。 选择否(缺省)则不查询,Domino日志文件和

数据库将只包含WEB客户机的IP地址。

注意:选择否将提高Domino服务器性能,因为服务器不使用资源执行DNS查询。

允许HTTP客户浏览数据库:选择是则允许WEB用户在URL中使用OpenServer命令来显示服务器上数据库列表。选择否(缺省)则不允许。但即使WEB用户不能看到服务器上数据库列表,他们仍能打开有权限访问的单个数据库。

(4)启动HTTP任务。在服务器控制台上,输入:loap http

网络的负载均衡是一种动态均衡技术,通过一些工具实时地分析数据包,掌握网络中的数据流量状况,把任务合理均衡地分配出去。这种技术基于现有网络结构,提供了一种扩展服务器带宽和增加服务器吞吐量的廉价有效的方法,加强了网络数据处理能力,提高了网络的灵活性和可用性。

以四台服务器为例实现负载均衡:

安装配置LVS

1 安装前准备:

(1)首先说明,LVS并不要求集群中的服务器规格划一,相反,可以根据服务器的不同配置和负载状况,调整负载分配策略,充分利用集群环境中的每一台服务器。如下表:

Srv Eth0 Eth0:0 Eth1 Eth1:0

vs1 10001 10002 192168101 19216810254

vsbak 10003 19216810102

real1 19216810100

real2 19216810101

其中,10002是允许用户访问的IP。

(2)这4台服务器中,vs1作为虚拟服务器(即负载平衡服务器),负责将用户的访问请求转发到集群内部的real1,real2,然后由real1,real2分别处理。

Client为客户端测试机器,可以为任意操作系统。

(3)所有OS为redhat62,其中vs1 和vsbak 的核心是2219, 而且patch过ipvs的包, 所有real

server的Subnet mask 都是24位, vs1和vsbak 的1000 网段是24 位。

2理解LVS中的相关术语

(1) ipvsadm :ipvsadm是LVS的一个用户界面。在负载均衡器上编译、安装ipvsadm。

(2) 调度算法: LVS的负载均衡器有以下几种调度规则:Round-robin,简称rr;weighted

Round-robin,简称wrr;每个新的连接被轮流指派到每个物理服务器。Least-connected,简称lc;weighted

Least-connected,简称wlc,每个新的连接被分配到负担最小的服务器。

(3) Persistent client

connection,简称pcc,(持续的客户端连接,内核2210版以后才支持)。所有来自同一个IP的客户端将一直连接到同一个物理服务器。超时时间被设置为360秒。Pcc是为https和cookie服务设置的。在这处调度规则下,第一次连接后,所有以后来自相同客户端的连接(包括来自其它端口)将会发送到相同的物理服务器。但这也会带来一个问题,因为大约有25%的Internet

可能具有相同的IP地址。

(4) Persistent port

connection调度算法:在内核2212版以后,pcc功能已从一个调度算法(你可以选择不同的调度算法:rr、wrr、lc、wlc、pcc)演变成为了一个开关选项(你可以让rr、

wrr、lc、wlc具备pcc的属性)。在设置时,如果你没有选择调度算法时,ipvsadm将默认为wlc算法。 在Persistent port

connection(ppc)算法下,连接的指派是基于端口的,例如,来自相同终端的80端口与443端口的请求,将被分配到不同的物理服务器上。不幸的是,如果你需要在的网站上采用cookies时将出问题,因为http是使用80端口,然而cookies需要使用443端口,这种方法下,很可能会出现cookies不正常的情况。

(5)Load Node Feature of Linux Director:让Load balancer 也可以处理users 请求。

(6)IPVS connection synchronization。

(7)ARP Problem of LVS/TUN and LVS/DR:这个问题只在LVS/DR,LVS/TUN 时存在。

3 配置实例

(1) 需要的软件包和包的安装:

I piranha-gui-0412-2rpm (GUI接口cluster设定工具);

II piranha-0412-2rpm;

III ipchains-139-6lprpm (架设NAT)。

取得套件或mount到光盘,进入RPMS目录进行安装:

# rpm -Uvh piranha

# rpm -Uvh ipchains

(2) real server群:

真正提供服务的server(如web

server),在NAT形式下是以内部虚拟网域的形式,设定如同一般虚拟网域中Client端使用网域:192168100/24

架设方式同一般使用虚拟IP之局域网络。

a 设网卡IP

real1 :19216810100/24

real2 :19216810101/24

b每台server均将default gateway指向19216810254。

19216810254为该网域唯一对外之信道,设定在virtual server上,使该网域进出均需通过virtual server 。

c每台server均开启httpd功能供web server服务,可以在各real server上放置不同内容之网页,可由浏览器观察其对各real

server读取网页的情形。

d每台server都开启rstatd、sshd、rwalld、ruser、rsh、rsync,并且从Vserver上面拿到相同的lvsconf文件。

(3) virtual server:

作用在导引封包的对外主机,专职负责封包的转送,不提供服务,但因为在NAT型式下必须对进出封包进行改写,所以负担亦重。

aIP设置:

对外eth0:IP:10001 eth0:0 :10002

对内eth1:192168101 eth1:0 :19216810254

NAT形式下仅virtual server有真实IP,real server群则为透过virtual server

b设定NAT功能

# echo 1 >; /proc/sys/net/ipv4/ip_forward

# echo 1 >; /proc/sys/net/ipv4/ip_always_defrag

# ipchains -P forward MASQ

c设定piranha 进入X-window中 (也可以直接编辑/etc/lvscf )

a)执行面板系统piranha

b)设定“整体配置”(Global Settings) 主LVS服务器主机IP:10002, 选定网络地址翻译(预设) NAT路径名称:

19216810254, NAT 路径装置: eth1:0

c)设定虚拟服务器(Virtual Servers) 添加编辑虚拟服务器部分:(Virtual

Server)名称:(任意取名);应用:http;协议: tcp;连接:80;地址:10002;装置:eth0:0; 重入时间:180

(预设);服务延时:10 (预设);加载监控工具:ruptime (预设);调度策略:Weighted least-connections; 持续性:0

(预设); 持续性屏蔽: 255255255255 (预设); 按下激活:实时服务器部分:(Real Servers); 添加编辑:名字:(任意取名);

地址: 19216810100; 权重:1 (预设) 按下激活

另一架real server同上,地址:19216810101。

d) 控制/监控(Controls/Monitoring)

控制:piranha功能的激活与停止,上述内容设定完成后即可按开始键激活piranha监控器:显示ipvsadm设定之routing table内容

可立即更新或定时更新。

(4)备援主机的设定(HA)

单一virtual server的cluster架构virtual server 负担较大,提供另一主机担任备援,可避免virtual

server的故障而使对外服务工作终止;备份主机随时处于预备状态与virtual server相互侦测

a备份主机:

eth0: IP 10003

eth1: IP 19216810102 同样需安装piranha,ipvsadm,ipchains等套件

b开启NAT功能(同上面所述)。

c在virtual server(10002)主机上设定。

a)执行piranha冗余度 ;

b)按下“激活冗余度”;

冗余LVS服务器IP: 10003;HEARTBEAT间隔(秒数): 2 (预设)

假定在…秒后进入DEAD状态: 5 (预设); HEARTBEAT连接埠: 539 (预设)

c)按下“套用”;

d)至“控制/监控”页,按下“在当前执行层添加PULSE DEAMON” ,按下“开始”;

e)在监控器按下“自动更新”,这样可由窗口中看到ipvsadm所设定的routing table,并且动态显示real

server联机情形,若real server故障,该主机亦会从监视窗口中消失。

d激活备份主机之pulse daemon (执行# /etc/rcd/initd/pulse start)。

至此,HA功能已经激活,备份主机及virtual server由pulse daemon定时相互探询,一但virtual

server故障,备份主机立刻激活代替;至virtual server 正常上线后随即将工作交还virtual server。

LVS测试

经过了上面的配置步骤,现在可以测试LVS了,步骤如下:

1 分别在vs1,real1,real2上运行/etc/lvs/rclvs_dr。注意,real1,real2上面的/etc/lvs

目录是vs2输出的。如果您的NFS配置没有成功,也可以把vs1上/etc/lvs/rclvs_dr复制到real1,real2上,然后分别运行。确保real1,real2上面的apache已经启动并且允许telnet。

2 测试Telnet:从client运行telnet 10002,

如果登录后看到如下输出就说明集群已经开始工作了:(假设以guest用户身份登录)

[guest@real1 guest]$——说明已经登录到服务器real1上。

再开启一个telnet窗口,登录后会发现系统提示变为:

[guest@real2 guest]$——说明已经登录到服务器real2上。

3 测试http:从client运行iexplore http://10002

因为在real1 和real2 上面的测试页不同,所以登录几次之后,显示出的页面也会有所不同,这样说明real server 已经在正常工作了。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 第五章:Web服务器

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情