当前位置: 首页 > article >正文

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

详解(2)


1. 复制配置前缀(conf_prefix

    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

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

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

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

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 参数传递的配置
参数保留:确保新周期保留启动时的动态配置,避免参数丢失。



http://www.kler.cn/a/566790.html

相关文章:

  • 交叉编译curl(OpenSSL)移植ARM详细步骤
  • 支付宝 IoT 设备入门宝典(下)设备经营篇
  • python 视频网站爬虫教程,爬虫入门教程(付安装包)
  • 基于大型语言模型的google浏览器翻译插件
  • Redis开启远程访问
  • IDEA-插件开发踩坑记录-第七坑-Unable to locate JNA native support library
  • 第15届 蓝桥杯 C++编程青少组中/高级选拔赛 202403 真题答案及解析
  • threeJs+vue 加载gltf模型、获取模型尺寸、播放模型动画
  • React vs Vue3深度对比与使用场景分析
  • 使用机器学习进行土地覆盖分类
  • 网络安全和爬虫的关系
  • elementUI 表格隔行换色,修改table表头背景样式
  • 排序算法归类整理对比
  • 002-快速安装 Linux 虚拟机
  • PyCharm中通过命令行执行`pip`命令下载到哪里了:虚拟环境目录下
  • 如何通过网管提升运维效率?
  • 游戏引擎学习第125天
  • Shell学习(5/6) 流程控制-函数
  • 数据结构秘籍(二)图(含图的概念、存储以及图的两大搜索)
  • 无人机定点运输技术!