概述
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