作为编程小学生,学习一下新接触的技术。
简述
Nginx(发音为:安紧腻克死)是一套产品的统称,它最基础的产品就是它的服务器(Web server),它的其他产品感觉都是基于这个产品衍生出来的。
竞品
它的竞品是 IIS, Apache HTTP Server。 我没关注过Apache的这款,但接触过IIS,它在微软的生态圈(Windows, C#, .Net)内用起来很方便。性能我没比较过,听说大部分基础功能Nginx是比Apache快的。
Flask 或者Django自带的服务器还不能入它的法眼,因为他们都太简单,只能用来过家家或者做测试,离商用还太遥远。Flask自己的网站也是这么告诉用户的
特点
那什么才叫不简单的,可商用的网页服务器呢?我举几个特点。
- 比如支持大规模的部署,可以允许好多台机器使用好多的计算资源(缓存,CPU等)处理大量的请求。
- 还比如有一些商业上常用的功能,比如身份验证(Authentication),数据监测(Monitoring), 流量管理(Traffic management),负载均衡(Load Balancing)之类的。
- 另外就是支持插件,开发者和使用者可以在它的基础上做自己想要的功能。
实践
那如果要建一个用Django写的网站怎么办呢?用Nginx的话,解决方法就是在Nginx和Django之间连上一个WSGI HTTP Server,比如用(Gunicorn)。这篇文章写的很好,也给了例子和代码。
外面的世界 <-> Nginx <-> Gunicorn <-> Django。
现实世界中,其中一个使用了Nginx的产品就是Kubernetes的Ingress了。
Ingress的作用就是一个服务器。Kubernetes自己有好几个功能都可以作为服务器建立后端与外界的链接,比如ClusterIP, NodePort, LoadBalancer,但都没Ingress好用。(参考:https://www.nginx.com/blog/kubernetes-networking-101/)
Ingress其实就是在Nginx外套了一个壳。下面这个视频里讲了,我觉得讲非常通俗易懂,推荐。