① WEB服务器的优化方法简介
WEB服务器的优化方法简介
在对Web服务器进行优化时要根据真实的Web应用系统的情况和特征来采取有针对性地优化方案。首先根据不同的网络特性来看:在局域网中,降低M T U (最大传输单位)值对可以避免复制数据和求校验,而通过优化select系统调用或在Socket事件处理器中执行计算可以优化请求并发管理,利用HTTP1.1持续连接等都可以使系统性能得到相应的改善,但在广域网的环境下却没有什么大的作用,有的甚至恰恰相反。
例如:减少用户连接的MTU会增加服务器处理开销,采用网络延迟、带宽限制和使用HTTP1.1的持续连接在广域网中不会对服务器性能有什么大的影响。在广域网中,终端用户的请求的等待时间依赖于与网络延迟的程度,连接带宽限制情况。对于广域网,软硬中断在网络处理中占有很大的分量,所以采用适应的中断处理机制将会给服务器的响应能力带来很大的`好处;将服务器定位在内核和将基于进程设计改为基于事务处理也可以不同程度的提高服务器的性能。
关于Web负载,除了对Web负载的特征进行分析以便在评测时更好地再现真实负载之外,还要考虑Web服务器所在的网络环境下负载的情况。人们不仅要求服务器满足正常的工作负载要求,而且在高峰时期依然要保持较高的吞吐量。但是,服务器在高负载的情况下的性能表现往往低于人们的期望。
服务器过载的情况分为两种:一种为瞬间过载,即服务器暂时的、短时间的超载,这种情况主要是由慎乎毕服务器负载的特点引起的。大量的研究表明,Web请求的网络通信量分布是自相似的,即Web请求的通信量可以在很大范围内有显着的变化。这就造成服务器常常短时间的超载,但顷桥这样情况持续的时间一般很短。一种是服务器长时间的超载,这种情况一般是由某一特殊事件引起的,例如服务器受到拒绝服务攻击或者发生了“活锁现象。
第一种服务器超载情况是不可避免的,但第二种情况则可以通过对服务器改进来改善。抛开恶意的攻击不算,仔细分析服务器处理信息宽芹包的过程可以发现,造成系统在超载情况下性能下降的根本原因是高优先级处理阶段对CPU的不公平抢占。
因此,如果限制高优先级处理阶段对CPU的占用率,或者限制处理高优先级的CPU个数,都可以减轻或者消除收包活锁现象。具体的可以采用以下的方法:
一、采用轮询机制。为了减少中断对系统性能的影响,在负载正常的情况下采用“下半处理 的方法就非常有效,而在高负荷情况下,采用这个方法仍然会造成活锁现象,这时可以采用轮询机制。虽然这个方法在负载正常的情况下会造成资源的浪费和响应速度降低,但在网络数据频繁到达服务器时就要比中断驱动技术有效的多。
二、减少上下文切换。这种方法不管服务器在什么情况下对性能改善都很有效,这时可以采用引入核心级(kerne1—leve1)或硬件级数据流的方法来达到这个目的。核心级数据流是将数据从源通过系统总线进行转发而不需要使数据经过应用程序进程,这个过程中因为数据在内存中,因此需要CPU操作数据。
硬件级数据流则是将数据从源通过私有数据总线或是虽等DMA通过系统总线进行转发而不需要使数据经过应用程序进程,这个过程不需要CPU操作数据。这样在数据传输过程中不需要用户线程的介入,减少了数据被拷贝的次数,减少了上下文切换的开销。
三、减低中断的频率(主要是针对高负荷情况的方法)。这里主要有两种方法:批中断和暂时关闭中断。批中断可以在超载时有效的抑制活锁现象,但对服务器的性能没有什么根本性的改进;当系统出现接收活锁迹象时,可以采用暂时关闭中断的方法来缓和系统的负担,当系统缓存再次可用时可以再打开中断,但这种方法在接收缓存不够大的情况下会造成数据包丢失。
Web服务器性能是整个Web系统的关键环节,提高Web服务器的性能也是长久以来人们一直关注的课题。这里通过对Web服务器的工作原理和现有的优化方法和技术的分析,得出了对待Web服务器性能的提高也应该具体问题具体分析,要在具体的应用环境中,根据其特点来采取相应的优化措施。 ;
② 如何配置Web服务器实现负载均衡
网络的负载均衡是一种动态均衡技术,通过一些工具实时地分析数据包,掌握网络中的数据流量状况,把任务合理均衡地分配出去。这种技术基于现有网络结构,提供了一种扩展服务器带宽和增加服务器吞吐量的廉价有效的方法,加强了网络数据处理能力,提高了网络的灵活性和可用性。
以四台服务器为例实现负载均衡:
安装配置LVS
1. 安装前准备:
(1)首先说明,LVS并不要求集群中的服务器规格划一,相反,可以根据服务器的不同配置和负载状况,调整负载分配策略,充分利用集群环境中的每一台服务器。如下表:
Srv Eth0 Eth0:0 Eth1 Eth1:0
vs1 10.0.0.1 10.0.0.2 192.168.10.1 192.168.10.254
vsbak 10.0.0.3 192.168.10.102
real1 192.168.10.100
real2 192.168.10.101
其中,10.0.0.2是允许用户访问的IP。
(2)这4台服务器中,vs1作为虚拟服务器(即负载平衡服务器),负责将用户的访问请求转发到集群内部的real1,real2,然后由real1,real2分别处理。
Client为客户端测试机器,可以为任意操作系统。
(3)所有OS为redhat6.2,其中vs1 和vsbak 的核心是2.2.19, 而且patch过ipvs的包, 所有real
server的Subnet mask 都是24位, vs1和vsbak 的10.0.0. 网段是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,(持续的客户端连接,内核2.2.10版以后才支持)。所有来自同一个IP的客户端将一直连接到同一个物理服务器。超时时间被设置为360秒。Pcc是为https和cookie服务设置的。在这处调度规则下,第一次连接后,所有以后来自相同客户端的连接(包括来自其它端口)将会发送到相同的物理服务器。但这也会带来一个问题,因为大约有25%的Internet
可能具有相同的IP地址。
(4) Persistent port
connection调度算法:在内核2.2.12版以后,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-0.4.12-2*.rpm (GUI接口cluster设定工具);
II. piranha-0.4.12-2*.rpm;
III. ipchains-1.3.9-6lp*.rpm (架设NAT)。
取得套件或mount到光盘,进入RPMS目录进行安装:
# rpm -Uvh piranha*
# rpm -Uvh ipchains*
(2) real server群:
真正提供服务的server(如web
server),在NAT形式下是以内部虚拟网域的形式,设定如同一般虚拟网域中Client端使用网域:192.168.10.0/24
架设方式同一般使用虚拟IP之局域网络。
a. 设网卡IP
real1 :192.168.10.100/24
real2 :192.168.10.101/24
b.每台server均将default gateway指向192.168.10.254。
192.168.10.254为该网域唯一对外之信道,设定在virtual server上,使该网域进出均需通过virtual server 。
c.每台server均开启httpd功能供web server服务,可以在各real server上放置不同内容之网页,可由浏览器观察其对各real
server读取网页的情形。
d.每台server都开启rstatd、sshd、rwalld、ruser、rsh、rsync,并且从Vserver上面拿到相同的lvs.conf文件。
(3) virtual server:
作用在导引封包的对外主机,专职负责封包的转送,不提供服务,但因为在NAT型式下必须对进出封包进行改写,所以负担亦重。
a.IP设置:
对外eth0:IP:10.0.0.1 eth0:0 :10.0.0.2
对内eth1:192.168.10.1 eth1:0 :192.168.10.254
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/lvs.cf )
a).执行面板系统piranha
b).设定“整体配置”(Global Settings) 主LVS服务器主机IP:10.0.0.2, 选定网络地址翻译(预设) NAT路径名称:
192.168.10.254, NAT 路径装置: eth1:0
c).设定虚拟服务器(Virtual Servers) 添加编辑虚拟服务器部分:(Virtual
Server)名称:(任意取名);应用:http;协议: tcp;连接:80;地址:10.0..0.2;装置:eth0:0; 重入时间:180
(预设);服务延时:10 (预设);加载监控工具:ruptime (预设);调度策略:Weighted least-connections; 持续性:0
(预设); 持续性屏蔽: 255.255.255.255 (预设); 按下激活:实时服务器部分:(Real Servers); 添加编辑:名字:(任意取名);
地址: 192.168.10.100; 权重:1 (预设) 按下激活
另一架real server同上,地址:192.168.10.101。
d). 控制/监控(Controls/Monitoring)
控制:piranha功能的激活与停止,上述内容设定完成后即可按开始键激活piranha.监控器:显示ipvsadm设定之routing table内容
可立即更新或定时更新。
(4)备援主机的设定(HA)
单一virtual server的cluster架构virtual server 负担较大,提供另一主机担任备援,可避免virtual
server的故障而使对外服务工作终止;备份主机随时处于预备状态与virtual server相互侦测
a.备份主机:
eth0: IP 10.0.0.3
eth1: IP 192.168.10.102 同样需安装piranha,ipvsadm,ipchains等套件
b.开启NAT功能(同上面所述)。
c.在virtual server(10.0.0.2)主机上设定。
a).执行piranha冗余度 ;
b).按下“激活冗余度”;
冗余LVS服务器IP: 10.0.0.3;HEARTBEAT间隔(秒数): 2 (预设)
假定在…秒后进入DEAD状态: 5 (预设);HEARTBEAT连接端口: 539 (预设)
c).按下“套用”;
d).至“控制/监控”页,按下“在当前执行层添加PULSE DEAMON” ,按下“开始”;
e).在监控器按下“自动更新”,这样可由窗口中看到ipvsadm所设定的routing table,并且动态显示real
server联机情形,若real server故障,该主机亦会从监视窗口中消失。
d.激活备份主机之pulse daemon (执行# /etc/rc.d/init.d/pulse start)。
至此,HA功能已经激活,备份主机及virtual server由pulse daemon定时相互探询,一但virtual
server故障,备份主机立刻激活代替;至virtual server 正常上线后随即将工作交还virtual server。
LVS测试
经过了上面的配置步骤,现在可以测试LVS了,步骤如下:
1. 分别在vs1,real1,real2上运行/etc/lvs/rc.lvs_dr。注意,real1,real2上面的/etc/lvs
目录是vs2输出的。如果您的NFS配置没有成功,也可以把vs1上/etc/lvs/rc.lvs_dr复制到real1,real2上,然后分别运行。确保real1,real2上面的apache已经启动并且允许telnet。
2. 测试Telnet:从client运行telnet 10.0.0.2,
如果登录后看到如下输出就说明集群已经开始工作了:(假设以guest用户身份登录)
[guest@real1 guest]$——说明已经登录到服务器real1上。
再开启一个telnet窗口,登录后会发现系统提示变为:
[guest@real2 guest]$——说明已经登录到服务器real2上。
3. 测试http:从client运行iexplore http://10.0.0.2
因为在real1 和real2 上面的测试页不同,所以登录几次之后,显示出的页面也会有所不同,这样说明real server 已经在正常工作了。
③ 如何配置Web服务器实现负载均衡
这篇实用文章介绍如何将pfSense 2.0配置成你那些Web服务器的负载均衡器。这篇实用文章假设你已经安装了一个pfSense设备和至少两台Apache服务器,并且运行在你的网络上;还假设你具备了pfSense方面的一些知识。
要求
一台设备用于安装pfSense 2.0(如果这是你的边缘防火墙,我会建议物理机器)。
至少两台Apache2服务器(这些可以是虚拟服务器)。
对Apache服务器进行了配置,以便以某种方式同步Web文件(rsync/corosync或通过Web服务器维持文件版本最新的另一个选项)。
配置pfSense
pfSense使用负载均衡器,将某些类型的流量带来的负载分摊到多台服务器上;如果你有多台服务器用于托管运行应用程序,这很好;你可以将负载分摊到所有服务器上,而不是把负载全扔给一台服务器、导致不堪重负。
可以入手了,先点击“Services”(服务),然后点击“Load Balancers”(负载均衡器),然后点击“Monitor”(监视器)选项卡。
要添加一个新条目,点击“Plus”(添加)按钮,指槐皮定“Name”(名称)和“Description”(描述,在这个示例中,我会使用ApacheClusterMon作为名称和描述),将类型设成“HTTP”,然后为“Host”(主机)设置一个未使用的IP地址(我们随后会创建虚拟服务器的IP,以便分配给故障切换服务器组),任由“HTTP Code”(HTTP代码)设成“200 OK”。需要的话,然后点击“Save”(保存),使更改生效。
现在我们要创建服务器池。点击“Pools”(服务器池)选项卡,点击“Plus”(添加)按钮,即可添加新的服务器池。
指定一个名称(ApacheSrvPool将用在我的示例中)。将“Mode”(模式)设成“Load Balance”(负载均衡),然后将“Port”(端口)设成“80”(你可以让pfSense对其他端口上的其他应用程序实现负载均衡),将“Monitor”(监视器)设成你之前创建的监视器配置,并且指定你希望在服务器池中的所有Web服务器的IP地址,需要的话,点击“Save”(保存),使更改生效。
接下来铅胡差点击“Virtual Servers”(虚拟服务器)选项卡,点击“Plus”(添加)按钮,添加一个新条目。指定“Name”(名称)和“Description”(描述),然后用你之前选择的未使用IP地址来设置“IP Address”(IP地址),将“Port”(端口)设成“80”,然后将“Virtual Server Pool”(虚拟服务器池)设成你之前创建的服务器池,点击做信“Submit”(提交),使更改生效。
就这样,你刚配置好了pfSense,对你的Web服务器之间的网络流量实现负载均衡。
顺便提一下,如果任何一台服务器没有给出200 OK状态这样的回应(pfSense定期向你的Web服务器发送请求,以确定它们是否正常运行),服务器池就会处于离线停运状态。要避免出现停运,最好的办法就是配置故障切换系统(下一篇文章会有介绍)。
④ 企业级Web服务器安全该怎么做主动出击!
不但企业的门户网站被篡改、资料被窃取,而且还成为了病毒与木马的传播者。有些Web管理员采取了一些措施,虽然可以保证门户网站的主页不被篡改,但是却很难避免自己的网站被当作肉鸡,来传播病毒、恶意插件、木马等等。笔者认为,这很大一部分原因是管理员在Web安全防护上太被动。他们只是被动的防御。为了彻底提高Web服务器的安全,笔者认为,Web安全要主动出击。具体的来说,需要做到如下几点。
一、在代码编写时就要进行漏洞测试
现在的企业网站做的越来越复杂、功能越来越强。不过这些都不是凭空而来的,是通过代码堆积起来的。如果这个代码只供企业内部使用,那么不会带来多大的安全隐患。但是如果放在互联网上使用的话,则这些为实现特定功能的代码就有可能成为攻击者的目标。笔者举一个简单的例子。在网页中可以嵌入SQL代码。而攻击者就可以利用这些SQL代码来发动攻击,来获取管理员的密码等等破坏性的动作。有时候访问某些网站还需要有某些特定的控件。用户在安装这些控件时,其实就有可能在安装一个木马(这可能访问者与被访问者都没有意识到)。
为此在为网站某个特定功能编写代码时,就要主动出击。从编码的设计到编写、到测试,都需要认识到是否存在着安全的漏洞。笔者在日常过程中,在这方面对于员工提出了很高的要求。各个员工必须对自己所开发的功能负责。至少现在已知的病毒、木马不能够在你所开发的插件中有机可乘。通过这层层把关,就可以提高代码编写的安全性。
二、对Web服务器进行持续的监控
冰冻三尺、非一日之寒。这就好像人生病一样,都有一个过程。病毒、木马等等在攻击Web服务器时,也需要一个过程。或者说,在攻击取得成功之前,他们会有一些试探性的动作。如对于一个采取了一定安全措施的Web服务器,从攻击开始到取得成果,至少要有半天的时间。如果Web管理员对服务器进行了全天候的监控。在谈基发现有异常行为时,及早的采取措施,将病毒与木马阻挡在门户之外。这种主动出击的方式,就可以大大的提高Web服务器的安全性。
笔者现在维护的Web服务器有好几十个。现在专门有一个小组,来全天候的监控服务器的访问。平均每分钟都可以监测到一些试探性的攻击行为。其中99%以上的攻击行为,由于服务器已经采取了对应的安全措施,都无功而返。不过每天仍然会遇到一些攻击行为。这些攻击行为可能是针对新的漏洞,或者采取了新的攻击方式。在服务器上原先没有采取对应的安全措施。如果没有及时的发现这种行为,那么他们就很有可能最终实现他们的非法目的。相反,现在及早的发现了他们的攻击手段,那么我们就可以在他们采取进一步行动之前,就在服务器上关掉这扇门,补上这个漏洞。
笔者在这里也建议,企业用户在选择互联网Web服务器提供商的时候,除了考虑性能等因素之外,还要评估服务提供商能否提供全天候的监控机制。在Web安全上主动出击,及时发现攻击者的攻击行为。在他们采取进一步攻击措施之前,就他们消除在萌芽状态。
三、设置蜜罐,将攻击者引向错误的方向
在军队中,有时候会给军人一些“伪装”,让敌人分不清真伪。其实在跟病毒、木马打交道时,本身就是一场无硝烟的战争。为此对于Web服务器采取一些伪装,也能够将攻击者引向错误的方向。等到供给者发现自己的目标错误时,管理员已经锁定了攻击者,从而可以及早的采取相应的措施。笔者有时候将这种主动出击的行为叫做蜜罐效应。简单的说,就是设置两个服务器。其中一个是真正的服务器,另外一个是蜜罐。现在需要扰漏做的是,如何将真正的服务器伪装起来,含李谨而将蜜罐推向公众。让攻击者认为蜜罐服务器才是真正的服务器。要做到这一点的话,可能需要从如下几个方面出发。
一是有真有假,难以区分。如果要瞒过攻击者的眼睛,那么蜜罐服务器就不能够做的太假。笔者在做蜜罐服务器的时候,80%以上的内容都是跟真的服务器相同的。只有一些比较机密的信息没有防治在蜜罐服务器上。而且蜜罐服务器所采取的安全措施跟真的服务器事完全相同的。这不但可以提高蜜罐服务器的真实性,而且也可以用来评估真实服务器的安全性。一举两得。
二是需要有意无意的将攻击者引向蜜罐服务器。攻击者在判断一个Web服务器是否值得攻击时,会进行评估。如评估这个网站的流量是否比较高。如果网站的流量不高,那么即使被攻破了,也没有多大的实用价值。攻击者如果没有有利可图的话,不会花这么大的精力在这个网站服务器上面。如果要将攻击者引向这个蜜罐服务器的话,那么就需要提高这个蜜罐服务器的访问量。其实要做到这一点也非常的容易。现在有很多用来交互流量的团队。只要花一点比较小的投资就可以做到这一点。
四、专人对Web服务器的安全性进行测试
俗话说,靠人不如靠自己。在Web服务器的攻防战上,这一个原则也适用。笔者建议,如果企业对于Web服务的安全比较高,如网站服务器上有电子商务交易平台,此时最好设置一个专业的团队。他们充当攻击者的角色,对服务器进行安全性的测试。这个专业团队主要执行如下几个任务。
一是测试Web管理团队对攻击行为的反应速度。如可以采用一些现在比较流行的攻击手段,对自己的Web服务器发动攻击。当然这个时间是随机的。预先Web管理团队并不知道。现在要评估的是,Web管理团队在多少时间之内能够发现这种攻击的行为。这也是考验管理团队全天候跟踪的能力。一般来说,这个时间越短越好。应该将这个时间控制在可控的范围之内。即使攻击最后没有成功,Web管理团队也应该及早的发现攻击的行为。毕竟有没有发现、与最终有没有取得成功,是两个不同的概念。
二是要测试服务器的漏洞是否有补上。毕竟大部分的攻击行为,都是针对服务器现有的漏洞所产生的。现在这个专业团队要做的就是,这些已发现的漏洞是否都已经打上了安全补丁或者采取了对应的安全措施。有时候我们都没有发现的漏洞是无能为力,但是对于这些已经存在的漏洞不能够放过。否则的话,也太便宜那些攻击者了。
⑤ 如何减轻web服务器的负担
网站服务器运行段间down掉原能造种现象:比tomcat堆非堆内存设置足程序没能释放内存空间造内存溢或者某些进程直运行没能释放造cup资源量消耗除程序本身原能客服端访问造(客户端包含蜘蛛软件等搜索引擎)服务器客户端建立链接(用netstat -a命令查看网络访问信息)需要http响应connection做定设置
http1.1requestreponse header都能现connection字段header含义clientserver通信于链接何进行处理http1.1clientserver都默认支持链接 client使用http1.1协议希望使用链接则需要header指明connection值close;server想支持链接则response需要明确说明connection值close
论requestresponseheader包含值closeconnection都表明前使用tcp链接请求处理完毕断掉client再进行新请求必须创建新tcp链接
HTTP Connectionclose设置允许客户端或服务器任何关闭底层连接双都要求处理请求关闭TCP连接
何程序设置:滤器加入:response.setHeader(connection, close);
内容自: HTTP Keep-Alive详解
HTTP Keep Alive
HTTP Keep-Alive 程序误解面介绍HTTP/坦败1.0HTTP/1.1版本何工作及其JAVA运行原理
HTTP请求响应模式典型范例即客户端向服务器发送请求信息服务器响应信息HTTP版本每请求都创建新客户端->服务器连接连接发送请求接收请求模式优点简单容易理解编程实现;缺点效率低Keep-Alive提用解决效率低问题
HTTP/1.0
HTTP/1.0版本并没官标准规定Keep-Alive何工作实际附加HTTP/1.0协议客户端浏览器支持Keep-AliveHTTP请求添加字段 Connection: Keep-Alive服务器收附带Connection: Keep-Alive请求响应添加扮滑同字段使用Keep-Alive客户端服务器间HTTP连接保持断(超Keep-Alive规定间意外断电等情况除外)客户端发送另外请求使用条已经建立连接
HTTP/1.1
HTTP/1.1版本官规定Keep-Alive使用标准HTTP/1.0版本些同默认情况所HTTP1.1所连接都保持除非请求或响应指明要关闭:Connection: Close Connection: Keep-Alive字段再没意义原另外添加新字段Keep-Alive:字段并没详细描述用做忽略
Not reliable(靠)
HTTP状态协议意味着每请求都独立Keep-Alive没能改变结另外Keep-Alive能保证客户端服务器间连接定跃HTTP1.1版本唯能保证连接关闭能通知所应该让程序依赖于Keep-Alive保持连接特性否则意想
Keep-AlivePOST
HTTP1.1细则规定POST消息体面能任何字符指于某特定浏览器能并遵循标准(比POST消息体面放置CRLF符)据我所知部浏览器POST消息体都自跟CRLF符再发送何解决问题呢根据面说明POST请求禁止使用Keep-Alive或者由服务器自忽略CRLF部服务器都自忽略未经测试前能知道服务器否做
内容自:
HTTP状态协议Connection:Keep-Alive容易犯误区
名词解释:
HTTP状态:状态指协议于事务处理没记忆能力服务器知道客户端状态另面讲打服务器网页前打服务器网页间没任何联系
要实现购物车需要借助于Cookie或Session或服务器端API(NSAPI and ISAPI)记录些信息请求服务器结算页面同些信息提交服务器
登录网站登录状态由Cookie或Session记忆服务器并知道否登录
优点:服务器用每客户端连接配内存记忆量状态用客户端失连接清理内存更高效处理WEB业务
缺点:客户端每请求都需要携带相应参数服厅信腊务器需要处理些参数
Keep-Alive:参考另外篇文章HTTP Keep-Alive 详解
容易犯误区:
1、HTTP状态面向连接协议状态代表HTTP能保持TCP连接更能代表HTTP使用UDP协议(连接)
2、HTTP/1.1起默认都启Keep-Alive保持连接特性简单说网页打完客户端服务器间用于传输HTTP数据TCP连接关闭客户端再访问服务器网页继续使用条已经建立连接
3、Keep-Alive永久保持连接保持间同服务器软件(Apache)设定间
内容自:
Keep-Alive简介及Tomcat配置
Keep-Alive功能使客户端服务器端连接持续效现服务器继请求Keep-Alive功能避免建立或者重新建立连接市场 部Web服务器包括iPlanet、IISApache都支持HTTP Keep-Alive于提供静态内容网站说功能通用于负担较重网站说存另外问题:虽客户保留打连 接定处同影响性能处理暂停期间本释放资源仍旧占用Web服务器应用服务器同台机器运行Keep-Alive功能资源利用影响尤其突 功能HTTP 1.1预设功能HTTP 1.0加Keep-Alive header提供HTTP持续作用功能
Keep-Alive: timeout=5, max=100
timeout:期间5秒(应httpd.conf参数:KeepAliveTimeout)max百请求强制断掉连接
timeout间内新连接同max自减1直0强制断掉
Tomcat相关设置,server.xml Connector 元素
keepAliveTimeout:
间连接close单位milliseconds
maxKeepAliveRequests:
连接数(1表示禁用-1表示限制数默认100般设置100~200间).
maxKeepAliveRequests=1″避免tomcat产量TIME_WAIT连接定程度避免tomcat假死
<Connector executor=tomcatThreadPool
port=80″ protocol=HTTP/1.1″
connectionTimeout=60000″
keepAliveTimeout=15000″
maxKeepAliveRequests=1″
redirectPort=443″
maxHttpHeaderSize=8192″ URIEncoding=UTF-8″ enableLookups=false acceptCount=100″ disableUploadTimeout=true/>?网站服务器运行段间down掉原能造种现象:比tomcat堆非堆内存设置足程序没能释放内存空间造内存溢或者某些进程直运行没能释放造cup资源量消耗除程序本身原能客服端访问造(客户端包含蜘蛛软件等搜索引擎)服务器客户端建立链接(用netstat -a命令查看网络访问信息)需要http响应connection做定设置
http1.1requestreponse header都能现connection字段header含义clientserver通信于链接何进行处理http1.1clientserver都默认支持链接 client使用http1.1协议希望使用链接则需要header指明connection值close;server想支持链接则response需要明确说明connection值close
论requestresponseheader包含值closeconnection都表明前使用tcp链接请求处理完毕断掉client再进行新请求必须创建新tcp链接
HTTP Connectionclose设置允许客户端或服务器任何关闭底层连接双都要求处理请求关闭TCP连接
何程序设置:滤器加入:response.setHeader(connection, close);
内容自: HTTP Keep-Alive详解
HTTP Keep Alive
HTTP Keep-Alive 程序误解面介绍HTTP/1.0HTTP/1.1版本何工作及其JAVA运行原理
HTTP请求响应模式典型范例即客户端向服务器发送请求信息服务器响应信息HTTP版本每请求都创建新客户端->服务器连接连接发送请求接收请求模式优点简单容易理解编程实现;缺点效率低Keep-Alive提用解决效率低问题
HTTP/1.0
HTTP/1.0版本并没官标准规定Keep-Alive何工作实际附加HTTP/1.0协议客户端浏览器支持Keep-AliveHTTP请求添加字段 Connection: Keep-Alive服务器收附带Connection: Keep-Alive请求响应添加同字段使用Keep-Alive客户端服务器间HTTP连接保持断(超Keep-Alive规定间意外断电等情况除外)客户端发送另外请求使用条已经建立连接
HTTP/1.1
HTTP/1.1版本官规定Keep-Alive使用标准HTTP/1.0版本些同默认情况所HTTP1.1所连接都保持除非请求或响应指明要关闭:Connection: Close Connection: Keep-Alive字段再没意义原另外添加新字段Keep-Alive:字段并没详细描述用做忽略
Not reliable(靠)
HTTP状态协议意味着每请求都独立Keep-Alive没能改变结另外Keep-Alive能保证客户端服务器间连接定跃HTTP1.1版本唯能保证连接关闭能通知所应该让程序依赖于Keep-Alive保持连接特性否则意想
Keep-AlivePOST
HTTP1.1细则规定POST消息体面能任何字符指于某特定浏览器能并遵循标准(比POST消息体面放置CRLF符)据我所知部浏览器POST消息体都自跟CRLF符再发送何解决问题呢根据面说明POST请求禁止使用Keep-Alive或者由服务器自忽略CRLF部服务器都自忽略未经测试前能知道服务器否做
内容自:
HTTP状态协议Connection:Keep-Alive容易犯误区
名词解释:
HTTP状态:状态指协议于事务处理没记忆能力服务器知道客户端状态另面讲打服务器网页前打服务器网页间没任何联系
要实现购物车需要借助于Cookie或Session或服务器端API(NSAPI and ISAPI)记录些信息请求服务器结算页面同些信息提交服务器
登录网站登录状态由Cookie或Session记忆服务器并知道否登录
优点:服务器用每客户端连接配内存记忆量状态用客户端失连接清理内存更高效处理WEB业务
缺点:客户端每请求都需要携带相应参数服务器需要处理些参数
Keep-Alive:参考另外篇文章HTTP Keep-Alive 详解
容易犯误区:
1、HTTP状态面向连接协议状态代表HTTP能保持TCP连接更能代表HTTP使用UDP协议(连接)
2、HTTP/1.1起默认都启Keep-Alive保持连接特性简单说网页打完客户端服务器间用于传输HTTP数据TCP连接关闭客户端再访问服务器网页继续使用条已经建立连接
3、Keep-Alive永久保持连接保持间同服务器软件(Apache)设定间
内容自:
Keep-Alive简介及Tomcat配置
Keep-Alive功能使客户端服务器端连接持续效现服务器继请求Keep-Alive功能避免建立或者重新建立连接市场 部Web服务器包括iPlanet、IISApache都支持HTTP Keep-Alive于提供静态内容网站说功能通用于负担较重网站说存另外问题:虽客户保留打连 接定处同影响性能处理暂停期间本释放资源仍旧占用Web服务器应用服务器同台机器运行Keep-Alive功能资源利用影响尤其突 功能HTTP 1.1预设功能HTTP 1.0加Keep-Alive header提供HTTP持续作用功能
Keep-Alive: timeout=5, max=100
timeout:期间5秒(应httpd.conf参数:KeepAliveTimeout)max百请求强制断掉连接
timeout间内新连接同max自减1直0强制断掉
Tomcat相关设置,server.xml Connector 元素
keepAliveTimeout:
间连接close单位milliseconds
maxKeepAliveRequests:
连接数(1表示禁用-1表示限制数默认100般设置100~200间).
maxKeepAliveRequests=1″避免tomcat产量TIME_WAIT连接定程度避免tomcat假死
<Connector executor=tomcatThreadPool
port=80″ protocol=HTTP/1.1″
connectionTimeout=60000″
keepAliveTimeout=15000″
maxKeepAliveRequests=1″
redirectPort=443″
maxHttpHeaderSize=8192″ URIEncoding=UTF-8″ enableLookups=false acceptCount=100″ disableUploadTimeout=true/>
⑥ 如何优化web服务器的访问速度
网站运营的任何时期,网站访问速度都是至关重要的部分,它是网站友好体验中最基本的一项,如果访问体验都令人不满意,那么后期所做的营销推广模式都有可能徒劳无功,因为网络中客户的选择成本很低,加上普遍客户的耐心都不高,页面访问超过6秒客户就会选择离开,这对于一些流量本来就不高的企业网站来说无疑是雪上加霜。
一、升级正在使用中的服务器
进行服务器升级工作之前,要考虑多方面的问题,是升级已有的服务器还是购置新的服务器设备须根据实际情况抉择。首先来说升级现有的服务器设备,一般来说网站运营到后期随着业务不断增加,多平台应用的开发对于服务器性能的要求也逐步提升,长而久之服务器遇到性能瓶颈也是情理之中的事情,对于这种情况,我们可以通过升级服务器(例如增加硬件设备或网络带宽)等相关配置来满足不断扩大的业务需求,那么服务器性能瓶颈问题就可以得到解决。
二、优化正在使用的服务器
不管是完成升级后的服务器,还是新购置的服务器,我们都要对其进行优化,从而提升服务器的性能以及利用率。如何优化服务器?作为在国互网工作到现在的资深IDC工作人员,小编认为大概分为以下四个方面
要点一:尽可能的减少HTTP请求数
从客户访问网站页面到整个页面内容完全展现出来,这其中要花费较多的时间来下载各种Scripts、CSS样式表、Flash以及图片,而每一类下载都相当于一次HTTP请求,这样的请求越多网站被完全加载出来所花的时间会越长,意味着客户端的访问会很慢,那么此时就需要尽可能的减少HTTP请求数,通常我们可以直接把css和js写入到页面中,避免了外部的调用;或者我们可以把CSS文件和JS文件分来,在后台再进行合并,这样客户端浏览器相当于一次请求。这是小编在国互网美女前端那学来的。
要点二:降低DNS查询时间
众所周知网络服务器端的域名和IP地址是相互对应的,当客户端发出请求时,计算机还需要通过域名和IP地址的相互转换来判断,而这个转换工作便是域名解析DNS,通常DNS的查询需要10~20毫秒时间,客户端浏览器也只会等待DNS查询结束之后才会加载此域名下的内容。因此,我们要加快页面的访问速度,就可以从降低DNS查询时间方面去做改善。
要点三:启用服务器Gzip压缩功能
对于大中型网站来说,页面的内容多且比较多样化,单个页面的大小可能是几百K以上了,客户端访问的时候下载会比较慢,此时我们可以采用服务器Gzip页面压缩功能,可以将一个大小为100K的页面文件压缩成25K以下,这样就可以减少网络传输的数量从而提高客户端访问速度。一般服务器都是可以使用Gzip压缩功能的,并且能够针对JS文件、CSS文件和Html进行压缩,多方面去进行优化网站访问速度。
要点四:推荐大中型网站使用CDN加速工具
CDN加速是目前大型网站普遍使用的页面加速方式,它对于网站优化几乎没有影响的,基本原理是将网站镜像备份到很多服务器节点上,使服务器节点周围的用户访问速度更快,从而提升客户端高速访问网站的体验;但是并不是所有的网站都适合使用CDN加速,一般对于小规模站点个人站的话,就不需要使用CDN加速,毕竟从长期来看这可是一笔不小的开支;建议图片站以及多媒体站点可使用CDN加速。
希望以上知识能够帮到您
⑦ web服务器优化的方法
在对Web服务器进行优化时要根据真实的Web应用系统的情况和特征来采取有针对性地优化方案。
1.根据不同的网络特性来看:
1.1局域网
在局域网中,降低M T U (最大传输单位)值对可以避免复制数据和要求校验,而通过优化select系统调用或在Socket事件处理器中执行计算可以优化请求并发管理,利用HTTP1.1持续连接等都可以使系统性能得到相应的改善但在广域网的环境下却没有什么大的作用,有的甚至恰恰相反。
1.2广域网
在广域网中,终端用户的请求的等待时间依赖于与网络延迟的程度,连接带宽限制情况。对于广域网,软硬中断在网络处理中占有很大的分量,所以采用适应的中断处理机制将会给服务器的响应能力带来很大的好处;将服务器定位在内核和将基于进程设计改为基于事务处理也可以不同程度的提高服务器的性能。
2.关于Web负载
除了对Web负载的特征进行分析以便在评测时更好地再现真实负载之外,还要考虑Web服务器所在的网络环境下负载的情况。人们不仅要求服务器满足正常的工作负载要求,而且在高峰时期依然要保持较高的吞吐量。但是,服务器在高负载的情况下的性能表现往往低于人们的期望。
服务器过载的情况分为两种:
2.1瞬间过载
服务器暂时的、短时间的超载,这种情况主要是由服务器负载的特点引起的。大量的研究表明,Web请求的网络通信量分布是自相似的,即Web请求的通信量可以在很大范围内有显着的变化。这就造成服务器常常短时间的超载,但这样情况持续的时间一般很短
2.2服务器长时间的超载
这种情况一般是由某一特殊事件引起的,例如服务器受到拒绝服务攻击或者发生了“活锁”现象
第一种服务器超载情况是不可避免的,但第二种情况则可以通过对服务器改进来改善。抛开恶意的攻击不算,仔细分析服务器处理信息包的过程可以发现,造成系统在超载情况下性能下降的根本原因是高优先级处理阶段对CPU的不公平抢占。
因此,如果限制高优先级处理阶段对CPU的占用率,或者限制处理高优先级的CPU个数,都可以减轻或者消除收包活锁现象。
具体的可以采用以下的方法:
2.2.1采用轮询机制
为了减少中断对系统性能的影响,在负载正常的情况下采用“下半处理” 的方法就非常有效,而在高负荷情况下,采用这个方法仍然会造成活锁现象,这时可以采用轮询机制。虽然这个方法在负载正常的情况下会造成资源的浪费和响应速度降低,但在网络数据频繁到达服务器时就要比中断驱动技术有效的多。
2.2.2减少上下文切换
这种方法不管服务器在什么情况下对性能改善都很有效,这时可以采用引入核心级(kerne1—leve1)或硬件级数据流的方法来达到这个目的。核心级数据流是将数据从源通过系统总线进行转发而不需要使数据经过应用程序进程,这个过程中因为数据在内存中,因此需要CPU操作数据。
硬件级数据流则是将数据从源通过私有数据总线或是虽等DMA通过系统总线进行转发而不需要使数据经过应用程序进程,这个过程不需要CPU操作数据。这样在数据传输过程中不需要用户线程的介入,减少了数据被拷贝的次数,减少了上下文切换的开销。
2.2.3减低中断的频率(主要是针对高负荷情况的方法)
这里主要有两种方法:批中断和暂时关闭中断。批中断可以在超载时有效的抑制活锁现象,但对服务器的性能没有什么根本性的改进;当系统出现接收活锁迹象时,可以采用暂时关闭中断的方法来缓和系统的负担,当系统缓存再次可用时可以再打开中断,但这种方法在接收缓存不够大的情况下会造成数据包丢失。
四.Web服务器优化总结
Web服务器性能是整个Web系统的关键环节,提高Web服务器的性能也是长久以来人们一直关注的课题。这里通过对Web服务器的工作原理和现有的优化方法和技术的分析,得出了对待Web服务器性能的提高也应该具体问题具体分析,要在具体的应用环境中,根据其特点来采取相应的优化措施。
⑧ Java web项目,怎么做负载均衡啊
HAProxy是一款反向代理服务器工具,通过它,可以实现负载均衡。它支持双机热备支持虚拟主机,但其配置简单,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入。新的1.3引入了frontend,backend,frontend根据任意HTTP请求头内容做规则匹配,然后把请求定向到相关的backend.
利用HAPorxy实现负载均衡
1. 利用HAProxy实现负载均衡
192.168.169.137 (haproxy)———负载均衡———-(192.168.169.117;192.168.169.118)
安装配置HAproxy
cd /usr/local/
wget http://haproxy.1wt.eu/download/1.3/src/haproxy-1.3.14.2.tar.gz
tar zxvf haproxy-1.3.14.2.tar.gz
mv haproxy-1.3.14.2 haproxy
cd haproxy
make TARGET=linux26
2. 创建配置文件
# vi haproxy.cfg
global
maxconn 5120
chroot /usr/local/haproxy
uid 99
gid 99
daemon
quiet
nbproc 2 #通过nbproc多设置几个haproxy并发进程,这样每个进程的task_queue相对就会短很多,性能自然就能提高不少
#pidfile /var/run/haproxy-private.pid
defaults
log global
mode http
option httplog
option dontlognull
log 127.0.0.1 local3
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen webfarm 0.0.0.0:80
mode http
stats uri /haproxy-stats #监控haproxy状态
stats realm Haproxy\ statistics
stats auth netseek:52netseek #设置状态监控的用户名为netseek密码为52netseek
balance roundrobin #负载均衡算法
cookie SERVERID insert indirect
option httpclose #
option forwardfor #apache日志转发功能
option httpchk HEAD /check.txt HTTP/1.0 #健康检测
server app_bbs1 192.168.169.117:80 cookie app1inst1 check inter 2000 rise 2 fall 5
server app_bbs2 192.168.169.118:80 cookie app1inst2 check inter 2000 rise 2 fall 5
syslog.conf里加一行
local3.* /var/log/haproxy.log
# touch /var/log/haproxy.log
# chown haproxy:haproxy /var/log/haproxy.log
# chmod u+x /var/log/haproxy.log
# tail –f /var/log/harpoxy.log 监控日志
# ./haproxy -f haproxy.cfg 启动服务.
监控状态图示http://192.168.169.137/haproxy-stats ,输入用户名密码查看状态。
后端apache日志处理
配置httpd.conf
LogFormat “%{X-Forwarded-For}i %l %u %t \”%r\” %>s %b ” combined
CustomLog /var/log/httpd/access_log combined
虚拟主机不记录检测日志:
SetEnvIf Request_URI “^/check\.txt$” dontlog
LogLevel warn
ErrorLog /var/log/httpd/vhost_error.log
CustomLog /var/log/httpd/vhost_access.log combined env=!dontlog
相关介绍
#./haproxy –help //haproxy相关命令参数介绍.
haproxy -f <配置文件> [-n 最大并发连接总数] [-N 每个侦听的最大并发数] [-d] [-D] [-q] [-V] [-c] [-p <pid文件>] [-s] [-l] [-dk]
[-ds] [-de] [-dp] [-db] [-m <内存限制M>] [{-sf|-st} pidlist...]
-d 前台,debug模式
-D daemon模式启动
-q 安静模式,不输出信息
-V 详细模式
-c 对配置文件进行语法检查
-s 显示统计数据
-l 显示详细统计数据
-dk 不使用kqueue
-ds 不使用speculative epoll
-de 不使用epoll
-dp 不使用poll
-db 禁用后台模式,程序跑在前台
-sf <pidlist>
程序启动后向pidlist里的进程发送FINISH信号,这个参数放在命令行的最后
-st <pidlist>
程序启动后向pidlist里的进程发送TERMINATE信号,这个参数放在命令行的最后