Nginx介绍

目录

一 Nginx介绍

  • Nginx是开源的HTTP,HTTPS,POP3,SMTP,IMAP协议反向代理服务器,也因其负载均衡,HTTP CACHE,常规伺服的功能而出名.目前国内主流网站,如百度,京东,新浪等都有使用Nginx

1.1 Nginx的特点

  • Nginx一个重要的特点是占用内存少,并发能力强,在同类型的网页服务器表现较好.

1.2 Nginx优点

  • Nginx是一款反代理服务器,其安全性较高
  • 一个Nginx在硬件不受限的情况下,可以达到50000个并发连接数的响应(没有复杂的业务逻辑).
  • 当Nginx作为负载均衡服务器时,可以在内部直接支持和PHP程序对外进行服务,也可以作为HTTP代理服务器对外进行服务支持
  • Nginx本身是采用C来编写的,自身对于资源的开销(CPU,内存等)较低
  • 支持重写规则,可以根据域名,url地址的不同,将HTTP请求分到不同的后端服务器群组( 负载均衡 )
  • 节省带宽,支持GZIP压缩,可以添加浏览器本地缓存的Header头
  • 模块化设计,模块可以动态编译
  • 外围支持好,文档全,二次开发和模块较多
  • 支持热部署,可以不停机重载配置文件
  • 支持事件驱动,AIO(同步IO,异步IO),mmap(Memery Map:内存映射)等性能优化
  • Nginx可支持windows和linux平台,在linux平台上,常常采用CentOS

1.2 Nginx的使用限制

  • 一些高级功能需要收费

二 Nginx的功能

2.1 Nginx基本功能

  • 静态资源的we服务器,能缓存打开的文件描述符
  • HTTP,SMTP,POP3协议的反向代理服务器
  • 缓存加速,负载均衡
  • 支持FastCGI(fpm,LNMP),uWSGI(Python)等
  • 模块化(非DSO机制),过滤zip,SSI及图像的大小调整(节省带宽)
  • 支持SSL

2.2 Nginx扩展功能

  • 支持名称和IP的虚拟主机
  • 支持keepalive(长连接)
  • 支持平滑升级(本地测试无问题后在升级)
  • (降低IO读写频率,提升服务器性能)定制访问日志,支持使用日志缓冲区提高日志存储性能
  • 支持URL重写
  • 支持路径别名
  • 支持基于IP及用户的访问控制
  • (流控:百度网盘限速,抢单抢购过程中控制修改数据库语句的的最大连接数,防止超过抢购数据的修改连接数进行修改操作,也就是避免超过可抢购数目的用户够得商品的情况)支持速率限制,支持并发数限制

三 Nginx支持的应用类别

  • 使用Nginx结合FastCG运行PHP,JSP,Perl等程序
  • 使用Nginx作反向代理,负载均衡,规则过滤
  • 使用Nginx运行静态HTML网页,图片(这些资源放在Nginx,节省JVM,带宽资源等资源的消耗)
  • Nginx与其他新技术的结合应用

四 Nginx负载均衡策略

4.1 Nginx负载均衡策略介绍

4.1.1 轮询(默认)(*)

  • (一般结合weight一起使用)每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除

4.1.2 weight(*)

  • 制定轮询概率,weight和访问比率成正比,用于后端服务器配置性能不均的情况

4.1.3 ip_hash

  • (目前用的比较多的一种方式,对于app的服务端,这种算法变现比较好)每个请求按访问ip的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的共享session问题.(但目前大部分应用的客户端都是共享上网方式,所以此策略在实际应用中,往往达不到效果,也就是说这种算法在对app应用进行负载均衡的时候,效果比较明显,但是对于非app的应用,负载均衡效果不明显)

4.1.4 fair(*)

  • 扩展策略(收费的)
  • 是相较于轮询和ip_hash更加智能的负载均衡算法,采用这种算法,可以实现根据页面大小和加载事件智能的进行负载均衡(即根据后端服务器的响应时间来分配请求,响应时间短的优先分配).但是Nginx本身不支持fair,如果要使用这种调度算法,需要下载Nginx的upstream_fair模块

4.1.5 url_bash(*)

  • Nginx本身是不支持url_bash的,如果需要使用这种调度算法,必须安装Nginx的hash软件包

4.2 各种负载均衡策略性能对比

4.2.1 总体对比

负载策略 均衡性 数据一致性 容灾性 适用场景
轮询(含权重) 通用性强,无特殊需要场景都可以使用
ip_hash 要求IP地址请求一致的场景
fair 只适应能力较强,在网络复杂的环境下表现较好
url-hash 请求一致性, 如缓存服务器

4.2.2 各负载均衡策略详细描述

轮询:

  • 通用性强,无特殊需求场景都可以使用,一致性差主要体现在同一台机器同一次访问,可能分配在不同服务器上(由于配置了权重,那么用户在访问的时候,访问权重配置较高的服务器的概率较大,所以数据的一致性较弱,该主机宕机后用户数据会丢失)

Ip_hash:

  • 要求IP请求一致的场景,同一个IP地址,根据hash算法会定位在同一台服务器上,如果这台服务器宕机,经过20次后,转为轮询算法,这为均衡性产生了一定影响,但是可以解决session问题.(由于ip_hash一般结合redis等缓存服务器一起使用,将用户的session保存在redis等组件上,之后session的值传输到需要访问的服务器上,如果其中一个服务器宕机的情况下,redis等组件会把这个session发送到另一台服务器上,保证了用户访问时的数据的一致性)

fair:

  • 自适应能力强,在网络环境复杂的情况下表现较好,由于是自适应,一致性和轮询一样,不能确定

url-hash:

  • 请求一致性,如缓存服务器

4.3 使用较多的算法

  • 目前使用较多的算法是轮询和ip_hash的算法
原文地址:https://www.cnblogs.com/gupan/p/9227499.html