Nginx源码剖析--server和location的组织

本文深入剖析了Nginx配置中server和location的组织结构。server块通过数组管理,而location块因需快速匹配URL,被构建成三叉树存储在ngx_http_core_loc_conf_s结构体的static_locations中。三叉树主要处理绝对匹配和前缀匹配,正则匹配由regex_locations数组管理。这一组织方式提升了Nginx处理请求的效率。
摘要由CSDN通过智能技术生成

前言

我们知道,Nginx的配置文件的http块中一般会存在多个server块,每个server块中也会有多个locations块,而每个location块中也允许有多个location块。前面我们在分析http模块的配置结构体的时候也看到,这些块是通过上一级配置块对应的的ngx_http_core_module模块创建的配置结构体管理的。比如http块中的所有server块都是由ngx_http_core_module模块的ngx_http_core_main_conf_t->servers成员组织,server块和location块中的所有location块都是由ngx_http_core_module模块创建的ngx_http_core_loc_conf_s结构体的locations成员管理。其中servers是一个数组,locations是一个队列。


servers和locations的组织

一般一个NGINX上的支持的虚拟主机不会很多,所以server块的配置结构体就直接存在serves数组中,不需要做额外的处理了。但是location不同,location的作用是和请求的url匹配,然后利用匹配的location块的配置结构体来处理这个请求,而且一般location的数量比较多,因此,为了加速请求的url匹配到对应的location块,Nginx对每个locations队列都进行了重新组织,将每个locations队列重新单独组织成一个三叉树,并将这个三叉树存储到ngx_http_core_loc_conf_s结构体的static_locations中。这里需要额外提一句的是,locat

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值