nginx源码是用什么写的_nginx是开源的吗

hacker|
141

文章目录:

如何解读Nginx源码

前提:

1、首先nginx是C语言编写的,你必须知识要有C语言的编程基础,否则很痛苦

2、了解web服务器,反向代理的基本知识,以及HTTP协议,TCP/IP协议的基本知识

如果你已经有丰富的经验,或者是大牛,那前面的前提就是废话,可以略过。

看源码准备:

1、找官网,找贡献者的博客去了解NGINX是做什么的,有什么特性,性能,功能,架构等

2、下载源代码,从分析main函数开始,大致了解启动流程,初始化以及一些程序的启动准备

3、建议找到request逻辑,分析下对请求的整个处理流程,不用很细,慢慢来,一口吃不了大胖子,有问题就先记上再说

4、根据分析request的经验,拓展分析下nginx的模块,处理链,以及封装的数据结构如ngx_str_t,ngx_event_t等数据结构

5、到网上找个例子,自己动手去写个模块,或修改某个处理逻辑,你一定会遇到问题,这时你可以通过GDB等工具进行分析和调试,这样加深了你的理解

6、动手写代码,看源码,调试,重复这个过程。

其他

多在网络上找资源和志同道和的技术爱好者或牛人,多交流沟通。

坚持一年,你会有突飞猛进的成绩。good luck

nginx module 开发 用什么ide

nginx是什么?可能很多人不是很了解,除非是做WEB服务器开发的朋友才可能涉猎,而且如果不懂C语言,又或者对WEB SERVER性能要求不高,也是没必要去研究它的。

说到这里,大家想必已经知道,nginx就是一个高性能的WEB SERVER,它的工作就像apache, tomcat一样。那么已经有apache这样的成熟产品了,nginx又有何存在必要呢?下面说下它的特点,各位就明白为何nginx在世界WEB服务里占有相当大的份额了。

1、nginx支持linux的epoll,以及其他常见OS的高性能IO处理方式。

2、nginx用纯C写成。

3、nginx核心代码全部用事件触发机制完成。

4、nginx是跨平台的。

大家从这4个主要特点,应该可以想见nginx到底是怎么玩的了吧?

第1点很清楚,nginx可以很轻松的支持2,3万个并发连接,这个是epoll等模式先天支持的,还能CPU占用率超低。

第2点可以想见,nginx是高性能的。C语言的高效谁不知道呢?呵呵,读它的代码也是相当累,如果想去写nginx的module,自然更累,下面会详述。

第3点很重要,nginx全部用事件触发写成,实际用到的,也就是epoll提供的一些网络IO事件的触发处理。这点是WEB开发者在写自己的module时,实现高性能web服务的关键。

第4点并不重要,因为写web的人都是做服务的,大家大多都是在免费的LINUX上玩的,没人会用nginx在windows上跑吧?如果在windows上跑,何必选开发难度大多了的nginx?所以这点不提。不过这一条让大家在开发起来很不爽,为了与nginx代码风格统一,不得不用大量的nginx封装好的用来跨平台的函数,比如ngx_memcpy之类。

解读完这四点,一个有经验的程序员应该明白何种情形应该选用nginx了吧?如果一个java小团队,对服务的并发能力要求不高,又或者机器巨多,自然不需要去选择开发成本较高的nginx了。而做习惯大规模高并发SERVER开发的同志们,则会心生疑惑,nginx的好处还有什么?上面的这些优点,完全可以自己写个server实现,要nginx何用?我觉得,如果是做WEB SERVER,还是需要nginx的。

nginx实际封装了基本的WEB SERVER功能,所以,首先它有良好的网络IO处理系统,还有稳定的HTTP协议状态机分析,内存池,进程间通讯,线程管理,并提供了基本的配置文件,LOG系统。在其上做不是特别复杂的WEB应用,还是很有优势的,至少可以上application开发者不用花太多的精力在较底层的协议上去。

粗略介绍完nginx,大家有何感想?估计有很多人会打算详细研究下它吧?

但nginx最大的不爽之处,就是资料极少,网上能搜到的文档就那么几份,如果不做module开发,那是足矣,可是如果有自己业务的特殊需求,并且希望按照nginx的设计理念去非阻塞化所有操作,把性能最大化,则必须边看源码边调试了,连蒙带猜,呵呵。

我就经过了这个痛苦过程,下面就给大家分享下nginx的module开发过程中的一些心得。

nginx是用VC6还是VC9

nginx通常是在linux底下使用,很少有人在windows底下使用nginx。

如果你是想问,应该使用VC6还是VC9编译nginx的源码的话,我觉得这两种应该都可以。因为windows版本的nginx只是用windows API,并不依赖于其他类库。

1条大神的评论

  • avatar
    访客 2022-07-07 下午 11:37:24

    inx何用?我觉得,如果是做WEB SERVER,还是需要nginx的。nginx实际封装了基本的WEB SERVER功能,所以,首先它有良好的网络IO处理系统,还有稳定的HTTP协议状态机分析,内存池,进程间通讯,线程管理,并提供了基本的配置文件,LOG系统。在其上做不是特别复杂的WEB应用

发表评论