目录
2.2.1.1 Nginx负载均衡
1、Nginx简介
Nginx是一款轻量级的web(静态)服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD协议下发行,几乎可以在所有操作系统中运行。
Nginx做web服务器:比如Html解析、JS静态文件解析......
由俄罗斯程序设计师Igor Sysoev所开发,最初供俄国大型的入口网站、搜索引擎Rambler使用。
特点:占有内存少、高性能、高并发性(最初用于解决C10K问题,现在可以C100K)
主要用epoll方式
C10K:C-----Concurrent(并发),10K-----一万,C10K-----并发1万
据统计,世界上最繁忙的网站中有11.48%使用Nginx作为服务器或者代理服务器
1.1、Nginx作为负载均衡的8个原因
高并发连接、内存消耗少配置文件非常简单、成本低廉、
支持Rewrite重写规则、内置的健康检查功能、节省带宽、稳定性高
Nginx的强的功能是:反向代理
2、正向代理和反向代理
2.1、正向代理
类似一个跳板机,代理访问外部资源
2.2、反向代理(Reverse Proxy)
实际运行方式是指以代理来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,
并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器
2.3、反向代理的作用
1、保证内网的安全
可以使用反向代理提供WAF功能,阻止web攻击。
通常将反向代理作为公网访问地址,Web服务器放在内网
2、负载均衡
通过反向代理服务器来优化网站的负载
3、负载均衡原理
可以解释N台服务器平均分担负载,不会因为某台服务器负载高宕机和某台服务器闲置的情况。
负载均衡的前提:要2台以上的服务器才能实现
4、Nginx负载均衡的4种配置方案
1、轮询(Round Robin)【默认】
根据Nginx配置文件中的顺序,依次把客户端的Web请求分发到不同的后端服务器上。
注意事项:
1、默认配置就是轮询策略;
2、nginx负载均衡支持http和https协议,只需要修改proxy_pass后协议即可;
3、nginx支持FastCGI、uwsgi、SCGI、memcached的负载均衡,
只需将proxy_pass改为fastcgi_pass,uwsgi_pass,scgi_pass,memcached_pass即可
4、此策略适合服务器配置相当,无状态且短平快的服务使用。
2、最少连接least_conn
Web请求会被转发到连接数最少的服务器上
注意事项:
1、最少链接负载均衡通过lease_conn指令定义
2、此负载均衡策略适合请求处理时间长短不一,造成服务器过载的情况
3、IP地址哈希ip_hash
前述的两种负载均衡方案中,同一客户端连续的Web请求可能会被分发到不同的后端服务器进行处理,
因此如果涉及到会话Session,那么会话会比较复杂。
常见的是基于数据库的会话持久化。
要克服上面的难题,可以使用基于IP地址哈希的负载均衡方案。
这样的话,同一客户端连续的Web请求都会被分发到同一服务器进行处理
注意事项:
1、ip哈希负载均衡使用ip_hash指令定义
2、nginx使用请求客户端的ip地址进行哈希计算,确保使用同一个服务器响应请求
3、此策略适合有状态服务,eg:session
4、基于权重weight
基于权重的负载均衡即Weighted Load Balancing,这种方式下,我们可以配置Nginx把请求更多地分发到高配置的后端服务器上,
把相对较少的请求分发到低配服务器。
注意事项:
1、权重负载均衡需要使用weight指令定义
2、权重越高分配到需要处理的请求越多
3、此策略可以与最少链接负载、ip哈希策略结合使用
4、此策略比较适合服务器的硬件配置差别比较大的情况
2.2.1.2 代理缓存机制
1、Nginx缓存简介
nginx的http_proxy模块,可以实现类似于Squid的缓存功能。
Nginx对客户已经访问过的内容在Nginx服务器本地建立副本,这样在一段时间内再次访问改数据,
就不需要通过Nginx服务器再次向后端服务器发出请求,所以能够减少Nginx服务器与后端服务器之间的网络流量,
减轻网络拥塞,同时还能减小数据传输延迟,提高用户访问速度。
同时,当后端服务器宕机时,Nginx服务器上的副本资源还能够回应相关的用户请求,这样能够提高后端服务器的鲁棒性。
鲁棒性:也叫“健壮性”(Robustness),是指一个计算机系统在执行过程中处理错误,或者算法在遭遇输入、运算等异常时继续正常运行的能力
对于缓存,的4个问题:
1.1、缓存文件放在哪里?
proxy_cache_path:Nginx使用该参数指定缓存位置
proxy_cache:该参数为之前指定的缓存名称
proxy_cache_path有两个必填参数:
第一个参数为缓存目录
第二个参数keys_zone指定缓存名称和占用内存空间的大小
1.2、如何指定哪些请求被缓存?
1、Nginx默认会缓存所有get和head方法的请求结果,缓存的key默认使用请求字符串
2、自定义key
eg:proxy_cache_key "$scheme$request_method$request_uri";
3、指定请求至少被发送了多少次以上时才缓存,可以防止低频请求被缓存
eg:proxy_cache_min_uses 5;
4、指定哪些方法的请求被缓存
eg:proxy_cache_methods GET HEAD POST;
1.3、缓存的有效期是多久?
默认情况下,缓存内容是长期存留的,除非缓存的总量超出限制。
eg:
响应状态码为200、302时,10分钟有效:proxy_cache_valid 200 302 10m;
对应任何状态码,5分钟有效:proxy_cache_valid any 5m;
1.4、对于某些请求,是否可以不走缓存?
proxy_cache_bypass:该指令响应来自原始服务器而不是缓存
eg:proxy_cache_bypass $cookie_nocache $arg_nocache$arg_commet;
如果任何一个参数值不为空,或者不等于0,nginx就不会查找缓存,直接进行代理转发
网页的缓存是由HTTP消息头中的“Cache-control”来控制的,常见的取值有private、no-cache、max-age、must-revalidate等,
默认为private。其作用根据不同的重新浏览方式分为以下几种情况
web服务器响应nginx的响应头“Cache-control”为以下值时,对应的缓存方式
2.2.1.3 通过Lua拓展Nginx
2.2.1.4 高性能Nginx最新实践
来源:CSDN
作者:爵影子
链接:https://blog.csdn.net/pyl574069214/article/details/104729619