详谈Apache、Nginx和tomcat的区别以及处理静态页面和动态页面的方式

就目前来说,网站主要分为静态页面和动态页面,纯静态页面的网站已经比较少见了,大型网站一般使用的是静态页面+动态页面的建站技术,还有一部分网站是纯动态页面。
负责处理这些页面的软件我们通常称之为web容器,是一种服务程序,负责处理客户端(浏览器)发来的访问请求,如果是静态页面会直接将文件内容呈现给客户端(浏览器),如果是动态页面会将其解析成静态内容之后再呈现给客户端(浏览器)。

一、Apache、Nginx和tomcat的区别

Apache
Apache HTTP Server(简称Apache)是Apache软件基金会的一款开放源码的web服务器软件,可以在大多数计算机操作系统中运行,是目前最流行的web服务器端软件之一。apache支持的模块众多,性能稳定,本身只支持静态解析,但可以通过扩展脚本、模块等支持动态页面。常见的网站架构有:apache+php、apache+tomcat等。
Nginx
Nginx是一款开源的轻量级的web服务器/反向代理服务器软件,其特点是占用内存少,并发能力强,也是目前比较流行的web服务器软件之一。静态页面处理能力较强,尤其是反向代理服务表现突出,常被用作负载均衡和代理服务器使用。常见的网站架构有:nginx+php、nginx+tomcat、nginx+apache+php等。
Tomcat
Tomcat是一款开源的Java web应用服务器软件,常被称之为servlet容器,用来处理jsp页面和运行servlet。tomcat技术先进、性能稳定、而且免费,因而深受Java爱好者的喜爱并得到了广泛使用。tomcat静态页面处理能力较弱,它的强项是运行Jave Servlet(用Java编写的服务器端程序)。

这三款软件各有优势,身为运维人员需要清楚的知道,在哪个场合下使用哪个软件。
如果你只是处理静态页面,那就使用nginx;
如果你需要处理php语言编写的动态页面,那就使用apache+php;
如果是java语言编写的程序,那tomcat无疑是最好的选择。

二、网站页面的类型和区别

经常会有人问,什么是静态页面,什么是动态页面,它们之间有什么区别,那么现在我们就来看一下静态页面和动态页面,以及伪静态都是什么吧。
1、静态页面
通常是以html、htm、shtml等结尾的文件,所有数据都是写在文件里的。客户端加载静态页面时,无须对数据库进行操作,直接将文件内容呈现出来。
优点:相对于另外两种页面(动态页面和伪静态),速度最快,不需要从数据库里面提取数据,也不会对服务器产生压力。
缺点:由于数据都是写在文件里,很有可能会导致文件非常大,占用大量的服务器磁盘空间,每次添加内容都会生成新的文件。更改源代码的话必须全部更改,而不能更改一个地方,全站的静态页面就自动更改了。
2、动态页面
通常是以php、jsp、asp等结尾的文件,不是独立存在于服务器上的网页文件,当用户请求时服务器才会返回一个完整的网页。数据都是存储在数据库中,根据用户发出的不同请求从数据库里提取不同的数据,从而提供个性化的网页内容。
优点:占用磁盘空间小,一般几万条数据的网站,文件大小可能只有几M。数据都是从数据库里提取出来,如果需要修改某些数据,可直接修改数据库,所有动态页面就都会自动更新。
缺点:相对于静态页面而言,访问速度较慢,因为动态页面需要处理成静态内容,才能呈现给用户。动态页面的数据是从数据库里提取出来的,如果访问量大的话,会导致数据库的压力很大。现在动态网站多数都使用了缓存技术,但相对于静态网站而言,服务器的压力比较大,访问的人越多服务器的压力越大。
3、伪静态
假静态页面,通过将动态页面的URL地址重写,改写成以html、htm等结尾的静态URL地址,实际上还是动态页面。
优点:方便搜索引擎进行收录。在SEO方面,伪静态和静态页面的功能是相同的。
缺点:相对于静态页面和动态页面而言,服务器的性能消耗是最大的。静态页面可以节省服务器的资源消耗,而伪静态是增加服务器消耗,因为Rewrite还需要消耗额外的资源。

三、网站页面的处理流程


1、访问静态页面
当用户(浏览器)发起一个访问网站资源的请求时,首先由DNS服务器将域名解析为网站服务器的IP地址,http或者https协议将用户的请求发送给此IP地址对应的web服务器,web服务器收到请求后就在自己的网站目录下寻找相对应的页面文件(例如index.html),将文件内容返回给用户(浏览器),浏览器收到web服务器的响应后,接收并下载服务器的html静态代码,然后浏览器解读代码,最终将网页内容呈现出来。
2、访问动态页面
流程和静态页面是一样的,只不过是多一步解析动态脚本的步骤。首先DNS域名解析,然后web服务器收到用户的请求后找到对应的php脚本文件,然后将此脚本委托给php服务器处理,php服务器将脚本解析成静态代码,再将静态代码返回给web服务器,web服务器再将静态代码返回给用户,最终在浏览器上呈现出来。
3、访问数据库
流程和动态页面是一样的,只不是多了一步访问数据库的步骤。首先DNS域名解析,web服务器收到请求后找到对应的php脚本文件,将此脚本委托给php服务器处理,php服务器通过解析脚本去连接数据库,从数据库里将数据取出来,再将数据生成静态代码发给web服务器,web服务器再将静态代码返回给用户,最终在浏览器上呈现出来。

四、处理动态页面的三种方式

关于动静态分离,经常有人问,不是说apache本身不能处理动态页面吗,那为什么会有人说用nginx处理静态页面,用apache处理动态页面?
那我只能说是你理解错了,apache本身是不支持动态页面处理的,而是将动态页面交由php或者tomcat等其他服务程序去处理,php或者tomcat等服务程序将处理后的静态页面返回给apache,apache再将静态内容呈现给客户。
那又有人说了,即然动态页面是由php程序处理的,那为什么会有人说apache处理动态页面要比nginx好,既然都是由php处理动态页面,那nginx和apache有什么区别,不都是把处理后的静态内容返回给客户吗,为什么要说处理动态页面apache要比nginx好呢?
那我只能说还是你理解错了,应该说apache和php结合的更好一些,但这是以前,如果站在现在这个角度上讲,谁好谁差还不一定呢,为什么这么说,请继续往下看。
以php为例,我们先来看一下处理动态页面的三种方式。

1、mod_php
即模块的方式,把php服务做为模块来进行调用,模块将相关函数嵌入web服务请求处理流程,不需要额外的解释器进程。例如apache的libphp5.so模块,注意libphp5.so是php提供的,不是apache自带的。
下面是apache配置文件里php模块的配置内容

DirectoryIndex index.php index.html index.html.var
LoadModule php5_module modules/libphp5.so
<IfModule mime_module>
AddType application/x-httpd-php .php
AddType applicaiton/x-httpd-php-source .phps

简单来讲,就是apache将php做为自己的一个模块来使用。
2、CGI
这个模式很少人使用,因为每次调用它都需要fork一个解释器进程来执行php脚本,执行结束后进程随之退出。一个请求就需要fork一个进程,周而复始,效率低下不说,还大量消耗服务器资源。
下面是apache关于CGI的配置
配置文件里启用CGI模式

#LoadModule php5_module modules/libphp5.so
Action application/x-httpd-php /cgi-bin/php-cgi

然后将CGI脚本文件拷贝到apache的cgi-bin目录下
cp /usr/bin/php-cgi /var/www/cgi-bin/
3、FastCGI
FastCGI模式是指由单独的进程管理器如php-fpm启动并管理多个解释器进程,web服务器只需将脚本传给php-fpm执行即可。执行完毕后解释器进程不会退出,而是等待下一个请求。这种方式既适用于本地部署,也适用于分布式架构,并且多个进程并行处理,不仅配置灵活,而且效率高。
以下是nginx配置文件里关于FastCGI的配置内容

location ~ \.php$ {
    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

4、简单总结
假设web服务器是一家公司,那么mod_php方式就如同php是它的一个部门,关于php的问题这个部门可以直接处理;CGI模式相当于公司没有专门处理php问题的部门,遇到php相关的事情需要处理,就临时拉人成立一个工作小组,问题解决后这个临时小组也就解散了;FastCGI模式相当于公司之间的合作,web和php分别是两家公司,web公司将php业务外包给php公司负责。
说了这么多,那到底在动态页面处理方面,apache好还是nginx好呢?
其实无论是mod_php、还是FastCGI,都有其自己的优势。以前在FastCGI技术还不成熟的时候,自然是mod_php稳定、处理速度更快一些,可是社会是不断在向前进步的,现如今FastCGI技术已经非常成熟了,网上也有很多人做了相关的测试,说是FastCGI比mod_php更稳定、速度更快。我个人认为,如果是单机部署的话,可考虑使用mod_php方式,因为毕竟多启一个进程对系统而言就多了一些资源消耗;如果分开部署的话,可考虑使用FastCGI,现在越来越多的人使用nginx+php架构了。

五、tomcat处理Jsp/Servlet

1、Jsp
Jsp全称是Java Server Pages,它和Servlet技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。Jsp的最大特点在于,写jsp就像在写html,html只能为用户提供静态数据,而jsp技术允许 在页面中嵌套java代码,为用户提供动态数据。
tomcat在jsp页面的处理上与php一样,就是个解析器。tomcat与php相同的是,它们都是动态脚本解析器;不同的是,tomcat本身还能处理静态页面,同时又是一个web服务器。
2、Servlet
Java Servlet是Java Web的三大组件之一,是Java语言编写的运行在服务器端的小程序,由Servlet容器管理,用于交互式地浏览和修改数据,生成动态的内容。编写一个Servlet,实际上就是按照Servlet规范编写一个Java类。Servlet被编译为平台独立的字节码,可以被动态地加载到支持Java技术的web服务器中运行。
与jsp、php不同的是,它是在servlet容器中独立运行的程序,而不是嵌入在网站页面里的。

原文地址:http://blog.51cto.com/andyxu/2306579

时间: 2024-10-14 21:13:05

详谈Apache、Nginx和tomcat的区别以及处理静态页面和动态页面的方式的相关文章

nginx与tomcat的区别

nginx与tomcat的区别 nginx常用做静态内容服务和代理服务器,直面外来请求转发给后面的应用服务(tomcat,django等),tomcat更多用来做做一个应用容器,让javaweb app跑在里面的东西,对应同级别的有jboss,jetty等.严格的来说,Apache/Nginx 应该叫做HTTP Server:而Tomcat则是一个Application Server,或者更准确的来说,是一个Servlet/JSP应用的容器(Ruby/Python 等其他语言开发的应用也无法直接

Apache、Nginx与Tomcat的区别

一.     定义: 1.     Apache Apache HTTP服务器是一个模块化的服务器,可以运行在几乎所有广泛使用的计算机平台上.其属于应用服务器.Apache支持支持模块多,性能稳定,Apache本身是静态解析,适合静态HTML.图片等,但可以通过扩展脚本.模块等支持动态页面等. (Apche可以支持PHPcgiperl,但是要使用Java的话,你需要Tomcat在Apache后台支撑,将Java请求由Apache转发给Tomcat处理.) 缺点:配置相对复杂,自身不支持动态页面.

静态页面和动态页面的区别

一.静态web页面: 1.在静态Web程序中,客户端使用Web浏览器(IE.FireFox等)经过网络(Network)连接到服务器上,使用HTTP协议发起一个请求(Request),告诉服务器我现在需要得到哪个页面,所有的请求交给Web服务器,之后WEB服务器根据用户的需要,从文件系统(存放了所有静态页面的磁盘)取出内容.之后通过Web服务器返回给客户端,客户端接收到内容之后经过浏览器渲染解析,得到显示的效果. 2.为了让静态web页面显示更加好看,使用javascript/VBScript/

静态页面、动态页面和伪静态页面的区别

1.静态页面 优点:相对于其他两种页面(动态页面和伪静态页面),速度最快,而且不需要从数据库里面提取数据,速度快的同时,也不会对服务器产生压力. 缺点:由于数据都是存储在HTML里面,所以导致文件非常大.并且最严重的问题是,更改源代码必须全部更改,而不能改一个地方,全站静态页面就自动更改了.如果是大型网站有较多的数据,那会占用大量的服务器空间,每次添加内容都会生成新的HTML页面.如果不是专业人士维护比较麻烦. 2.动态页面 优点:空间使用量非常小,一般几万条数据的网站,使用动态页面,可能只有几

CentOS7.4—构建Apache+Nginx动静分离

构建Apache+Nginx动静分离实验目的:html静态页面由nginx处理,php动态页面交给apache处理 目录第一部分 准备工作第二部分 配置apache+nginx动静分离第三部分 测试验证 第一部分 环境准备一:服务器两台:Linux系统-CentOS 7.4IP地址:192.168.80.10(搭建LAMP)192.168.80.40(搭建LNMP) 客户端一台:以WIN7为例,用来测试验证,与服务器同一网段IP地址:192.168.80.2二:将防火墙与selinux关闭 注意

LAMP(Apache+Nginx+Php)

一.LAMP应用平台概述: 1.概述:LAMP是目前最成熟的一种企业网站应用模式,可以提供动态web站点应用及开发环境,其构成linux.apache.mysql.php或python或perl等语言,优势:成本低.易于开发.方便易用.安全稳定:2.网站分类:静态:有纯html标签语言编写而成的页面,无论在什么环境,什么身份访问都不会发生变化:动态:由网页的编程语言编写,例:java.php..net.python语言,的动态页面,动态页面是由动态页面和html组成为一个网页页面,可以与数据库进

静态include与动态include的区别

jsp中的include有两种形式,分别是:<%@ include file=""%><jsp:include page="" flush="true" />前者是指令元素,后者是行为元素.<%@ include file=""%>,jsp的include指令元素读入指定页面的内容,并把这些内容融合到一起(这个过程在翻译阶段:也就是jsp被转化成servlet的阶段进行的),也就是说,jsp

Apache和Tomcat的区别及Web服务器,容器和应用服务器区别问题

清理书签的时候发现了遗留的Apache和Tomcat的区别的问题.打算把刚开始学习Servlet的时候的问题一同解决了,刚开始学习J2EE的时候,先学习的是Servlet,运行需要Tomcat,当时我很郁闷这是什么东西,什么Web容器,真不懂,后面请教了朋友,朋友说暂时把它当成一个服务器理解就好了. 接下来问题有: 1.什么是服务器? 2.Web服务器,Web容器和应用服务器的区别? 3.Apache和Tomcat的区别? 4.都是服务器,那么我们经常还听到Nginx这样的服务器,和Apache

Apache Http Server和Tomcat 之区别

转自:Apache Http Server和Tomcat 之区别 Apache官方网站:http://www.apache.org/Tomcat官方网站:http://tomcat.apache.org/ 1. Apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展. 2. Apache和Tomcat都可以做为独立的web服务器来运行,但是Apache不能解释java程序(jsp,serverlet). 3. Apache是普通服务器