/ 狼烟 / NGINX PLUS vs NGINX

NGINX PLUS vs NGINX

2016-08-05 posted in [tech]

首先简单回顾下NGINX的版本和历史:

在双重协议下,NGINX PLUS在开源版本NGINX基础之上增加了若干新特性和新功能,其官方网站为其定义为:

NGINX Plus is the all-in-one application delivery platform for the modern web.

总的来说,all-in-one的NGINX PLUS对比开源版本重点增加了若干企业特性,包括更完善的七层、四层负载均衡,会话保持,健康检查,实时监控和管理等。

下面我们可以从两个方面来对比NGINX PLUS和NGINX,暂时忽略其它非技术层面的区别:

运维特性

众所周知,开源软件的运维特性往往无法称心如意,毕竟一千个读者眼里有一千个哈姆雷特,不同的用户对于NGINX的应用方式也千差万别。但是总的来说,常见的场景无非是RPM或者源码安装。NGINX在CentOS或者Ubuntu这样的Linux发行版本上都早已经提供了RPM方式的安装和升级方式,用户只需要简单地执行

$ yum install nginx

或者

$ apt-get install nginx

即可完成相应版本NGINX的安装。

但若是需要定制NGINX或者二次开发的话,则源码方式配合自动化运维工具如ansible明显才是首选,在这里不再赘述NGINX的运维特性,Google一下,你就知道~

也可参考笔者曾经的自动化运维代码:A Complete ansible playbook (more than roles) for nginx

下面来介绍NGINX PLUS的运维特性,其实说白了就是因为商业版本收费导致的认证差异。

NGINX PLUS是以单实例收费,且费用不菲,而且因为不开放源码的原因,其安装方式也就限制于RPM。

NGINX PLUS提供30天免费试用版本

参考笔者在CentOS 7.0上的安装步骤:

  1. 如果曾经已安装过NGINX PLUS,则首先备份一下原有的证书:

    $ sudo cp -a /etc/nginx /etc/nginx-plus-backup
    $ sudo cp -a /var/log/nginx /var/log/nginx-plus-backup
    
  2. 创建NIGNX PLUS证书目录:

    $ sudo mkdir -p /etc/ssl/nginx
    
  3. 登录NGINX PLUS官网NGINX Customer Portal下载证书:

    • nginx-repo.key

    • nginx-repo.crt

  4. 将NGINX PLUS的证书拷贝至证书目录:

    $ sudo cp nginx-repo.key nginx-repo.crt /etc/ssl/nginx
    
  5. 安装认证组件:

    $ sudo yum install ca-certificates
    
  6. 下载NGINX PLUS YUM源nginx-plus-7.repo至/etc/yum.repos.d:

    $ sudo wget -P /etc/yum.repos.d https://cs.nginx.com/static/files/nginx-plus-7.repo
    
  7. YUM安装NGINX PLUS:

    $ sudo yum install nginx-plus
    
  8. 确认NGINX PLUS版本,我们可以明显看到NGINX PLUS的all-in-one特性,其安装的时候已默认集成绝大部分常用模块:

    $ nginx -V
    nginx version: nginx/1.9.13 (nginx-plus-r9-p1)
    built by gcc 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC)
    built with OpenSSL 1.0.1e-fips 11 Feb 2013
    TLS SNI support enabled
    configure arguments: --build=nginx-plus-r9-p1 --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf    --error-log-path=/var/log/nginx/error.log--http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock    --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp    --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module    --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gzip_static_   module --with-http_gunzip_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-http_   slice_module --with-mail --with-mail_ssl_module --with-threads --with-file-aio --with-ipv6 --with-stream --with-stream_ssl_module --with-http_f4f_module --with-http_session   _log_module --with-http_hls_module --with-http_xslt_module=dynamic --with-http_geoip_module=dynamic --with-http_image_filter_module=dynamic --with-http_perl_module=dynamic    --add-dynamic-module=ngx_devel_kit-0.3.0rc1 --add-dynamic-module=set-misc-nginx-module-0.30 --add-dynamic-module=lua-nginx-module-0.10.2    --add-dynamic-module=headers-more-nginx-module-0.29 --add-dynamic-module=nginx-rtmp-module-1.1.7 --add-dynamic-module=passenger-5.0.26/src/nginx_module --with-cc-opt='-O2    -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic'
    
    
  9. 若需要更新NGINX PLUS版本,可直接通过YUM即可:

    $ sudo yum upgrade nginx-plus
    

从以上可知,NGINX PLUS对比NIGNX,增加了实例的CA认证,且受限于闭源,虽然无法做到开源版本NGINX的自由可定制,但其运维成本也极低。

功能特性

NGINX PLUS官方列举了商业版本对比开源版本NGINX新增特性如下:

NGINX Plus extends open source NGINX with additional performance and security features, and includes support from the NGINX team to get your apps up and running in no time.

  • High-performance load balancing

  • Intelligent session persistence

  • Application-aware health checks

  • High availability deployment modes

  • Massively scalable content caching

  • Sophisticated streaming media

  • Advanced activity monitoring

  • DevOps on-the-fly reconfiguration

我们逐条分析其模块及服务:

四层、七层负载均衡:

NGINX 1.9版本增加了stream模块,使得NGINX也支持四层的TCP, UDP负载均衡,NIGNX PLUS在此基础之上还增加了若干特性支持更多的策略和功能。

会话保持:

由于HTTP是无状态的协议,所以对于需要记录状态信息如用户登录等时,Cookie和Session的支持就至关重要,我们这里不讨论两者的区别,还是关注NGINX和NGINX PLUS对于Session的特性支持。

开源NGINX可以很简单粗暴地利用IP_HASH策略将同一个客户端的请求分流至同一个上游服务器,这样的好处是同一个客户端的请求从登录到退出一直由同一个上游应用服务器处理,自然也不存在Session的一致性问题了。很明显,IP_HASH的方式对于NGINX的负载均衡造成了影响,相比较Round-Robin等,可能造成上游服务器之间的热度不均,所以很多优化方案会将Session统一暂存至Memcached、MySQL或者其它的存储中。

NGINX PLUS增加了新的特性来支持更好的会话保持服务,可以通过Cookie、Learn和Routes方式实现:

除了上述特性外,NGINX PLUS还提供了drain来支持当upstream配置变更时的会话保持服务,drain的配置和real server的down、backup有些类似,而其机制则和NGINX的优雅重启有点异曲同工之妙,当drain生效时原来建立的会话将继续保持,新的会话将被分流至另外的的上游应用服务器。

###

未完待续..