nginx(一、概念篇)

我已不是少年郎 · · 994 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

为什么要用nginx?

在网上搜索负载均衡的时候,总会跳出nginx这个字眼,对于我这样只关注开发功能却从未关心过架构的人来说,还是比较陌生的,印象中用了nginx好像可以扛更多的访问量。

过完年后开发工作告一段落,正好有时间,就决定从一个初学者的角度来描述一下,为什么要用nginx。

经查阅各种资料,nginx的主要功能和使用方式包括

  • nginx反向代理
  • nginx负载均衡
  • nginx配置https
  • nginx静态资源服务器
  • 整合keepalive、lvs等

以上5点主要作为后续实践内容的大纲。

nginx反向代理

这个名称和概念有点让人懵逼,从数据的流向方面来说一下我的理解。

nginx反向代理.jpg

通过时序图可以看出,相当于nginx就是个方案公司的FAE,你的所有需求和沟通交流,都和对方公司的FAE对接,并不需要知道对方公司的工程师如何开发能不能实现你的需求,一旦有结果之后,也是FAE告诉你,并且给你部署实施或者烧录,这就是反向代理。

那什么是正向代理呢,就是你作为公司内部的工程师,需要第三方公司的配合才能搞定任务,其他公司都是工程师直接对接三方公司,但你们公司为了节省工程师的时间,减少扯皮带来的精力消耗,所以专门给你配备了个FAE,你告诉FAE我需要第三方公司给我搞定芯片我才能开发,FAE去三方公司沟通,然后你只用忙其他事情,最后FAE搞定了这坨事,把芯片交给你,这就是正向代理。

所以我个人理解的是,正向还是反向代理,关键看nginx这个FAE为谁代言,为服务器代言就是反向代理,为客户端代言就是正向代理。

正向代理的用途,由于没有实践,目前实在想不到使用场景,这里暂且不提。

反向代理的用途就比较直接了,如果单从这个代理功能来说,脑子进水了,本来直接就能和服务器通信,为什么要多一个东西不嫌麻烦吗?这就牵涉到nginx的其他特性了。

nginx负载均衡

nginx有一些负载均衡算法,细节部分等后面实际操作时再谈,要想实现负载均衡,就必须要用到前面的反向代理特性了,看图:

典型负载均衡

所有的请求先到nginx,然后nginx根据算法分发请求到某个服务器,服务器再通过nginx返回数据给客户端。

当然选择nginx还有一些其他性能方面的优势,比如并发能力比apache还强等其他因素。

nginx配置https

这个是为后续的实践提供大纲,现在服务器是java编写的,用的是springMVC、spring、mybatis开发,因为我们的硬件客户端设备能用很长时间,长时间积累下来,并发不算太小,而本人的java并发经验几乎都停留在理论阶段实践为零,既然都是重新尝试为什么不学一下新技术呢,所以出于个人意愿,后期打算换成golang,听说golang的https好像比较难搞,并且做集群的时候每个业务服务器都搞一下https好像不现实,所以提前把这个功能实践了。

nginx静态资源服务器

这个动静分离功能是必须要做的,这样也可以显著提升性能,如果一些图片和js脚本都放在web容器里,比如tomcat里,就损耗了一部分tomcat的性能。

整合keepalive、lvs等

为什么要整合这些呢,有这样一种场景:nginx部署在A云服务器,然后后面集群了B、C、D三台云服务器上,然后A云服务器突然挂了,这时候就算B、C、D没挂,整个系统也不能用了,所以会有一些高可用方案。

这个keepalive和lvs目前只停留在理论阶段,是否能够整合以及怎么整合,或者是否有其他更流行的方案,这里只是列出大纲,以后实践的时候再查阅资料并进行详细描述。


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:我已不是少年郎

查看原文:nginx(一、概念篇)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

994 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传