什么是Nginx?

蹲街弑〆低调 提交于 2020-01-10 14:47:07

这里是修真院后端小课堂,每篇分享文从

【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】

八个方面深度解析后端知识/技能。

大家好,我是IT修真院上海分院一枚正直纯洁善良的JAVA程序员。
今天给大家分享一下,修真院官网JAVA任务三,扩展思考中的知识点——Nginx是什么?

1 背景介绍

1.1 web服务器
Nginx 的竞争对手—Apache、Lighttpd、Tomcat、 Jetty、IIS,它们都是 Web 服务器,或者叫做 WWW(World Wide Web)服务器,相应地 也都具备 Web 服务器的基本功能 :基于 REST 架构风格 ,以统一资源描述符(Uniform Resource Identifier,URI)或者统一资源定位符(Uniform Resource Locator,URL)作为沟 通依据,通过 HTTP 为浏览器等客户端程序提供各种网络服务。然而,由于这些 Web 服务器 在设计阶段就受到许多局限,例如当时的互联网用户规模、网络带宽、产品特点等局限,并 且各自的定位与发展方向都不尽相同,使得每一款 Web 服务器的特点与应用场合都很鲜明。
对比:
1.2 web服务器对比
Tomcat 和 Jetty 面向 Java 语言,先天就是重量级的 Web 服务器,它的性能与 Nginx 没 有可比性,这里略过。

IIS 只能在 Windows 操作系统上运行。Windows 作为服务器在稳定性与其他一些性能上 都不如类 UNIX 操作系统,因此,在需要高性能 Web 服务器的场合下, IIS 可能会被“冷落”。

Apache 的发展时期很长,而且是目前毫无争议的世界第一大 Web 服务器。Apache 有许多优点,如稳定、开源、跨平台等,但它出现的时间太长了,在它兴起的 年代,互联网的产业规模远远比不上今天,所以它被设计成了一个重量级的、不支持高并发 的 Web 服务器。在 Apache 服务器上,如果有数以万计的并发 HTTP 请求同时访问,就会导 致服务器上消耗大量内存,操作系统内核对成百上千的 Apache 进程做进程间切换也会消耗 大量 CPU 资源,并导致 HTTP 请求的平均响应速度降低,这些都决定了 Apache 不可能成为高性能 Web 服务器,这也促使了 Lighttpd 和 Nginx 的出现。

Lighttpd 和 Nginx 一样,都是轻量级、高性能的 Web 服务器,欧美的业界开发者比较钟 爱 Lighttpd,而国内的公司更青睐 Nginx,Lighttpd 使用得比较少。

1.3 为什么选择 Nginx?
(1)更快
(2)高扩展性
(3)高可靠性
(4)低内存消耗
(5)单机支持 10 万以上的并发连接
(6)热部署
(7)最自由的 BSD 许可协议

2 知识剖析

反向代理


动静分离


负载均衡

反向代理:
反向代理(reverse proxy)方式是指用代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络中的上游服务器,并将从上游服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外的表现就是一个Web 服务器。充当反向代理服务器也是Nginx的一种常见用法(反向代理服务器必须能够处理大量并发请求)。
动静分离
由于Nginx 具有“强悍”的高并发高负载能力,因此一般会作为前端的服务器直接向客户端提供静态文件服务,用Apache、Tomcat等服务器来处理动态资源,实现动静分离。
负载均衡
作为代理服务器,一般都需要向上游服务器的集群转发请求。这里的负载均衡是指选择一种策略,尽量把请求平均地分布到每一台上游服务器上。

3 常见问题

怎么降低上游服务器的负载?

4 解决方案

使用Nginx的反向代理可以降低上游服务器的并发压力。

5 编码实战

准备工作:
本地配置两个Tomcat1(端口8080)和Tomcat2(端口8081)
创建test文件,打包成test.war包,添加至Tomcat1(端口8080)和Tomcat2(端口8081)的weapps目录下,运行Tomcat
在这里插入图片描述
在这里插入图片描述
将nginx解压至本地

cmd下运行 start nginx 启动nginx
输入127.0.0.1可以看到nginx已经启动了
在这里插入图片描述
反向代理:
修改conf/nginx.conf文件
在这里插入图片描述
重启nginx负载均衡:
修改conf/nginx.conf文件
在这里插入图片描述
重启nginx
在这里插入图片描述
刷新一下
在这里插入图片描述
6 扩展思考

(1)Nginx正向代理和反向代理http://blog.51cto.com/z00w00/1031287
(2)Nginx中的upstream轮询机制https://www.cnblogs.com/liqiu/p/3140329.html
(3)Nginx如何实现高并发?https://www.cnblogs.com/xawei/p/6812134.html

7 参考文献

《深入理解Nginx:模块开发与架构解析》陶辉 著

8 更多讨论

PPT链接 视频链接

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖


“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,学习的路上不再迷茫。”

技能树·IT修真院:https://www.jnshu.com

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!