据说让你抓狂的Nginx性能调优,我却这么轻松就搞定了

前言Nginx 是一个轻量级的、基于http的、高性能的反向代理的服务器和静态web服务器 。
正向代理和反向代理

不管是正向代理还是反向代理都是基于客户端来说的 。
  • 正向代理特点正向代理是对客户端的代理正向代理是架设在客户端的主机客户端在使用正向代理服务器时是要知道访问的目标服务的地址案例隐藏真正的访问者向服务端隐藏真正的访问者 。对于服务端来说,真正的访问者时代理服务器 。起到了隐藏客户端的作用 。例如:实际生活中的短信轰炸,你根本不知道是谁给你发的短信;DDoS攻击也是这个原理,使用很多‘肉鸡’机器来攻击我们的服务器,我们无法查找真正的攻击源 。翻墙由于很多复杂的原因,导致服务器A不能直接访问服务器B,但是服务器C可以访问服务器B,而服务器A又可以访问服务器C;这时,服务器C作为服务起A的代理服务器对B进行访问 。目前的翻墙软件就是使用这个原理 。提速同上原理一样,服务器A访问服务器B速度过慢,而服务器C访问服务器B很快,服务器A访问服务器C很快 。则使用代理服务器提高效率 。缓存增加客户端缓存,减少对服务器的请求资源的压力 。例如maven的nexus就是一个典型的客户端缓存例子 。授权例如,在公司中,需要对员工电脑进行外网监控授权,则也是使用这种客户端正向代理服务器 。
  • 反向代理特点反向代理是对服务端的代理反向代理是架设在服务端的主机客户端端访问的时候不知道真正服务主机的地址案例保护隐藏真正的服务客户端只能访问服务端代理服务器,而真正的服务端是不能直接访问的,保护了服务端 。分布式路由根据客户端不同的请求,将请求路由到不同的服务端去 。负载均衡服务端均摊客户端的请求,保证服务端的高可用 。动静分离例如图片、静态页面、css、js等,都为静态资源,将其放到对应目录下,客户端加载静态资源时,就不会请求到服务端,而只会将动态资源的请求发送到服务端,减轻服务端的压力 。数据缓存反向代理同正向代理一样具有数据缓存的功能,都是为了减少服务端的压力 。
负载均衡1、nginx的负载均衡策略有两种:内置策略和扩展策略
2、内置策略:轮询、权重轮询、IP hash、least_conn
3、扩展策略:自己想怎么实现就怎么实现
据说让你抓狂的Nginx性能调优,我却这么轻松就搞定了

文章插图
 
轮询
轮询是upstream默认的负载均衡策略,每个请求会按时间顺序逐一分配到不同的服务器
参数如下:
据说让你抓狂的Nginx性能调优,我却这么轻松就搞定了

文章插图
 
例子:
#动态服务器组upstream dynamic_zuoyu {server localhost:8080;#Tomcat 7.0server localhost:8081;#tomcat 8.0server localhost:8082 backup;#tomcat 8.5server localhost:8083 max_fails=3 fail_timeout=20s;#tomcat 9.0}注:此策略适合服务器配置相当,无状态且短平快的服务使用
权重
权重的方式,是在轮询基础上制定轮询的几率;权重分配越高,需要处理的请求越多;此策略也可和ip_hash、least_conn结合使用 。
例子:
#动态服务器组upstream dynamic_zuoyu {server localhost:8080 weight=2;#tomcat 7.0server localhost:8081;#tomcat 8.0server localhost:8082 backup;#tomcat 8.5server localhost:8083 max_fails=3 fail_timeout=20s;#tomcat 9.0}注:此策略适合服务器硬件配置差异比较大时使用
ip_hash
ip哈希的方式,基于客户端IP来分配,确保统一IP地址的客户端请求都到同一台服务器,保证session会话 。可以解决session不能跨域的问题
例子:
#动态服务器组upstream dynamic_zuoyu {ip_hash;#保证每个访客固定访问一个后端服务器server localhost:8080 weight=2;#tomcat 7.0server localhost:8081;#tomcat 8.0server localhost:8082;#tomcat 8.5server localhost:8083 max_fails=3 fail_timeout=20s;#tomcat 9.0}注:此策略适合服务器解决session不能跨域的问题时使用
least_conn
最少连接方式,将请求转发给连接数较少的服务端 。由于轮询的方式是平均将请求转发给各个服务器,使得负载大致相同 。但是也存在其中某些请求的链路过长,占用时间长,导致某一些服务器的负载较高 。所以最少连接的方式可以平衡轮询会出现的这种问题
例子:
#动态服务器组 upstream dynamic_zuoyu {least_conn;#把请求转发给连接数较少的后端服务器server localhost:8080weight=2;#tomcat 7.0server localhost:8081;#tomcat 8.0server localhost:8082 backup;#tomcat 8.5server localhost:8083max_fails=3 fail_timeout=20s;#tomcat 9.0 }


推荐阅读