一、为什么使用Nginx
互联网飞速发展的今天,大用户量高并发已经成为互联网的主体.怎样能让一个网站能够承载几万个或几十万个用户的持续访问呢?这是一些中小网站急需解决的问题。为了解决这个问题引入了负载均衡方法。负载均衡就是一个web服务器解决不了的问题可以通过多个web服务器来平均分担压力来解决,并发过来的请求被平均分配到多个后台web服务器来处理,这样压力就被分解开来。
负载均衡服务器分为两种一种是通过硬件实现的负载均衡服务器,简称硬负载例如:f5。另一种是通过软件来实现的负载均衡,简称软负载:例如apache和nginx。
硬负载和软负载相比前者作用的网络层次比较多可以作用到socket接口的数据链路层对发出的请求进行分组转发但是价格成本比较贵,而软负载作用的层次在http协议层之上可以对http请求进行分组转发并且因为是开源的所以几乎是0成本,并且阿里巴巴,京东等电商网站使用的都是Nginx服务器。
ASP.NET使用Nginx搭建IIS分布式集群部署实现负载均衡
二、什么是Nginx
Nginx(发音同engine x)
nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;nginx可以作为一个HTTP服务器进行网站的发布处理,另外nginx可以作为反向代理进行负载均衡的实现。
nginx是一个强大的web服务器软件,用于处理高并发的http请求和作为反向代理服务器做负载均衡。具有高性能、轻量级、内存消耗少,强大的负载均衡能力等优势。
由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。
三、什么是负载均衡
如果我们写好的网站只放在一台服务器上,访问量一大或者停电了,导致服务器挂了,我们的网站就访问不了了!像电商网站要是在电商节日挂了,那等着玩火自焚。所以一般是把网站放在多台服务器上,只要还有一台服务器没挂,我们的网站就还能运行和访问。把网站复制到多台服务器上,这个时候就需要Nginx来做代理服务器,所有的请求都会经过Nginx代理服务器,由Nginx去转发请求到空闲的服务器上,且将获取到服务器的资源转发给客户端。
“对客户端来说,看起来只是发了个请求只到一台服务器。
实际上后端有多个服务器,客户端请求的是Nginx代理服务器。
Nginx接收到请求,就会转发到空闲的后端服务器上,这就是负载均衡了。
nginx负载均衡
四、Nginx在Linux系统安装方法
Nginx官网提供了三个类型的版本
Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版
Stable version:最新稳定版,生产环境上建议使用的版本
Legacy versions:遗留的老版本的稳定版
PS:Windows 安装Nginx并创建为Windows服务,实现只要启动服务器不需要登录就可以实现服务自启动。
五、Nginx实现Web分布式部署和负载均衡实战演练
虚拟主机,就是将一台物理服务器虚拟为多个服务器来使用,从而实现在一台服务器上配置多个站点,即可以在一台物理主机上配置多个域名。Nginx中,一个server标签就是一台虚拟主机,配置多个server标签就虚拟出了多台主机。 Nginx虚拟主机的实现方式有两种:域名虚拟方式与端口虚拟方式。域名虚拟方式是指不同的虚拟机使用不同的域名,通过不同的域名虚拟出不同的主机;端口虚拟方式是指不同的虚拟机使用相同的域名不同的端口号,通过不同的端口号虚拟出不同的主机。基于端口的虚拟方式不常用。
从入门到精通-Nginx,图文并茂、负载均衡、动静分离、虚拟主机 附案例源码 - 陈彦斌 - 博客园 https://www.cnblogs.com/chenyanbin/p/12521296.html
nginx -V查看安装的模块
Nginx实现IIS分布式部署和负载均衡实战演练
六、Nginx反向代理需要注意的几个问题
1)、Nginx在Windows系统上的性能问题
Nginx服务器知名度很高,高性能,高可扩展,的确是这样。但并非指你随便下载一款事先编译好的,就能满足你的要求,尤其是Windows版本的。Nginx软件在linux上跑性能比在windows上跑要好!Nginx在Windows只使用select作为通知方法,所以不要期待它有很高的性能和扩展性。所以只是建议在开发测试上使用,这里阿笨也不能随便瞎说,大家还是一定要根据自己实际情况去做性能测试然后再去考虑是否将Nginx部署在Windows服务器上。可以通过简单最粗暴的方案NginxVS IIS对比性能测试。
个人建议:
毕竟nginx我们一般还是用来做反向代理HTTP请求转发,几乎不涉及到IO的读写操作,其实可以弄一台低配置的linux系统在上面部署nginx,然后负载均衡我们下游的windows集群服务。如果你对系统要求比较严格的话,那只能用微软给我们推荐的自己家的NLB高可用方案了。IIS 做负载均衡最好是用Windows Server 自带的组件NLB 。特点:配置繁琐且麻烦。
2)、多台机器间session的共享问题
如果站点使用了session,请求平均分配到两个站点,那么必然存在session共享问题,该如何解决?
配置负载均衡比较简单,但是最关键的一个问题是怎么实现多台服务器之间session的共享,虽然可以通过nginx的负载均衡算法ip_hash来解决,实际上我们并不推荐这种方式,我们应用采用的是Web应用程序将Session存储在分布式缓存Redis中。
Nginx对简单会话保持的支持:ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session 的问题。
例如:
upstream bakend {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}
七、思考与总结
1)、总结
随着互联网井喷式发展,单节点服务已经不能满足并发需求,通常利用nginx反向代理来实现集群部署以此解决并发需求;在现在阶段,负载均衡是一个被普遍应用的技术。Nginx作为http的负载均衡服务器,被应用的越来越广泛。
本课程并不是讲解关于nginx方面的知识,而且基于nginx反向代理服务来搭建我们的风不是集群Web应用实现负载均衡的一个基础课程,课程难免很多关于nginx方面的知识并没有进行详细的讲解,所以需要大家进一步的去加深和了解Nginx的知识。
如果你所在公司没有专职的运维人员,而且你的应用程序能接收一定的延迟和宕机风险,但是你又想保证提供服务是高可用的,那么你可以像阿笨这样基于Nginx搭建一个简单的IIS分布式集群应用同是实现了WEB负载均衡!
2)、思考
通过Nginx我们实现了一个简单的负载均衡,实际情况比这复杂很多。比如nginx服务器挂了,那我们的站点就直接挂了,正确的通过keepalived组件来搭建多台nginx反向代理服务器来提供服务。
Nginx在不同平台下如何实现高可用(HA)?
Linux平台:Keepalived+Nginx实现高可用;Windows平台:HAProxy+Nginx实现高可用。