《高并发下的Nginx性能优化实战》CSDN学院 学习笔记

1.背景

nginx和apache都是Web服务器但是都是通过http协议提供各种网络服务
nginx是轻量级的支持高并发,但是apache服务就不支持。
Rest架构 通过URL来设计系统结构。在REST中,所有的URL都对应着资源,只要URL的设计是良好的,那么其呈现的系统结构也就是良好的。主要不同 之前访问 http://ip:port/queryinfo?userid=1 rest 风格是 http://ip:port/queryinfo/1
低层是C编写,支持IMAP、POP3、ICMP报文,是一个跨平台服务

2.优势

占内存少,高并发能力强,简单,开源不要钱,支持rewriter,内置健康检查,节省带宽,稳定性高,反向代理,很少宕机,BAT都使用。

3.nginx的应用场景

功能 应用场景
web服务器 轻量级 代理服务器
负载 均衡 IP负载 静态负载
缓存 动静分离
高并发 限流和健康监控
4.Nginx配置文件详解
核心模块:
1.Http模块(代理,缓存,日志定义和第三方模块)
2.Events模块(网络连接)
3.全局模块(全局指令,日志路径,PID路径,用户信息等)
基础模块
1.HTTP全局模块
2.HTTP FastCGI模块
3.HTTP Gzip 模块
4.HTTPserver 模块(虚拟主机,一个http,可以有多个server)
5.HTTP location 模块 (请求路径的路由 各种页面的处理)
6.HTTP Rewrite 模块
第三方模块
1.HTTP UpStream Request Hash 模块
2.Notice 模块
3.Http Access key 模块
下图为nginx.conf的文件 来源CSDN学院
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.Nginx的代理模式:

在这里插入图片描述
正向代理:用户访问不了某网站,但是我能访问一个代理服务器,这个代理服务器可以访问我访问不到的网站,于是我先连接上代理服务器,告诉他我需要那个我需要的网站的内容,代理服务器去取回来,然后返回给我。在网站的角度,只是代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求也隐藏了用户的资料,这取决于代理告不告诉网站。一般情况下,如果没有特别说明,代理技术默认是指正向代理技术。
反向代理:和正向代理正好相反,对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别设置。客户端向反向代理的命名空间中的内容发送普通请求,接着反向代理将判断向何处转交请求,并将获取的内容返回给客户端,就像这些内容原本就是它自己的一样。
透明代理:客户端根本不知道有代理服务器的存在
正向代理的作用
1.访问本来无法访问的资源
2.可以做缓存,加速访问资源
3.对客户端访问授权,上网进行认证
4.代理可以记录用户访问记录(上网行为管理)对外隐藏用户信息
反向代理的作用
1.保证内网安全,可以使用反向代理的WAF功能,阻止web攻击
2.负载均衡,通过反向代理服务器来优化网站的负载

5.nginx集群搭建

在配置nginx.conf文件中
HTTP中加入

  upstream   localhost{
          server 192.18.136.133:8081;//目标服务器的地址端口号
          server 192.18.136.134:8081;
          server 192.18.136.135:8081;
          
}

在server中

   location / {
    # root html;
    #index index.html  index.htm;
    proxy_pass  http://localhost;
}

6.Nginx负载均衡

轮训法(默认):
将请求按顺序轮流分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前系统负载
upstream tomcat_server{
server ip:prot weight ;
}
加权轮训法:
不同后端服务器可能机器的配资和当前系统的负载并不相同,因此它们的抗压能力也不相同,给配置高,负载低的机器配置更高的权重,让其处理更多的请求;配置低,负载高的机器给其分配较低的权重,降低其系统负载;加权轮询能很好地将请求顺序且按照权重分配到后端。weight的值越大分配到的访问概率越高。
upstream tomcat server{
server ip:prot weight-1;
server ip:prot weight-2;
}

源地址哈希法:
根据获取客户端的IP地址,通过哈希函数计算得到一个数值。
用该数值对服务器列表的大小进行取模运算,得到的结果便是客户端要访问服务器的序号。
采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。
可以保证来自同一IP的请求被打到固定的机器上,可以解决session问题

upstream tomcat_server{
ip_hash;
server IP:prot weight;
}
最小连接数法:
由于后端服务器的配置不尽相同,对于请求的处理有快有慢,最小连接数法根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理当前请求,尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器。
upstream tomcat_server{
least_conn;
server IP:prot weight;
}

Fair
比weight,ip_hash更智能的负载均衡算法,
可以根据页面大小 和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间的优先分配
Nginx本身不支持fair,如果需要这种调度算法,则必须安装upStream_fair模块
upstream tomcat_server{
fair;
server IP:prot weight;

}

url_hash
按照访问的URL的哈希结果来分配请求,使每个URL定向到一台后端服务器
可以进一步提高后端缓存服务器的效率
Nginx本身不支持url_hash,如果需要这种调度算法,则必须安装Nginx的hash软件包
upstream tomcat_server{
hash $request uri;
server ip:prot weight;

}

在这里插入图片描述

7.nginx配置日志

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.动静分离(将静态页面放到nginx中,这样不会再次请求tomcat服务器,造成不必要的麻烦)

在这里插入图片描述

9.高并发架构分析

什么是高并发?
通常是指,通过设计保证系统能够同时并行处理很多请求,高并发相关常用的一些指标有响应时间,吞吐量,每秒查询率QPS(Querry per Second)并发用户数
如何提升系统的并发能力?
互联网分布式架构设计,提高系统并发能力的方式,主要有垂直扩展,水平扩展
垂直扩展:提升单机处理能力,方式有 增强单机硬件性能和提升单机架构性能
若预算不是问题 建议“增强单机硬件性能”提升系统并发能力,因为该阶段公司战略往往是发展业务抢时间,此法最快。
但增强单机硬件性能和提升单机架构性能都有致命的不足:单机性能总是有极限的,所以互联网分布式架构设计高并发终极解决方案还是水平扩展。
水平扩展:只要增加服务器数量,就能线性扩充系统性能
互联网分层架构中,各层次水平扩展的实践又有所不同:
反向代理层可以通过“NDS”轮询的方式来进行水平扩展
站点层可以通过nginx来进行水平扩展
服务层可以通过服务连接池来进行水平扩展
数据库可以按照数据范围,或者数据哈希的方式来进行水平扩展

10.高并发下Nginx配置限流

对客户端的(即单一ip限流)

limit_conn_zone

//其中limit_conn one 10 既可以放在server层对整个server有效,也可以放在location中只对单独的location有效
//该配置客户端的并发连接数只能是10个
http{
limit_conn_zone $binary_remote_addr zone=one:10m;
server{

limit_conn one10;

}
}
压力测试工具Ab工具
在这里插入图片描述
limit_req_zone

http{
limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;
server{
limit_req zone = req_one burst=120;
}
}

其中“limit_req zone = req_one burst = 120”既可以放在server层对整个server有效,也可以放在location中只对单独的location有效。
rate=1r/s表示每个地址每秒只能请求一次,也就是说令牌桶burst=120一共有120块令牌,并且每秒钟只新增1块令牌,120块令牌发完后,多出来的请求就会返回503.
ngx_http_upstream_module
该模块是提供了我们需要的后端限流功能的
该模块有一个参数:max_conns可以对服务端进行限流,但在商业版本中才可使用
在nginx1.11.5版本以后,官方已经将该参数从商业版中脱离出来了,也就是说只要我们升级自己的nginx版本就ok了。
upstream xxx{
server 127.0.0.1:8080 max_conns=10;
server 127.0.0.1:8080 max_conns=10;
}
在这里插入图片描述

11.高并发下Nginx安全配置

在这里插入图片描述
注意在IP安全配置时location后的名字 / 写重复会报底下的错误
在这里插入图片描述
不报错写法 直接写到现有的location中
在这里插入图片描述

12.Nginx配置进程数,并发数,系统优化

在这里插入图片描述

13.高并发下nginx长链接

nginx长连接短链接,可以增强服务器的容灾能力
http1.1之后,HTTP协议支持持久连接,也就是长连接,优点在于在一个TCP连接上可以传多个HTTP请求响应,减少建立和关闭连接的消耗和延迟,如果我们使用了nginx去作为反向代理或者负载均衡,从客户端过来的长连接请求就会被转换成短链接发送给服务器端,为了支持长连接,我们需要在nginx服务器上做一些配置
要求:
使用nginx时,想要做到长连接,我们必须做到以下两点:
从client到nginx是长连接
从nginx到server是长连接
对于客户端而言,nginx扮演着sever的角色,反之之于server,nginx就是一个client
配置:
我们想要做到client与nginx之间保持长连接,需要:
client发送过来的请求携带keep-alive header (默认似乎都有)
nginx设置支持keep-alive
13.Nginx压缩
gzip压缩作用:将响应报文发送至客户端之前可以启用压缩功能,这能够有效节约带宽,并提高响应至客户端的速度,压缩会消耗nginx的cpu性能
gzip压缩可以配置http,server和location模块下
在这里插入图片描述
在这里插入图片描述

14.高并发下Nginx状态监控

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值