什么是nginx
- nginx是一个基于C实现的自由的、开源的、高性能HTTP和反向代理服务器,
- 同时也是IMAP/POP3/SMTP代理服务器。Nginx以事件驱动方式编写,所以有很好的性能,
- 同时也是一个非常高效的反向代理、负载均衡服务器。
为什么使用nginx
- 性能上:nginx占用极少的系统资源,能支持更多的并发连接,达到更高的访问效率;
- 功能上:nginx是优秀的代理服务器和负载均衡服务器;
- 安装配置上:nginx安装简单,配置灵活
- 部署:nginx支持热部署,启动速度特别快,还可以不间断服务情况下对软件版本或者配置进行升级,及时运行数月也无需从新启动。
- 连接:nginx使用基于事件驱动架构,支持数百万级别TCP连接
- 跨平台:支持linux、Windows、FreeBSD、Solaris、AIX、MacOs等操作系统
代理
代理: 代表意思,即一个渠道,比如生活中的专卖店,客人想买一双鞋,这个专卖店就是代码,被代理的就是专卖店的厂家。
正向代理:客户端与原始服务器之间存在一个代理服务器,客户端的请求向代理服务器发送请求并指定目标服务器,然后代理向原始服务器提交请求并获得内容后返回客户端,代理对象是客户端。
反向代理:即以代理服务器接受internet上的连接请求,然后将请求转发给内部网络服务器,并将从服务器上得到的结果返回给internet上的请求连接的客户端,此时代理服务器对外表现为一个服务器,代理对象是服务器。
负载均衡
负载均衡从字面可以理解为N台服务器平均分担负载,不会因为某台服务器负载太高导致宕机而出现某台服务器闲置的情况,所以负载均衡需要多态服务器才可以实现,目的达到整个系统的高性能和高可用性(其实后端接口需要配置多台服务器即可,然后通过负载均衡决定访问哪个后端服务器)
nginx支持的几种负载策略
- round-robin:轮询(默认)
轮询为负载均衡中较为基础也比较简单的算法,它不需要配置额外参数,假设配置文件中共有M台服务器,该算法遍历服务器节点列表,并按节点次序每轮选择一台服务器处理请求,当所有几点均被调用过一次后,该算法将从第一个节点开始重新轮询遍历,并且宕机的服务器自动会从节点服务器中剔除。
注意:如果服务器性能不一致,则导致资源分配不合理。
upstream server_test{
server 192.168.1.11;
server 192.168.1.22;
}
- wrr:加权轮询
为了解决普通轮询弊端,每个服务器都会有各自的weight,一般情况下weight的值越大表示服务器性能好,所以按照比例进行优先分配
特点:加权轮询应用于服务器性能不等的集群中。
upstream server_test{
server 192.168.1.11 weight=5;
server 192.168.1.22 weight=10;
}
- ip_hash:会话保持
根据客户端IP的hash值来分配服务器,该算法可以保证同ip发出的请求映射到同一服务器,或者具有相同的hash值的不同ip映射到同一服务器,即每个请求按访问hash结果分配,每个访客固定一个访问服务器。
特点:该算法解决集群部署环境下的session不共享问题,session不共享意思说用户已经登录过了, 此时发出的请求被分配到了A服务器,但A服务器突然宕机了,用户的请求则会转发到B服务器,但由于session不共享,B无法直接读取用户的登陆信息来继续执行其他操作,使用此算法可以继续使用。
upstream server_test{
ip_hash;
server 192.168.1.11 ;
server 192.168.1.22 ;
}
- url_hash:web缓存节点
根据URL的hash结果来分配请求服务器,让每个URL定向到同一个后端服务器
特点:相同URL请求会分配给固定服务器,当存在缓存时候,效率较高,但是需要依赖第三方库
- fair: 动态调度算法
根据后端节点服务器响应时间来分配,响应时间短的优先分配。
注意:此算法更加智能,所有需要下载相关模块upstream_fair。
upstream server_test{
ip_hash;
server 192.168.1.11 ;
server 192.168.1.22 ;
fair;
}