Nginx作为一个非常流行和成熟的Web Server和Reserve Proxy Server,网上有大量的性能优化教程,但是不同的业务场景千差万别,什么配置是最适合自己的,需要大量的测试和实践以及不断的优化改进。
一、nginx是什么?
nginx是由俄罗斯的一个程序设计师Igor Sysoev用C语言写的一个开源软件,主要用于互联网网站,负责接受客户端(PC网页、手机网页、手机App)的HTTP协议的请求,然后把请求分发给后端多个各种应用服务器(如Tomcat、php等)去处理,做负载均衡,然后再把后端传回来的结果页面,返回给前端。这种工作方式也被称作“反向代理”。
nginx的特点是占有内存少,并发能力强,稳定,配置简单。目前发展成为最主流的负载均衡反向代理服务器,国内各大网站,如新浪、网易、腾讯等使用广泛。
在源代码层面,nginx使用了Linux内核新提供的epoll功能,可以实现单进程单线程高速支持大并发量(万级)的连接与请求,并在此基础上采用了事件驱动的编程机制,这是目前软件行业为了支持高并发高性能,从多线程并发编程模式转向单线程异步事件驱动编程模式的优秀典范(java领域有Tomcat到Netty,也是在Linux上基于epoll),再加上nginx的代码中C语言指针用得非常灵活(变态),所以nginx的源代码编程水平在业内得到了广泛认可。
二、Nginx的优点
1.支持Rewrite重写规则,能够根据域名,URL的不同,将HTTP请求分到不同的后端服务器群组。
2.节省带宽,支持GZIP压缩,可以添加到浏览器本地缓存的Header头。
3.稳定性高,用于反向代理,宕机率微乎其微。如果Nginx Proxy后端的某台Web服务器宕机了,不会影响前端访问。
三、如何学习nginx的源代码?
nginx的源代码比一般开源软件的难读,自学的难度比较高(国内不少程序员自学nginx源代码都半途放弃了),很容易在一些细节(如内存池)和难点(如配置文件的解析)等环节消耗过多时间精力,导致无功而返。因此可以跟着一个有源代码经验的老师学习,根据个人实际学习进展来安排学习节奏进度,充分的沟通与指导(避开非关键点,而关键代码逐行讲解),是保持持续的动力、减少时间消耗、降低成本与越过难点的好方法。
学习掌握了nginx源代码的主要方面(主要程序流程、核心数据结构等)后,你可以参与开源社区的交流,例如参与nginx官方社区的问题与解答,参与阿里Tengine的pull request的review,以及其他第三方扩展应用(如open resty)的pull request的review等,可以继续提高自己的水平,并获得业内的认可,逐步成为牛人。
四、学习nginx源代码的好处
1.成为真正的架构师。在源代码级了解nginx所实现的HTTP协议处理功能,可以让你具备设计维护一个中大型网站整体架构的能力。
2.成为C语言高手、开源级专家。nginx源代码的变态级难度,可以锻炼你成为C语言底层高手、开源软件的业内行家。学完nginx,你的能力可以参与大多数基础软件的开发(包括Linux内核);轻松阅读掌握其他的开源软件的源代码(如MySQL)。
由于Nginx的代码主要由C语言,部分嵌入式汇编及脚本语言组成。因此,学习分析Nginx源代码,必须具备扎实的C语言基础,最好能够读懂嵌入式汇编语言,对shell脚本语言也有一定的掌握。
上一篇:热备路由协议的工作原理
下一篇:直销软件开发商的第二生命线介绍