Web服务器 - apache & nginx & tomact

Web服务器 - apache & nginx & tomact

HTTP Server本质上来讲都是这样几件事:javascript

  1. 监听端口
  2. 接收(accept)socket链接
  3. 解析HTTP请求
  4. 使用通用或专用协议对请求进行分发
  5. 接收分发的请求产生的运行结果
  6. 将结果格式化成HTTP Response并写到socket里面
  7. 关闭链接或者Keep-Alive

区别一方面在于用了什么语言来实现(Tomcat用Java),一方面是分发时支持的具体协议,Tomcat只支持Servlet接口,Apache和nginx支持CGI、FastCGI、反向代理(能够认为是用HTTP协议进行HTTP请求的分发)、静态资源(能够认为是分发到磁盘读写)等,还能够用扩展模块支持其余分发方式(好比WSGI)php



Web Server 的概念太宽泛了。
严格的来讲,Apache/Nginx 应该叫作「HTTP Server」;而 Tomcat 则是一个「Application Server」,或者更准确的来讲,是一个「Servlet/JSP」应用的容器(Ruby/Python 等其余语言开发的应用也没法直接运行在 Tomcat 上)。前端

一个 HTTP Server 关心的是 HTTP 协议层面的传输和访问控制,因此在 Apache/Nginx 上你能够看到代理、负载均衡等功能。客户端经过 HTTP Server 访问服务器上存储的资源(HTML 文件、图片文件等等)。经过 CGI 技术,也能够将处理过的内容经过 HTTP Server 分发,可是一个 HTTP Server 始终只是把服务器上的文件如实的经过 HTTP 协议传输给客户端。java

而应用服务器,则是一个应用执行的容器。它首先须要支持开发语言的 Runtime(对于 Tomcat 来讲,就是 Java),保证应用可以在应用服务器上正常运行。其次,须要支持应用相关的规范,例如类库、安全方面的特性。对于 Tomcat 来讲,就是须要提供 JSP/Sevlet 运行须要的标准类库、Interface 等。为了方便,应用服务器每每也会集成 HTTP Server 的功能,可是不如专业的 HTTP Server 那么强大,因此应用服务器每每是运行在 HTTP Server 的背后,执行应用,将动态的内容转化为静态的内容以后,经过 HTTP Server 分发到客户端。
 

1.     Apache

Apache HTTP服务器是一个模块化的服务器,能够运行在几乎全部普遍使用的计算机平台上。其属于应用服务器。Apache支持支持模块多,性能稳定,Apache自己是静态解析,适合静态HTML、图片等,但能够经过扩展脚本、模块等支持动态页面等。nginx

(Apche能够支持PHPcgiperl,可是要使用Java的话,你须要Tomcat在Apache后台支撑,将Java请求由Apache转发给Tomcat处理。)web

缺点:配置相对复杂,自身不支持动态页面。数据库

2.     Tomcat:

Tomcat是应用(Java)服务器,它只是一个Servlet(JSP也翻译成Servlet)容器,能够认为是Apache的扩展,可是能够独立于Apache运行。apache

3.     Nginx

Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器。后端

 

2、     比较

1.     Apache与Tomcat的比较

相同点:浏览器

l  二者都是Apache组织开发的

l  二者都有HTTP服务的功能

l  二者都是免费的

不一样点:

l  Apache是专门用了提供HTTP服务的,以及相关配置的(例如虚拟主机、URL转发等等),而Tomcat是Apache组织在符合Java EE的JSP、Servlet标准下开发的一个JSP服务器. 

l  Apache是一个Web服务器环境程序,启用他能够做为Web服务器使用,不过只支持静态网页如(ASP,PHP,CGI,JSP)等动态网页的就不行。若是要在Apache环境下运行JSP的话就须要一个解释器来执行JSP网页,而这个JSP解释器就是Tomcat。

l  Apache:侧重于HTTPServer ,Tomcat:侧重于Servlet引擎,若是以Standalone方式运行,功能上与Apache等效,支持JSP,但对静态网页不太理想;

l  Apache是Web服务器,Tomcat是应用(Java)服务器,它只是一个Servlet(JSP也翻译成Servlet)容器,能够认为是Apache的扩展,可是能够独立于Apache运行。

实际使用中Apache与Tomcat经常是整合使用:

l  若是客户端请求的是静态页面,则只须要Apache服务器响应请求。

l  若是客户端请求动态页面,则是Tomcat服务器响应请求。

l  由于JSP是服务器端解释代码的,这样整合就能够减小Tomcat的服务开销。

能够理解Tomcat为Apache的一种扩展。

2.     Nginx与Apache比较

1)     nginx相对于apache的优势

l  轻量级,一样起web 服务,比apache占用更少的内存及资源 

l  抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能 

l  高度模块化的设计,编写模块相对简单 

l  提供负载均衡

l  社区活跃,各类高性能模块出品迅速

2)     apache 相对于nginx 的优势

l apache的 rewrite 比nginx 的强大 ;

l 支持动态页面;

l 支持的模块多,基本涵盖全部应用;

l 性能稳定,而nginx相对bug较多。

3)     二者优缺点比较

l Nginx 配置简洁, Apache 复杂 ;

l Nginx 静态处理性能比 Apache 高 3倍以上 ;

l Apache 对 PHP 支持比较简单,Nginx 须要配合其余后端用;

l Apache 的组件比 Nginx 多 ;

l  apache是同步多进程模型,一个链接对应一个进程;nginx是异步的,多个链接(万级别)能够对应一个进程;

l nginx处理静态文件好,耗费内存少;

l  动态请求由apache去作,nginx只适合静态和反向;

l Nginx适合作前端服务器,负载性能很好;

l Nginx自己就是一个反向代理服务器 ,且支持负载均衡

3.     总结

l Nginx优势:负载均衡、反向代理、处理静态文件优点。nginx处理静态请求的速度高于apache;

l Apache优势:相对于Tomcat服务器来讲处理静态文件是它的优点,速度快。Apache是静态解析,适合静态HTML、图片等。

l Tomcat:动态解析容器,处理动态请求,是编译JSP\Servlet的容器,Nginx有动态分离机制,静态请求直接就能够经过Nginx处理,动态请求才转发请求到后台交由Tomcat进行处理。

 

 

Apache在处理动态有优点,Nginx并发性比较好,CPU内存占用低,若是rewrite频繁,那仍是Apache较适合。

 

反向代理的理解:

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的链接请求,而后将请求转发给内部网络上的服务器,

并将从服务器上获得的结果返回给internet上请求链接的客户端,此时代理服务器对外就表现为一个服务器


1、apache与nginx的区别:
 
        一、两者最核心的区别在于apache是同步多进程模型,一个链接对应一个进程;nginx是异步的,多个链接(万级别)能够对应一个进程 。nginx处理静态文件好,耗费内存少.但无疑apache仍然是目前的主流,有不少丰富的特性.因此还须要搭配着来.固然若是能肯定nginx就适合需求,那么使用nginx会是更经济的方式。

 

        二、nginx的负载能力比apache高不少。最新的服务器也改用nginx了。并且nginx改完配置能-t测试一下配置有没 有问题。

 

        三、apache重启的时候发现配置出错了,会很崩溃,改的时候都会很是当心翼翼如今看有好多集群站,前端nginx抗并发,后端apache集群, 配合的也不错。

 

        四、nginx处理动态请求是鸡肋,通常动态请求要apache去作,nginx只适合静态和反向。 

 

        五、从经验来看,nginx是很不错的前端服务器,负载性能很好,nginx,用webbench模拟10000个静态文件请求绝不吃力。 apache对php等语言的支持很好,此外apache有强大的支持网络,发展时间相对nginx更久,bug少可是apache有先天不支持多核心处理负载鸡肋的缺点,建议使用nginx作前端,后端用apache。大型网站建议用nginx自代的集群功能。

 

       六、大部分状况下nginx都优于APACHE,好比说静态文件处理、PHP-CGI的支持、反向代理功能、前端 Cache、维持链接等等。在Apache+PHP(prefork)模式下,若是PHP处理慢或者前端压力很大的状况下,很容易出现Apache进程数 飙升,从而拒绝服务的现象。

 

        七、Apache在处理动态有优点,Nginx并发性比较好,CPU内存占用低,若是rewrite频繁,那仍是Apache吧!

 

        八、通常来讲,须要性能的web 服务,用nginx 。若是不须要性能只求稳定,那就apache 吧。

 

2、apache与nginx优缺点比较
 

一、nginx相对于apache的优势: 

轻量级,一样web 服务,比apache 占用更少的内存及资源 ;
       抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能 ;
       高度模块化的设计,编写模块相对简单 ;
       社区活跃,各类高性能模块出品迅速啊 ;
      Nginx自己就是一个反向代理服务器 ,Nginx支持7层负载均衡;Nginx可能会比apache支持更高的并发,
      nginx配置文件写的很简洁,正则配置让不少事情变得简单运行效率高,占用资源少,代理功能强大,很适合作前端响应服务器 !




二、apache 相对于nginx 的优势: 

rewrite ,比nginx 的rewrite 强大 ;
       模块超多,基本想到的均可以找到 ;
       少bug ,nginx 的bug 相对较多 ;
       超稳定 ,Aapche依然是大部分公司的首先,由于其成熟的技术和开发社区已经 也是很是不错的性能。




  3、为何如今 Nginx 才是 Web 服务器的首选 

做为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发链接,体现更高的效率,这点使 Nginx 尤为受到虚拟主机提供商的欢迎。在高链接并发的状况下,Nginx是Apache服务器不错的替代品: Nginx在美国是作虚拟主机生意的老板们常常选择的软件平台之一. 可以支持高达 50,000 个并发链接数的响应, 感谢Nginx为咱们选择了 epoll and kqueue 做为开发模型. 
       Nginx做为负载均衡服务器: Nginx 既能够在内部直接支持 Rails 和 PHP 程序对外进行服务, 也能够支持做为 HTTP代理 服务器对外进行服务. Nginx采用C进行编写, 不管是系统资源开销仍是CPU使用效率都比 Perlbal 要好不少. 

        做为邮件代理服务器: Nginx 同时也是一个很是优秀的邮件代理服务器(最先开发这个产品的目的之一也是做为邮件代理服务器), Last.fm 描述了成功而且美妙的使用经验. 

       Nginx 是一个安装很是的简单 , 配置文件很是简洁(还可以支持perl语法), Bugs 很是少的服务器: Nginx 启动特别容易, 而且几乎能够作到7*24不间断运行,即便运行数个月也不须要从新启动. 你还可以不间断服务的状况下进行软件版本的升级 . 

         Nginx 配置简洁, Apache 复杂 , Nginx 静态处理性能比 Apache 高 3倍以上 , Apache 对 PHP 支持比较简单,Nginx 须要配合其余后端用,   Apache 的组件比 Nginx 多 。    如今 Nginx 才是 Web 服务器的首选
 

经常使用的web服务器软件整理

 

(1)ApacheApache是世界使用排名第一的Web服务器软件。它能够运行在几乎全部普遍使用的计算机平台上。Apache源于NCSAhttpd服务器,通过屡次修改,成为世界上最流行的Web服务器软件之一。Apache取自"a patchy server"的读音,意思是充满补丁的服务器,由于它是自由软件,因此不断有人来为它开发新的功能、新的特性、修改原来的缺陷。Apache的特色是简单、速度快、性能稳定,并可作代理服务器来使用。


(2)IIS是英文Internet Information Server的缩写,译成中文就是"Internet信息服务"的意思。它是微软公司主推的服务器,最新的版本是Windows2008里面包含的IIS 7,IIS与Window Server彻底集成在一块儿,于是用户可以利用Windows Server和NTFS(NT File System,NT的文件系统)内置的安全特性,创建强大,灵活而安全的Internet和Intranet站点。


(3)GFEGoogle的web服务器,用户数量激增。目前紧逼iis。


(4)Nginx不只是一个小巧且高效的HTTP服务器,也能够作一个高效的负载均衡反向代理,经过它接受用户的请求并分发到多个Mongrel进程能够极大提升Rails应用的并发能力。


(5)Lighttpd是由德国人 Jan Kneschke 领导开发的,基于BSD许可的开源WEB服务器软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好而且灵活的web server环境。具备很是低的内存开销,CPU占用率低,效能好,以及丰富的模块等特色。Lighttpd 是众多OpenSource轻量级的web server中较为优秀的一个。支持FastCGI, CGI, Auth, 输出压缩(output compress), URL重写, Alias等重要功能。


(6)Zeus是一个运行于Unix下的很是优秀的Web Server,听说性能超过Apache,是效率最高的Web Server之一。


(7)Sun的Java系统Web服务器也就是之前的Sun ONE Web Server。主要出如今那些运行Sun的Solaris操做系统的关键任务级Web服务器上。它最新的版本号是6.1,能够支持x86版本Solaris,Red Hat Linux,HP-UX 11i, IBM AIX,甚至能够支持Windows,但它的大多数用户都选择了SPARC版本的Solaris操做系统。


(8)Resin提供了最快的jsp/servlets运行平台。在java和javascript的支持下,Resin能够为任务灵活选用合适的开发语言。Resin的一种先进的语言XSL(XML stylesheet language)可使得形式和内容相分离。


(9)Jetty是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员能够将Jetty容器实例化成一个对象,能够迅速为一些独立运行(stand-alone)的Java应用提供网络和web链接。


(10)BEA WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。 BEA WebLogic Server拥有处理关键Web应用系统问题所需的性能、可扩展性和高可用性。


(11)Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其余一些公司及我的共同开发而成。因为有了Sun 的参与和支持,最新的Servlet 和JSP 规范老是能在Tomcat 中获得体现。由于Tomcat 技术先进、性能稳定,并且免费,于是深受Java 爱好者的喜好并获得了部分软件开发商的承认,成为目前比较流行的Web 应用服务器。

 

(12)Node.js是一个Javascript运行环境(runtime)。实际上它是对Chrome V8引擎进行了封装。V8引 擎执行Javascript的速度很是快,性能很是好。Node.js对一些特殊用例进行了优化,提供了替代的API,使得V8在非浏览器环境下运行得更好。 Node.js是一个基于Chrome JavaScript运行时创建的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞I/O模型而得以轻量和高效,很是适合在分布式设备上运行数据密集型的实时应用。

相关文章
相关标签/搜索