WEB服务器apache lighttpd nginx详解
WEB服务器apache lighttpd nginx详解
在说W EB服务器之前先说说线程、进程、 以及并发连接数
进程与线程
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位
从逻辑角度来看多线程的意义在于一个应用程序中有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别
.进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间一个进程崩溃后在保护模式下不会对其它进程产生影响而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量但线程之间没有单独的地址空间一个线程死掉就等于整个进程死掉所以多进程的程序要比多线程的程序健壮但在进程切换时耗费资源较大效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作只能用线程不能用进程。并发连接数
什么是最大并发连接数呢所谓最大并发连接数是服务器同一时间能处理最大会话数量
何为会话我们打开一个网站就是一个客户端浏览器与服务端的一个会话。我们浏览网页是基于http协议。
HTTP协议如何工作
HTTP支持两种建立连接的方式非持久连接和持久连接(HTTP 1. 1默认的连接方式为持久连接) 。
Web浏览器与Web服务器之间将完成下列7个步骤
1建立TCP连接
2 Web浏览器向Web服务器发送请求命令
3 Web浏览器发送请求头信息
4 Web服务器应答
5 Web服务器发送应答头信息
6 Web服务器向浏览器发送数据
7 Web服务器关闭TCP连接
一般情况下一旦Web服务器向浏览器发送了请求数据它就要关闭TCP连接但是浏览器一般其头信息加入了这行代码
Connection:keep-alive TCP连接在发送后将仍然保持打开状态于是浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间还节约了网络带宽
下面来看看连接数的计算
1、下载用户下载服务器上的文件则为一个连接用户文件下载完毕后这个连接就消失了。有时候用户用迅雷的多线程方式下载的话这一个用户开启了5个线程的话就算是5个连接
2、用户打开你的页面就算停留在页面没有对服务器发出任何请求那么在用户打开一面以后的15分钟内也都要算一个在线
3、上面的情况用户继续打开同一个网站的其他页面那么在线人数按照用户最后一次点击发出请求以后的15分钟计算在这个15分钟内不管用户怎么点击包括新窗口打开都还是一人在线。
4、当用户打开页面然后正常关闭浏览器用户的在线人数也会马上清除。
W EB服务器提供服务的方式
WEB服务器由于要同时为多个客户提供服务就必须使用某种方式来支持这种多任务的服务方式。一般情况下可以有以下三种方式来选择多进程方式、多线程方式及异步方式。其中多进程方式中服务器对一个客户要使用一个进程来提供服务 由于在操作系统中生成一个进程需要进程内存复制等额外的开销这样在客户较多时的性能就会降低。为了克服这种生成进程的额外开销可以使用多线程方式或异步方式。在多线程方式中使用进程中的多个线程提供服务由于线程的开销较小性能就会提高。事实上不需要任何额外开销的方式还是异步方式它使用非阻塞的方式与每个客户通信服务器使用一个进程进行轮询就行了。
虽然异步方式最为高效但它也有自己的缺点。因为异步方式
下多个任务之间的调度是由服务器程序自身来完成的而且一旦一个地方出现问题则整个服务器就会出现问题。因此 向这种服务器增加功能一方面要遵从该服务器自身特定的任务调度方式另一方面要确保代码中没有错误存在这就限制了服务器的功能使得异步方式的Web服务器的效率最高但功能简单。
由于多线程方式使用线程进行任务调度这样服务器的开发由于遵从标准从而变得简单并有利于多人协作。然而多个线程位于同一个进程内可以访问同样的内存空间 因此存在线程之间的影响并且申请的内存必须确保申请和释放。对于服务器系统来讲 由于它要数天、数月甚至数年连续不停的运转一点点错误就会逐渐积累而最终导致影响服务器的正常运转因此很难编写一个高稳定性的多线程服务器程序。
多进程方式的优势就在于稳定性因为一个进程退出的时候操作系统会回收其占用的资源从而使它不会留下任何垃圾。即便程序中出现错误 由于进程是相互隔离的那么这个错误不会积累起来而是随着这个进程的退出而得到清除
Apache(多进程模式prefork+多线程模式worker)prefork的工作原理
如果不用“——wi th-mpm”显式指定某种MPM,pre fork就是Unix平台上缺省的MPM.它所采用的预派生子进程方式也是Apache1.3中采用的模式.prefork本身并没有使用到线程,2.0版使用它是为了与
1.3版保持兼容性;另一方面,prefork用单独的子进程来处理不同的请求,进程之间是彼此独立的,这也使其成为最稳定的MPM之一.worker的工作原理
相对于prefork,worker是2.0版中全新的支持多线程和多进程混合模型的MP M.由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器.但是,worker也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性.这种MPM的工作方式将是Ap ach e2.0的发展趋势.
查看更多apache原理请看Apache服务的工作原理
Apache(cgi模式与模块模式) php在apache中两种工作方式的区别(CGI模式、 Apache模块模式) 这两种工作方式的区别
在CGI模式下如果客户机请求一个php文件 Web服务器就调用php. exe去解释这个文件然后再把解释的结果以网页的形式返回给客户机
而在模块化(DLL)中 PHP是与Web服务器一起启动并运行的。所以从某种角度上来说以apache模块方式安装的PHP4有着比CGI 模式更好的安全性以及更好的执行效率和速度。
FastCGI运行模式分析
FastCGI的工作原理是
1、Web Server启动时载入FastCGI进程管理器IIS ISAPI或Apache Module ;
2、 FastCGI进程管理器自身初始化启动多个CGI解释器进程(在任务管理器中可见多个php-cgi.exe)并等待来自Web Server的连接。
3、当客户端请求到达Web Server时 FastCGI进程管理器选择并连接到一个CGI解释器。 Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi.exe。
4、 FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器运行在WebServer中的下一个连接。 在正常的CGI模式中 php-cgi.exe 在此便退出了。
在上述情况中你可以想象CGI通常有多慢。每一个Web请求PHP 都必须重新解析php. ini、重新载入全部dll扩展并重初始化全部数据结构。使用FastCGI所有这些都只在进程启动时发生一次。一个额外的好处是持续数据库连接(Persistent database connection)可以工作。
使用FastCGI for PHP功能将mod_fastcgi代替原来的mod_phpsusexec可以令您的PHP程序从原来的请求-启动-运行到请求-运行模式从而使程序跑得更快流畅。
因为mod_fastcgi是使用了持久的连接所以能实现执行复杂的PHP 脚本或通过一个连接就能访问到多个数据库。总之它比mod_phpsusexec在相同的条件下执行的效果更佳。
好处
P HP脚本执行的更快。因为PHP解释器将载入到内存有点击请求时快速被调用执行不需再从存储中读取如此大大提高了脚本的执行效率
可以减轻服务器的负荷。因为服务器不需为每个点击请求而反复装卸PHP解释器节省了资源。例如减少了超过CPU使用限制的次数不需修改已有的PHP脚本
但是apache对于fastcgi模式的支持非常差劲
关于fastcgi的更多文章见fastcgi不完全指南http://www.phpchina.com/bbs/viewthread.php?tid=108866&highl i ght=fastcgi%2B
以及实战fastcgi http://linux. sheup. com/linux/linux194.htmLighttpd
Lighttpd是一个具有非常低的内存开销 cpu占用率低效能好 以及丰富的模块等特点。 lighttpd是众多OpenSource轻量级的web server中较为优秀的一个。支持FastCGI, CGI, Auth,输出压缩(output compress) , URL重写, Alias等重要功能。
Lighttpd使用fastcgi方式运行php,它会使用很少的PHP进程响应很大的并发量。
Fastcgi的优点在于
从稳定性上看, fastcgi是以独立的进程池运行来cgi,单独一个进程死掉,系统可以很轻易的丢弃,然后重新分配新的进程来运行逻辑.从安全性上看, fastcgi和宿主的server完全独立, fastcgi怎么down也不会把server搞垮,
从性能上看, fastcgi把动态逻辑的处理从server中分离出来,大负荷的IO处理还是留给宿主server,这样宿主server可以一心一意作IO,对于一个普通的动态网页来说,逻辑处理可能只有一小部分,大量的图片等静态IO处理完全不需要逻辑程序的参与(注1)
从扩展性上讲, fastcgi是一个中立的技术标准,完全可以支持任何语言写的处理程序(php, java,python„)
N g i n x
Nginx以事件驱动的方式编写所以有非常好的性能 同时也是一个非常高效的反向代理、负载平衡。其拥有匹配Lighttpd的性能 同时还没有Lighttpd的内存泄漏问题而且Lighttpd的mod_proxy也有一些问题并且很久没有更新。但是Nginx并不支持cgi方式运行原因是可以减少因此带来的一些程序上的漏洞。所以必须使用FastCGI方式来执行PHP程序。nginx做为HTTP服务器有以下几项基本特性
处理静态文件索引文件以及自动索引打开文件描述符缓冲
无缓存的反向代理加速简单的负载均衡和容错
FastCGI简单的负载均衡和容错
模块化的结构。包括gzipping, byte ranges, chunked responses,以及SSI-f ilter等f ilter。如果由FastCGI或其它代理服务器处理单页中存在的多个SSI则这项处理可以并行运行而不需要相互等待。
Nginx专为性能优化而开发性能是其最重要的考量,实现上非常注重效率。它支持内核Poll模型能经受高负载的考验,有报告表明能支持高达50,000个并发连接数。
最近很多网站都遭受到了伪墙/假墙攻击,导致网站流量大跌,间歇性打不开网站。这是一种新型的攻击方式,攻击者利用GWF规则漏洞,使用国内服务器绑定host的方式来触发GWF的自动过滤机制,造成GWF暂时性屏蔽你的网站和服务器IP(大概15分钟左右),使你的网站在国内无法打开,如果攻击请求不断,那么你的网站就会是一个一直无法正常访问的状态。常规解决办法:1,快速备案后使用国内服务器,2,使用国内免备案服...
美得云怎么样?美得云好不好?美得云是第一次来推广软文,老板人脾气特别好,能感觉出来会用心对待用户。美得云这次为大家提供了几款性价比十分高的产品,美国cera 2核4G 15元/月 香港1核 1G 3M独享 15元/月,并且还提供了免费空间给大家使用。嘻嘻 我也打算去白嫖一个空间了。新用户注册福利-8折优惠码:H2dmBKbF 截止2021.10.1结束。KVM架构,99.99%高可用性,依托BGP...
之前分享过很多次CloudCone的信息,主要是VPS主机,其实商家也提供独立服务器租用,同样在洛杉矶MC机房,分为两种线路:普通优化线路及CN2 GIA,今天来分享下商家的CN2 GIA线路独立服务器产品,提供15-100Mbps带宽,不限制流量,可购买额外的DDoS高防IP,最低每月82美元起,支持使用PayPal或者支付宝等付款方式。下面分享几款洛杉矶CN2 GIA线路独立服务器配置信息。配...