Nginx介绍

12/15/2022

# Nginx引言

# 需求

我们早期Java的Web项目直接通过打包jar包或者war包发布到tomcat内容,用户通过访问tomcat容器获取对应的资源。

img

但是随着用户量增加,并发也慢慢增大,这个时候一台tomcat服务器不能满足我们的需求。

img

因此,我们通常选择横向扩展,即新增服务器,也就做集群。这个时候Web项目分布在不同的服务器上,而对于用户来说,只需要暴露统一的访问入口即可。这个时候我们需要增强 一个代理服务器,通过代理服务器来帮助我们转发和处理请求。

img

简单俩说,用户访问代理服务器,然后转发到不同的tomcat服务器节点上,这个代理服务器,我们就可以选用Nginx。

# 介绍

Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供IMAP/POP3/SMTP服务器。它是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。2011年6月1日,nginx 1.0.4发布。

Nginx特点是占有内存少,并发能力强。它的代码完全用C语言从头写,观法数据测试表明能够支持高达5W个并发连接数的响应。同时Nginx启动简单、Bug少,能够全天候不间断运行。目前在国内有很多使用nginx网站用户,例如百度、京东、新浪、网易、腾讯、淘宝等。在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站。

# Nginx作用

# 反向代理

在介绍反向代理前,首先了解一下正向代理。正向代理可以理解为是客户端的代理,也就是我们的特定网络请求会统一经过一个专门代理服务器,然后代理服务器转发给目标服务器。

![image-20220919121907145](README.assets/20220919121907 .png)

反向代理是服务器代理,用户访问某个网站,发出网络请求,代理服务器将请求转发给目标服务器。对于用户来说是一个无感知的过程,用户并不知道哪个服务器返回的结果。

# 负载均衡

反向代理的服务器由于物理性能不同,我们通常会根据性能高低来分配请求,使得性能高的服务器能接受更多网络请求,让我们资源利用率最大化。在Nginx中称为负载均衡,我们可以通过某种特定策略来将请求进行加权分配。在Nginx中常见的三种策略是轮询、加权轮询和iphash。

  • 轮询

    img

    每个服务器权重一致,每次请求都会轮换。

  • 加权轮询

    img

    可根据服务器性能高低,来分配不同权重。权重高的服务器会接收更多的网络请求。

  • iphash

    img

    iphash对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。

# 动静分离

在我们Web项目中,有些请求是需要后端处理,有些请求是不需要经过后端处理(如:CSS、HTML、JS、JPG等文件)。这些不需要后端处理的资源称为静态资源(静态文件)。我们在项目内通常会将动态和静态资源拆分,这样就可以根据静态资源特点进行缓存,提高资源响应的速率。

Nginx的动静分离是指我们将静态资源放到nginx服务器内,动态资源放到web应用服务器内。使用Nginx大大提高了我们网站的响应速度,优化了用户体验。

img

# 参考

  • https://www.kuangstudy.com/bbs/1353634800149213186
  • https://www.bilibili.com/video/BV1F5411J7vK/
  • https://www.bilibili.com/video/BV1yS4y1N76R/
Last Updated: 12/16/2022, 2:02:52 PM