JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

Nginx的独角兽模块-http模块之初始化揭秘 01

wys521 2024-10-04 06:55:22 精选教程 16 ℃ 0 评论

我们之前已经介绍了Nginx的进程模型和它里面封装的数据结构。

Nginx的模块非常多,我们之前在 《Nginx有哪些适用场景》一文中介绍过,由于Nginx的高性能,主要使用在web服务器, 这种场景下http模块较于其他模块就显得尤为重要。

因此我们学习http模块,一方面可以更有利于我们Nginx的工作原理,另一方面也可以让我们从中学习到优秀的架构设计。个人感觉向优秀的开源软件学习,是最好的学习方式,会打破自己在书本上学习到的知识边界。

对于Nginx模块不了解的朋友可以看前面的文章 Nginx之模块化设计

HTTP模块初始化

Nginx 启动时主要有两部分逻辑:

1. 生命周期的初始化 就是 ngx_init_cycle方法,

调用在 Nginx.c的main函数里。

cycle = ngx_init_cycle(&init_cycle);

具体实现 在ngx_cycle.c里,这个方法有900来行 就不列了,主要作用就是配置信息的解析。

ngx_cycle_t * ngx_init_cycle(ngx_cycle_t *old_cycle);


http模块这里可以看到ngx_http_add_listening 会将http处理的回调函数设置成ngx_http_init_connection方法。

static ngx_listening_t *
ngx_http_add_listening(ngx_conf_t *cf, ngx_http_conf_addr_t *addr)
{
    // ……
    ls = ngx_create_listening(cf, addr->opt.sockaddr, addr->opt.socklen);
    ls->addr_ntop = 1;
    ls->handler = ngx_http_init_connection;
    // ……
}


2. 进入master进程的生命周期,其中最主要的就是启动worker进程,毕竟你一个监工(master),得要有人(worker)给你干活啊。是吧?

在worker进程初始化过程中 ngx_event_process_init方法会给每一个监听socket分配一个链接,并将这个连接的可读事件设置为ngx_event_accept。等有客户端请求来的时候,ngx_event_accept会调用accept函数接收请求。然后调用 上一步里的handler方法来处理,也就是ngx_http_init_connection。


那么Nginx到底是如何解析Http请求的呢?我们明天继续。


#程序员##编程##Nginx#

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表