Nginx和Apache和Tomcat的区别及优缺点(转)

概述

Nginx 和 Apache 和 Tomcat 的区别及优缺点。

详述

概念

Apache

Apache HTTP Server(简称 Apache)是 Apache 软件基金会的一个开放源码的网页,它是一个模块化的服务器,可以运行在几乎所有广泛使用的计算机平台上。其属于应用服务器。
Apache 支持模块多,性能稳定,Apache 本身是静态解析,适合静态 HTML、图片等,但可以通过扩展脚本、模块等支持动态页面等。

缺点:配置相对复杂,自身不支持动态页面。
优点:相对于 Tomcat 服务器来说处理静态文件是它的优势,速度快。Apache 是静态解析,适合静态 HTML、图片等。

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

Tomcat:

Tomcat 是 Apache 软件基金会(Apache Software Foundation)的 Jakarta 项目中的一个核心项目。Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器。
Tomcat 是应用(Java)服务器,它只是一个 Servlet(JSP 也翻译成 Servlet)容器,可以认为是 Apache 的扩展,但是可以独立于 Apache 运行。

缺点:可以说 Tomcat 只能用做 java 服务器
优点:动态解析容器,处理动态请求,是编译 JSP/Servlet 的容器。

三个端口:
8005:关闭 tomcat 通信接口
8009:与其他 http 服务器通信接口,用于 http 服务器集合
8080:建立 http 连接 用,如浏览器访问

Nginx

Nginx 是俄罗斯人编写的十分轻量级的 HTTP 服务器,Nginx,它的发音为“engine X”,是一个高性能的 HTTP 和反向代理服务器,同时也是一个 IMAP/POP3/SMTP 代理服务器。其特点是占有内存少,并发能力强,易于开发,部署方便。Nginx 支持多语言通用服务器。

缺点:Nginx 只适合静态和反向代理。
优点:负载均衡、反向代理、处理静态文件优势。Nginx 处理静态请求的速度高于 Apache。

Nginx 有动态分离机制,静态请求直接就可以通过 Nginx 处理,动态请求才转发请求到后台交由 Tomcat 进行处理。

Tomcat 结合 Apache、Nginx 实现高性能的 web 服务器

Tomcat 虽然是一个 servlet 和 jsp 容器,但是它也是一个轻量级的 web 服务器。它既可以处理动态内容,也可以处理静态内容。不过,tomcat 的最大优势在于处理动态请求,处理静态内容的能力不如 apache 和 nginx,并且经过测试发现,tomcat 在高并发的场景下,其接受的最大并发连接数是有限制的,连接数过多会导致 tomcat 处于”僵死”状态,因此,在这种情况下,我们可以利用 nginx 的高并发,低消耗的特点与 tomcat 一起使用。因此,tomcat 与 nginx、apache 结合使用共有如下几点原因:

  • tomcat 处理 html 的能力不如 Apache 和 nginx,tomcat 处理静态内容的速度不如 apache 和 nginx。
  • tomcat 接受的最大并发数有限,连接数过多,会导致 tomcat 处于”僵尸”状态,对后续的连接失去响应,需要结合 nginx 一起使用。

通常情况下,tomcat 与 nginx、Apache 结合使用,nginx、apache 既可以提供 web 服务,也可以转发动态请求至 tomcat 服务器上。但在一个高性能的站点上,通常 nginx、apache 只提供代理的功能,也就是转发请求至 tomcat 服务器上,而对于静态内容的响应,则由前端负载均衡器来转发至专门的静态服务器上进行处理。其架构类似于如下图:

架构示例图

在这种架构中,当 haproxy 或 nginx 作为前端代理时,如果是静态内容,如 html、css 等内容,则直接交给静态服务器处理;如果请求的图片等内容,则直接交给图片服务器处理;如果请求的是动态内容,则交给 tomcat 服务器处理,不过在 tomcat 服务器上,同时运行着 nginx 服务器,此时的 nginx 作为静态服务器,它不处理静态请求,它的作用主要是接受请求,并将请求转发给 tomcat 服务器的,除此之外,nginx 没有任何作用。

区别:

Nginx 和 tomcat 的区别

nginx 常用做静态内容服务和代理服务器,直接外来请求转发给后面的应用服务器(tomcat,Django 等),tomcat 更多用来做一个应用容器,让 java web app 泡在里面的东西。严格意义上来讲,Apache 和 nginx 应该叫做 HTTP Server,而 tomcat 是一个 Application Server 是一个 Servlet/JSO 应用的容器。
客户端通过 HTTP Server 访问服务器上存储的资源(HTML 文件,图片文件等),HTTP Server 是中只是把服务器上的文件如实通过 HTTP 协议传输给客户端。
应用服务器往往是运行在 HTTP Server 的背后,执行应用,将动态的内容转化为静态的内容之后,通过 HTTP Server 分发到客户端
注意:nginx 只是把请求做了分发,不做处理!!!

nginx 和 Apache 的区别

Apache 是同步多进程模型,一个连接对应一个进程,而 nginx 是异步的,多个连接(万级别)可以对应一个进程。
nginx 轻量级,抗并发,处理静态文件好
Apache 超稳定,对 PHP 支持比较简单,nginx 需要配合其他后端用,处理动态请求有优势,建议使用前端 nginx 抗并发,后端 apache 集群,配合起来会更好
nignx 的正向代理和反向代理

优缺点比较

  • nginx 相对于 apache 的优点
    轻量级,同样起 web 服务,比 apache 占用更少的内存及资源 抗并发,nginx 处理请求是异步非阻塞的,而 apache 则是阻塞型的,在高并发下 nginx 能保持低资源低消耗高性能高度模块化的设计,编写模块相对简单提供负载均衡
    社区活跃,各种高性能模块出品迅速

  • apache 相对于 nginx 的优点
    apache 的 rewrite(重写) 比 nginx 的强大 ;
    支持动态页面;
    支持的模块多,基本涵盖所有应用;
    性能稳定,而 nginx 相对 bug 较多。

  • 两者优缺点比较
    Nginx 配置简洁, Apache 复杂;
    Nginx 静态处理性能比 Apache 高 3 倍以上;
    Apache 对 PHP 支持比较简单,Nginx 需要配合其他后端用;Apache 的组件比 Nginx 多;
    apache 是同步多进程模型,一个连接对应一个进程;nginx 是异步的,多个连接(万级别)可以对应一个进程;
    nginx 处理静态文件好,耗费内存少;
    动态请求由 apache 去做,nginx 只适合静态和反向;
    Nginx 适合做前端服务器,负载性能很好;
    Nginx 本身就是一个反向代理服务器 ,且支持负载均衡

总结

  • Nginx:负载均衡、反向代理、处理静态文件优势。nginx 处理静态请求的速度高于 apache;
  • Apache:相对于 Tomcat 服务器来说处理静态文件是它的优势,速度快。Apache 是静态解析,适合静态 HTML、图片等。
  • Tomcat:动态解析容器,处理动态请求,是编译 JSP、Servlet 的容器,Nginx 有动态分离机制,静态请求直接就可以通过 Nginx 处理,动态请求才转发请求到后台交由 Tomcat 进行处理。

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

参考

https://blog.csdn.net/weixin_44221613/article/details/88410701