/* add the server core module configuration to the address:port */static ngx_int_t
ngx_http_add_server(ngx_conf_t *cf, ngx_http_core_srv_conf_t *cscf,ngx_http_conf_addr_t *addr)
{ngx_uint_t i;ngx_http_core_srv_conf_t **server;if (addr->servers.elts == NULL) {if (ngx_array_init(&addr->servers, cf->temp_pool, 4,sizeof(ngx_http_core_srv_conf_t *))!= NGX_OK){return NGX_ERROR;}} else {server = addr->servers.elts;for (i = 0; i < addr->servers.nelts; i++) {if (server[i] == cscf) {ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,"a duplicate listen %V",&addr->opt.addr_text);return NGX_ERROR;}}}server = ngx_array_push(&addr->servers);if (server == NULL) {return NGX_ERROR;}*server = cscf;return NGX_OK;
}
ngx_http_add_server
函数的作用是将一个 HTTP 服务器配置 (ngx_http_core_srv_conf_t
) 添加到指定的监听地址配置 (ngx_http_conf_addr_t
) 的服务器列表中,并确保同一配置不会被重复添加
if (addr->servers.elts == NULL) {if (ngx_array_init(&addr->servers, cf->temp_pool, 4,sizeof(ngx_http_core_srv_conf_t *))!= NGX_OK){return NGX_ERROR;}}
初始化存储服务器配置的动态数组 ,确保后续可以安全地将新的服务器配置 (
cscf
) 添加到监听地址 (addr
) 的服务器列表中检查数组是否已初始化
通过判断addr->servers.elts
是否为NULL
,确定该地址的服务器列表是否已经初始化
addr->servers
是 Nginx 中用于 关联监听地址与虚拟主机配置 的核心数据结构,其本质是一个动态数组(ngx_array_t
),存储了指向ngx_http_core_srv_conf_t
类型(虚拟主机配置)的指针ngx_http_core_srv_conf_t-CSDN博客
此时 addr->servers.elts 是 NULL
server = ngx_array_push(&addr->servers);if (server == NULL) {return NGX_ERROR;}*server = cscf;
将当前的 HTTP 服务器配置(
cscf
)添加到监听地址(addr
)的服务器列表(addr->servers
)中
return NGX_OK;
返回 NGX_OK