侧边栏壁纸
  • 累计撰写 23 篇文章
  • 累计创建 12 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

认识中间件-Nginx

usoo
2022-03-18 / 0 评论 / 0 点赞 / 69 阅读 / 0 字

一、什么是Nginx

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器。其特点是占有内存少,并发能力强。我们可以理解Nginx是客户端和服务端的中间件,可以进行对实例的策略管理,提供反向代理、负载均衡和流量控制等策略。

二、Nginx反向代理

正常情况下,我们可以使用浏览器访问国内的网页,而对于像谷歌、油管等国外网站,则需要通过设置代理服务器,才能访问,这就是正向代理。也可以理解为代理了客户端。
mmexport1728741110937_edit_219954826144270

而反向代理的意思就是代理了服务器,客户端通过一个ip地址,经由反向代理的服务器(Nginx),再访问到多台服务器的某一台。

v2-f9f9e276b01856f88b54a4c772cff086_r

三、Nginx应用场景

  • 实现反向代理

例如部署博客地址后,会有对应ip的端口号(8080),一般还需要购买域名,而域名默认指向的端口都是80端口,想指向其他端口就需要依赖Nginx反向代理。
WPS图片(1)

配置Niginx反向代理如下:

1.使用命令打开nginx配置文件

sudo vi /etc/nginx/nginx.conf   //打开nginx配置文件

2.在配置文件中找到监听80端口的部分,修改成监听8080端口,如下所示

        location / {
          proxy_pass http://0.0.0.0:8080;
     }
  • 实现负载均衡

负载均衡是将客户端的请求分摊到多个服务器上进行执行,也就是将负载分担到多个操作单元上共同完成工作任务。

负载均衡

可实现的负载策略有:

  • 轮巡规则。例如有2个实例 A B,命中规则是A B A B A B,交替进行。

配置规则如下(打开nginx配置文件):
1.在http下定义一个共享内存区域,配置要轮巡的实例对象

    upstream myapp {                     # myapp: 变量名
     server 127.0.0.1:8771;              # server: 实例对象
     server 127.0.0.1:8772;
 }

2.修改端口监听下的location配置,添加映射对象

        location / {
          proxy_pass http://myapp;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     }
  • 权重分配。假如有2个实例 A B,A配置1,B配置4, 命中规则是 B A B B B ,根据权重来随机分配。

配置规则如下(打开nginx配置文件):
修改myapp的配置,增加weight的配置项,值为整数,权重分配比例根据所配置的整数进行划分,比方说2:8

    upstream myapp {                  
     server 127.0.0.1:8771 weight=2;             
     server 127.0.0.1:8772 weight=8;
 }
  • 实现流量控制

通过Nginx可以现在客户端的请求次数,达到限流的效果。例如我们可以设置两个参数,1)每秒一个请求,2)超出设置请求之后最多可接收的请求数量为5。那么如果一个ip发送超过了1个请求,Nginx会开始限制该ip,最多允许它发送额外5个请求。

配置规则如下(打开nginx配置文件):
1.在http下定义一个共享内存区域,配置要轮巡的实例对象

limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;     #mylimit: 变量名,rate: 每秒请求不能>=1次

2.修改端口监听下的location配置,添加limit_req 的描述,burst指的是最多可接收的请求数量

     location / {
          limit_req zone=mylimit burst=10 nodelay;   
          proxy_pass http://myapp;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     }

四、Nginx测试策略

  • 测试对象:被测服务中nginx机制的正确性
  • 负载均衡-模拟多个请求,通过服务的日志结果验证负载均衡的策略是否符合期望值
  • 流量控制-模拟多个请求,触发限流规则,验证限流规则是否生效(如果是短时间多个请求,一般可以通过python的多线程来实现)
0

评论区