0


Nginx与Apache、Tomcat区别

一、Nginx与Apache区别

Apache和Nginx是两种常见的Web服务器软件。

  • 架构:Apache采用多进程架构,每个请求都由一个独立的进程处理;而Nginx采用异步事件驱动的架构,可以处理更多的并发连接。
  • 性能:由于Nginx的架构设计,它可以处理更多的并发连接,而且在高负载情况下表现更加稳定和可靠。因此,Nginx通常被认为是比Apache更高效的Web服务器。
  • 配置:Apache的配置文件比较复杂,需要一定的学习和经验才能正确配置;而Nginx的配置文件比较简洁和可读性强,更容易理解和配置。
  • 功能:Apache有许多模块可以扩展其功能,例如mod_rewrite用于URL重写,mod_ssl用于SSL加密等;而Nginx的功能比较简单,但是可以通过第三方模块扩展其功能。

Nginx处理大并发静态请求效率高于其他软件,可作为负载均衡服务器,可承受3万以上并发连接数,是Apache的10倍。4GB内存的服务器+Apache(prefork模式)一般只能处理3000个并发连接,占用3GB以上内存,Nginx在3万并发连接下,消耗不到2GB内存。这也使得其在短短几年里,就拿下了Web服务器大壁江山。

那么为什么Nginx的处理高并发要优于httpd,我们先从两种Web服务器的工作原理及工作模式说起。

Apache的三种工作模式

Prefork——多进程

多进程,每个请求用一个进程响应,这个过程会用到select机制来通知

工作原理:如果不用“–with-mpm”显式指定某种MPM,prefork就是Unix平台上缺省的MPM。它所采用的预派生子进程方式也是 Apache1.3中采用的模式。prefork本身并没有使用到线程,2.0版使用它是为了与1.3版保持兼容性;另一方面,prefork用单独的子进程来处理不同的请求,进程之间是彼此独立的,这也是其成为最稳定的MPM之一。

Worker——多线程

多线程,一个进程可以生成多个线程,每个线程响应一个请求,但通知机制还是select不过可以接受更多的请求

工作原理:相对于prefork,worker是2.0版中全新的支持多线程和多进程混合模型的MPM。由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器。但是,worker也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性,这种MPM的工作方式将是Apache2.0的发展趋势。

Event——基于异步I/O模型

基于异步I/O模型,一个进程或线程,每个进程或线程响应多个用户请求,它是基于事件驱动(也就是epoll机制)实现的

工作原理:event基于事件机制的特性,一个进程响应多个用户请求,利用callback机制,让套接字复用,请求过来后进程并不处理请求,而是直接交由其他机制来处理,通过epoll机制来通知请求是否完成;在这个过程中,进程本身一直处于空闲状态,可以一直接收用户请求。可以实现一个进程程响应多个用户请求。支持持海量并发连接数,消耗更少的资源。

如何提高Web服务器的并发连接处理能力

  1. 基于线程,即一个进程生成多个线程,每个线程响应用户的每个请求。
  2. 基于事件的模型,一个进程处理多个请求,并且通过epoll机制来通知用户请求完成。
  3. 基于磁盘的IO(异步I/O)
  4. 支持mmap内存映射,mmap传统的web服务器,进行页面输入时,都是将磁盘的页面先输入到内核缓存中,再由内核缓存中复制一份到web服务器上,mmap机制就是让内核缓存与磁盘进行映射,web服务器,直接复制页面内容即可。不需要先把磁盘的上的页面先输入到内核缓存去。

Nginx优异之处

  • 传统Web服务基于进程/线程,每个进程/线程处理并发连接请求,产生阻塞,利用率低下。
  • 新的进程/线程需备好运行时环境,如堆内存、栈内存和执行上下文,占用CPU,过多进程/线程导致线程抖动、上下文切换,进一步降低系统性能。
  • Nginx采用模块化、事件驱动、异步、单线程及非阻塞的架构,多路复用及事件通知机制,每个Worker处理数千个并发连接及请求。
  • Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性。
  • 作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率。
  • 作为负载均衡服务器: Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。
  • 作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。

既然Nginx与Apache快,那么为什么Nginx没有取代Apache

  • 因为两个东西的侧重点不一样,Apache自身内置了很多东西,无需借助其他东西就能够几乎所有的Web类型应用进行支持。而Nginx不同,它在静态文件的处理、高并发方面比较有优势。
  • Apache侧重在完整稳定上,而Nginx侧重在轻量高效上,很多时候Apache和Nginx是配合使用的,Nginx配置在Apache前面,用它挡掉静态文件的请求(网站今天资源的请求占了大部分的),Nginx处理不了的内容才转发给Apache来处理。

Nginx工作原理

Nginx会按需同时运行多个进程:一个主进程(master)和几个工作进程(worker),配置了缓存时还会有缓存加载器进程(cache loader)和缓存管理器进程(cache manager)等。所有进程均是仅含有一个线程,并主要通过“共享内存”的机制实现进程间通信。主进程以root用户身份运行,而worker、cache loader和cache manager均以非特权用户身份运行。

在高连接并发的情况下,Nginx是Apache服务器不错的替代品。

Nginx安装简单,配置文件简洁且支持Perl语法,Bug极少。Nginx启动容易,可7*24不间断运行数月,且可在不中断服务的情况下升级软件版本。

Apache与Nginx比较

在选择Web服务器时,Nginx和Apache都是备受推崇的选择。然而,对于许多开发者和管理员来说,选择哪一个可能会成为一个难以解决的问题。因此,我们需要对两者进行比较,以确定哪一个更适合我们的需求。

首先,Nginx以其高效的性能而闻名。它是一个轻量级的Web服务器,可以处理大量并发连接。相比之下,Apache是一个成熟的Web服务器,但它在处理并发连接时可能会出现性能瓶颈。因此,如果您需要处理大量并发连接,Nginx可能是更好的选择。

其次,Nginx具有更好的负载均衡功能。它可以在多个服务器之间均衡地分配流量,以提高性能和可靠性。Apache也可以实现负载均衡,但相对来说要更为复杂。

最后,Nginx的配置文件比Apache更为简单和易于理解。这意味着您可以更快地配置服务器并更快地上线。相比之下,Apache的配置可能会更加复杂,需要更多的时间和精力。

Nginx

  • 轻量级,采用 C 进行编写,同样的 web 服务,会占用更少的内存及资源
  • 抗并发,nginx 以 epoll and kqueue 作为开发模型,处理请求是异步非阻塞的,负载能力比 apache 高很多,而 apache 则是阻塞型的。在高并发下 nginx 能保持低资源低消耗高性能 ,而 apache 在 PHP 处理慢或者前端压力很大的情况下,很容易出现进程数飙升,从而拒绝服务的现象。
  • nginx 处理静态文件好,静态处理性能比 apache 高三倍以上
  • nginx 的设计高度模块化,编写模块相对简单
  • nginx 配置简洁,正则配置让很多事情变得简单,而且改完配置能使用 -t 测试配置有没有问题,apache 配置复杂 ,重启的时候发现配置出错了,会很崩溃
  • nginx 作为[负载均衡务器],支持 7 层负载均衡
  • nginx 本身就是一个反向代理服务器,而且可以作为非常优秀的邮件代理服务器
  • 启动特别容易, 并且几乎可以做到 7*24 不间断运行,即使运行数个月也不需要重新启动,还能够不间断服务的情况下进行软件版本的升级
  • 社区活跃,各种高性能模块出品迅速

Apache

  • apache 的 rewrite 比 nginx 强大,在 rewrite 频繁的情况下,用 apache
  • apache 发展到现在,模块超多,基本想到的都可以找到
  • apache 更为成熟,少 bug ,nginx 的 bug 相对较多
  • apache 超稳定
  • apache 对 PHP 支持比较简单,nginx 需要配合其他后端用
  • apache 在处理动态请求有优势,nginx 在这方面是鸡肋,一般动态请求要 apache 去做,nginx 适合静态和反向。
  • apache 仍然是目前的主流,拥有丰富的特性,成熟的技术和开发社区

我们到底是选择Nginx还是Apache

  • apache运行php比较好,适合跑动态
  • nginx比较适合跑静态(如果想让nginx跑动态只能支持跳转)。
  • 现在流行的lanmp架构就是同时使用apache和nginx,静态网页有nginx处理,动态交由apache处理,这样就能更大限度的发挥服务器性能。
  • 通用的方案是,前端 nginx 抗并发,后端 apache 集群,配合起来会更好。

总结

两者最核心的区别在于 apache 是同步多进程模型,一个连接对应一个进程,而 nginx 是异步的,多个连接(万级别)可以对应一个进程

一般来说,需要性能的web服务,用nginx 。如果不需要性能只求稳定,更考虑 apache ,后者的各种功能模块实现得比前者,例如 ssl 的模块就比前者好,可配置项多。epoll(freebsd 上是 kqueue ) 网络 IO 模型是 nginx 处理性能高的根本理由,但并不是所有的情况下都是 epoll 大获全胜的,如果本身提供静态服务的就只有寥寥几个文件,apache 的 select 模型或许比 epoll 更高性能。当然,这只是根据网络 IO 模型的原理作的一个假设,真正的应用还是需要实测了再说的。

综上所述,Apache和Nginx各有优缺点。在选择使用哪种Web服务器时,需要根据具体的需求和场景来综合考虑。

Nginx常用命令大全

nginx -s reopen #日志分割

nginx -s reload #重新加载Nginx配置文件

nginx -s stop #强制停止Nginx服务

nginx -s quit #优雅地停止Nginx服务(即处理完所有请求后再停止服务)

nginx -t #检测配置文件是否有语法错误,然后退出

nginx -?,-h #打开帮助信息

nginx -v #显示版本信息并退出

nginx -V #显示版本和配置选项信息,然后退出

nginx -T #检测配置文件是否有语法错误,转储并退出

nginx -q #在检测配置文件期间屏蔽非错误信息

nginx -p prefix #设置前缀路径(默认是:/usr/share/nginx/)

nginx -c filename #设置配置文件(默认是:/etc/nginx/nginx.conf)

nginx -g directives #设置配置文件外的全局指令

killall nginx #杀死所有nginx进程

Nginx在WIndows下常用命令

启动

直接点击Nginx目录下的nginx.exe 或者 cmd运行start nginx

关闭

nginx -s stop 或者 nginx -s quit

stop表示立即停止nginx,不保存相关信息

quit表示正常退出nginx,并保存相关信息

nginx -s stop 或者 nginx -s quit

nginx -s reload :修改配置后重新加载生效

nginx -s reopen :分割日志

**nginx -t -c /path/to/nginx.conf **测试nginx配置文件是否正确

二、Nginx与Tomcat区别

Nginx和Tomcat是两种不同的技术,它们在应用场景、性能、动态处理能力等方面有所区别:

  • 应用场景。Nginx通常用作静态内容服务器或代理服务器,可以将外部请求转发给其他应用服务器,如Tomcat、Django等。而Tomcat则主要用作应用服务器,用于运行Java Web应用程序,如JSP和Servlet。
  • 性能。在静态内容处理方面,Nginx能够支持高并发,因为它使用了异步非阻塞的模型,能够轻松处理数以百万级别的并发连接。相比之下,Tomcat在静态内容处理方面可能不如Nginx高效。
  • 配置。Tomcat配置相对简单,主要修改server.xml等配置文件来管理。而Nginx的配置更为灵活和强大,包括对HTTP、TCP、UDP等多种协议的支持。
  • 安全性。Tomcat和Nginx都提供了SSL/TLS加密等安全性功能,但它们的应用场景和安全侧重点不同。Nginx在流媒体等安全敏感场景中表现更佳,而Tomcat则更侧重于应用层面的安全。
  • 扩展性。Tomcat通过插件机制可以实现各种功能,但通常需要与Java技术栈结合使用。而Nginx则通过模块化的设计,能够方便地扩展其功能,包括与PHP、Python等其他语言集成。
  • 动态处理能力。Nginx本身不支持动态处理,如JSP或Servlet,需要依赖其他插件或后端软件(如PHP)来支持动态内容。而Tomcat是一个标准的Servlet和JSP容器,能够处理动态内容。
  • 架构设计。Nginx基于事件驱动架构,使用epoll或kqueue等高性能的网络事件模型。而Tomcat则基于传统的请求-响应模型,每个请求都需要一个线程来处理。
  • 日志管理。Tomcat主要记录应用程序级别的日志,而Nginx则提供了更详细的日志记录和访问控制功能。
  • 内存和资源消耗。Nginx在内存和资源消耗方面表现出色,因为它使用了轻量级的设计,能够以较低的资源消耗处理高并发的请求。相比之下,Tomcat在内存和资源消耗方面通常更高,因为它需要更多的资源来运行和处理动态内容。

严格意义上来讲,nginx应该叫做HTTP Server,而tomcat是一个Application Server是一个Servlet/JSO应用的容器。客户端通过HTTP Server访问服务器上存储的资源(HTML文件,图片文件等),HTTP Server只是把服务器上的文件如实通过HTTP协议传输给客户端。服务器往往是运行在HTTP Server的背后,执行应用,将动态的内容转化为静态的内容之后,通过HTTP Server分发到客户端。

注意:nginx只是把请求做了分发,不做处理!

标签: nginx apache tomcat

本文转载自: https://blog.csdn.net/G_D0120/article/details/136270984
版权归原作者 一坨小橙子ovo 所有, 如有侵权,请联系我们删除。

“Nginx与Apache、Tomcat区别”的评论:

还没有评论