一、什么是Nginx
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器。其特点是占有内存少,并发能力强。我们可以理解Nginx是客户端和服务端的中间件,可以进行对实例的策略管理,提供反向代理、负载均衡和流量控制等策略。
二、Nginx反向代理
正常情况下,我们可以使用浏览器访问国内的网页,而对于像谷歌、油管等国外网站,则需要通过设置代理服务器,才能访问,这就是正向代理。也可以理解为代理了客户端。
而反向代理的意思就是代理了服务器,客户端通过一个ip地址,经由反向代理的服务器(Nginx),再访问到多台服务器的某一台。
三、Nginx应用场景
-
实现反向代理
例如部署博客地址后,会有对应ip的端口号(8080),一般还需要购买域名,而域名默认指向的端口都是80端口,想指向其他端口就需要依赖Nginx反向代理。
配置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:8upstream 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的多线程来实现)
评论区