一.简介
Nginx 是⼀个高性能的 HTTP 和反向代理 Web 服务器。它的主要功能包括反向代理、负载均衡和动静分离等。正因为 Nginx 的这些功能能够为系统带来性能和安全方面的诸多优势,我们在项目部署时需要引入 Nginx 组件。接下来我们会逐一向大家介绍nginx的核心功能。
二.功能
1.正向代理
正向代理通常是指客户端(如浏览器)通过代理服务器来访问互联网上的其他服务器。在这种情况下,客户端配置了代理设置(注意这个代理是在客户端配置的),所有对外的请求都会先发送到代理服务器上,再由代理服务器转发到真正的目标服务器。这样做的好处包括但不限于:
1)隐私保护:客户端的真实IP地址不会直接暴露给外部服务器;
2)缓存:如果代理服务器具有缓存功能,那么对于频繁请求的数据,可以直接从缓存中返回结果,提高响应速度;
3)内容过滤:组织或企业可以使用正向代理对员工的上网行为进行监控或者过滤不合适的网站内容。

2.反向代理
反向代理则是指客户端直接访问的服务器实际上是⼀个代理服务器(注意代理服务器在服务器端配置),这个代理服务器接收客户端的请求后,会将请求转发给真正的后端服务器。客户端本身是不知道这个代理服务器存在的。反向代理的应用场景包括:
1)负载均衡:通过反向代理可以在多个后端服务器之间分配请求,以分散单个服务器的压力。这个也是我们下⼀个要讲到的功能;
2)安全性:隐藏真实的后端服务器地址,增加了一层安全防护;
3)缓存与加速:类似于正向代理,反向代理也可以实现缓存功能,减少后端服务器的负载并加快响应速度。

3.负载均衡
为了避免单点故障或者现有的请求使服务器压力太大无法承受,所有我们需要搭建⼀个服务器集群(如上图所示服务端有多个服务器),将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将“负载”均衡的分发到不同的服务器,也就是我们所说的负载均衡。
那假如我们增加了A、B、C、D等等多台服务器,我们需要把请求分给这些服务器,但是每个服务器也有自己的不同,性能也可能不均,所以怎么分?如何分配更好?又是⼀个问题。nginx提供了几种算法来解决这个问题:
1)轮询法(默认法)
每个请求按时间顺序逐⼀分配到不同的后端服务器;
适合服务器配置相当,性能无差异的情况。
2)weight (权重模式,加权轮询)
指定轮询几率, weight 和 访问比率 成正比,用于后端服务器性能不均的情况;
这种方式比较灵活,当后端服务器性能存在差异的时候,通过配置权重,可以让服务器的性能得到充分发挥,有效利用资源。 weight 和 访问比率 成正比,权重越高,在被访问的概率越大。
3)ip_hash
请求通过哈希算法,自动定位到该服务器。每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器;
4)最少连接(least_conn)
nginx 会统计每个后端服务器当前的活动连接数,当有新的请求到来时,将请求分配到活动连接数最少的服务器上;
能够根据服务器的实际负载情况动态地分配请求,将新请求分配到当前连接数最少的服务器上,避免某些服务器负载过高而其他服务器负载过低的情况。
4.动静分离
动:动态资源。 动态资源指的是通过请求服务器获取到的资源。
静:静态资源。静态资源指的是不需要通过请求服务器就可以得到的资源。如: css 、html 、 jpg 、 js 等文件)。
这些静态资源既然无需服务器处理,则可以由nginx直接来处理无需后端服务器介入。这样可以减轻后端服务器的负载,使其专注于处理动态内容,从而提高整体性能。并且们还可以根据 静态资源 的特点将其做缓存操作,以提高资源的响应速度。如下图所示:动态资源和静态资源的处理是分开的。
三.测试
实现在docker准备一个nginx容器:
docker run --name test-nginx -d -p 5413:80 nginx
并在Idea上写下下列代码:
@RestController
@RequestMapping("/test/nginx")
@Slf4j
public class NginxTestController {
@GetMapping("/info")
public void info() {
log.info("负载均衡测试");
return ;
}
}
接下来是重点,修改nginx的配置文件。
主配置文件: /etc/nginx/nginx.conf
附加配置文件:在 /etc/nginx/conf.d/ 目录下,已经默认给我们提供了⼀个附加配置文件: /etc/nginx/conf.d/default.conf ,在主配置文件中会引入附加配置文件,如下。这样也就意味着nginx的完整的配置应该是主配置文件+附加配置文件。
我将附加配置文件中的内容进行了修改:
主要有下面两部分,大家请看:

请求接口是:localhost:5413/test-dev/test/nginx/info
发起请求后大家自行查看打印的日志,这里就不过多赘述了。
不同负载均衡算法:
1)轮询
upstream test {
server 本机ip:9201;
server 本机ip:9301;
}
2)加权轮询
upstream test {
server 本机ip:9201 weight=1;
server 本机ip:9301 weight=2;
}
3)ip_hash
upstream test {
server 本机ip:9201;
server 本机ip:9301;
ip_hash;
}
4)最小连接数
upstream test {
server 本机ip:9201;
server 本机ip:9301;
least_conn;
}

2233

被折叠的 条评论
为什么被折叠?



