Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_cycle 函数 - 详解(2)

详解(2)


1. 复制配置前缀(conf_prefix

c 复制代码
    cycle->conf_prefix.len = old_cycle->conf_prefix.len;
    cycle->conf_prefix.data = ngx_pstrdup(pool, &old_cycle->conf_prefix);
    if (cycle->conf_prefix.data == NULL) {
        ngx_destroy_pool(pool);
        return NULL;
    }

从旧周期复制 conf_prefix,用于定位配置文件
平滑重启:保持配置路径一致,避免重新解析路径导致的延迟。

ngx_pstrdup


2. 复制安装前缀(prefix

c 复制代码
cycle->prefix.len = old_cycle->prefix.len;
cycle->prefix.data = ngx_pstrdup(pool, &old_cycle->prefix);
if (cycle->prefix.data == NULL) {
    ngx_destroy_pool(pool);
    return NULL;
}

从旧周期复制 prefix(如 /usr/local/nginx/),用于解析相对路径。

路径一致性:确保模块或日志路径的正确解析,避免配置更新时路径失效。


3. 复制错误日志路径(error_log

c 复制代码
cycle->error_log.len = old_cycle->error_log.len;
cycle->error_log.data = ngx_pnalloc(pool, old_cycle->error_log.len + 1);
if (cycle->error_log.data == NULL) {
    ngx_destroy_pool(pool);
    return NULL;
}
ngx_cpystrn(cycle->error_log.data, old_cycle->error_log.data,
            old_cycle->error_log.len + 1);

继承错误日志路径 :复制旧周期的错误日志文件路径
日志连续性 :初始化阶段使用旧日志配置,避免日志记录中断。
字符串安全性 :通过 ngx_cpystrn 确保字符串以 \0 结尾,防止溢出。


4. 复制配置文件路径(conf_file

c 复制代码
cycle->conf_file.len = old_cycle->conf_file.len;
cycle->conf_file.data = ngx_pnalloc(pool, old_cycle->conf_file.len + 1);
if (cycle->conf_file.data == NULL) {
    ngx_destroy_pool(pool);
    return NULL;
}
ngx_cpystrn(cycle->conf_file.data, old_cycle->conf_file.data,
            old_cycle->conf_file.len + 1);

继承配置文件路径:复制旧周期的配置文件路径


5. 复制配置参数(conf_param

c 复制代码
cycle->conf_param.len = old_cycle->conf_param.len;
cycle->conf_param.data = ngx_pstrdup(pool, &old_cycle->conf_param);
if (cycle->conf_param.data == NULL) {
    ngx_destroy_pool(pool);
    return NULL;
}

继承命令行配置参数 :复制通过 -g 参数传递的配置
参数保留:确保新周期保留启动时的动态配置,避免参数丢失。


相关推荐
TDengine (老段)11 分钟前
TDengine Python 连接器进阶指南
大数据·数据库·python·物联网·时序数据库·tdengine·涛思数据
EndingCoder15 分钟前
类的继承和多态
linux·运维·前端·javascript·ubuntu·typescript
赵渝强老师19 分钟前
【赵渝强老师】OceanBase的配置文件与配置项
数据库·oceanbase
玖日大大1 小时前
OceanBase SeekDB:AI 原生数据库的技术革命与实践指南
数据库·人工智能·oceanbase
oMcLin1 小时前
如何在 RHEL 7 上优化 Nginx 与 PHP‑FPM 配置,确保高并发 Web 应用的稳定性与响应速度?
前端·nginx·php
鲨莎分不晴2 小时前
Nginx 部署前端项目实战指南
运维·前端·nginx
知南x2 小时前
【STM32MP157 视频监控项目】(2) 移植 Nginx
stm32·nginx·音视频
高溪流2 小时前
3.数据库表的基本操作
数据库·mysql
alonewolf_992 小时前
深入剖析MySQL锁机制与MVCC原理:高并发场景下的数据库核心优化
数据库·mysql
一 乐3 小时前
绿色农产品销售|基于springboot + vue绿色农产品销售系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·后端·宠物