登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
在类 Unix 系统中将 Nginx 源码导入 CLion 并调试运行 ...
在类 Unix 系统中将 Nginx 源码导入 CLion 并调试运行
[ 复制链接 ]
痨砖
2025-6-2 22:56:37
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
零、写在最前面
0.1 关于系统
如标题所述,本文的操作需要一个类 Unix 系统(MacOS、CentOS、Ubuntu 等)。
同时这些类 Unix 系统还需要有 gcc 编译器。具体如何搞定这些编译器的内容不在本文范围内,忽略之。
提示:MacOS 自带 C 语言编译器,比较方便,推荐使用。
0.2 关于版本
本文作者测试过的 Nginx 源码版本是 1.16.0 & 1.20.0 & 1.25.0,基本上认为在 [1.16.0 - 1.25.0] 之间的版本都是 OK 的,其他版本请注意区别。
作者学习 Nginx 源码的版本是 1.16.0,可以和这个版本保持一致。
一、背景
想要对 Nginx 源码进行深入学习并了解:
架构是怎样的?
多进程还是多线程?
哪些高级数据结构?
内存如何管理?
配置文件如何解析,如何热加载?
Epoll 事件机制?
负载均衡如何实现的,如何扩展?
但是 Nginx 源码是用 C 语言编写的,且默认使用 Makefile 来构建,不利于导入 CLion 和调试。
于是,需要想办法将其转换为 CMake 工程,这样用 CLion 调试和运行很方便。
二、获取 Nginx 源码
方式一(不太推荐):官网链接
注意下载合适的版本
方式二(推荐):Github 链接
下载后切换到合适的版本
三、生成 CMakeLists.txt
3.1 创建 bash 脚本文件 cmake
执行命令:
cd /home/cyh/nginx (作者的 Nginx 根目录、后续都是这个目录)
执行命令:
vim auto/cmake
cmake 文件的内容一共 46 行,具体如下:
1 #!/usr/bin/env bash
2 NGX_CMAKE_FILE=CMakeLists.txt
3 NGX_CMAKE_TMP=$NGX_OBJS/tmp
4
5 #output includes
6 cmake_ngx_incs=`echo $CORE_INCS $NGX_OBJS $HTTP_INCS $MAIL_INCS \
7 sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \
8 -e "s/\//$ngx_regex_dirsep/g"`
9 cat << END > $NGX_CMAKE_TMP
10 cmake_minimum_required(VERSION 3.6)
11 include_directories(
12 .
13 $cmake_ngx_incs)
14 END
15
16 #output src
17 cmake_ngx_src="$CORE_SRCS $HTTP_SRCS $MAIL_SRCS $NGX_MISC_SRCS $NGX_ADDON_SRCS $NGX_SHARED_SRCS"
18
19 cmake_ngx_src=`echo $cmake_ngx_src | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g"\
20 -e "s/\//$ngx_regex_dirsep/g"`
21
22 cat << END >> $NGX_CMAKE_TMP
23 set(SOURCE_FILES
24 $NGX_OBJS/ngx_modules.c
25 $cmake_ngx_src)
26 END
27
28 #output target
29 cat << END >> $NGX_CMAKE_TMP
30 add_executable(nginx \${SOURCE_FILES})
31 END
32
33
34 #output lib
35 echo ${CORE_LIBS}
36 CMAKE_CORE_LIBS=`echo ${CORE_LIBS} | sed -e "s/-l//g"`
37
38 cat << END >> $NGX_CMAKE_TMP
39 target_link_libraries(nginx $CMAKE_CORE_LIBS)
40 END
41
42 if [ -f $NGX_CMAKE_TMP ]
43 then
44 (cat $NGX_CMAKE_TMP | sed -e "s/\\\//g") > $NGX_CMAKE_FILE
45 rm $NGX_CMAKE_TMP
46 fi
复制代码
继续执行命令:
vim auto/configure
在原来的 . auto/make 的前面,添加一行,内容是:
. auto/cmake
如下图所示:
3.2 执行 configure 脚本生成 CMakeLists.txt 文件
执行命令:
./auto/configure --prefix="./" --without-http_rewrite_module --without-http_gzip_module
命令说明:
执行 auto/configure 这个脚本
--prefix 指定前缀
--without-http_rewrite_module 编译时不要 HTTP 重写模块(要的话,需要安装其他的依赖包,增加复杂度)
--without-http_gzip_module 编译时不要 HTTP 压缩模块(要的话,需要安装其他的依赖包,增加复杂度)
命令执行成功的效果,如下图所示:
最终在 nginx 源码根目录会生成一个 CMakeLists.txt 文件。同时会生成 objs 目录以及里面的几个文件。
如下图所示:
3.3 用 CLion 打开这个 Nginx 工程
此步骤起提示作用,具体操作省略。
3.4 修改 CMakeLists.txt 文件
将 include_directories 指令进行修改,内容如下,否则 clion 会将 /root 目录也作为头文件的搜索路径,这是没有必要的。
include_directories(
.
src/core src/event src/event/modules src/os/unix objs src/http src/http/modules)
复制代码
注意查看生成的 CMakeLists.txt 文件的内容,如果缺少下图中的这一行的话,自行补充上去一下。
具体如图所示:
四、创建 nginx 运行时必要的目录和文件
CLion 这个编辑器,调试过程中的产物都位于 cmake-build-debug 目录下,因此需要在这个目录下创建相关文件。
方式一:执行如下的命令
mkdir -p cmake-build-debug/logs
cp -fr conf cmake-build-debug/
cp -fr html cmake-build-debug/
方式二:鼠标右键操作
打开 CLion 后,直接通过鼠标拷贝,效果是一样的。
最终的想要效果,如下图所示:
五、修改 nginx 配置文件
方式一:执行如下的命令
vim cmake-build-debug/conf/nginx.conf
方式二:直接在 CLion 中编辑文件
不管那种方式,最终的目标是在文件开头新增如下两行内容,表示 nginx 处于前台运行并且是单进程模式工作。
daemon off;
master_process off;
复制代码
最终的效果如下:
六、clion 打开 nginx 源码进行调试
在 src/core/nginx.c 中找 main() 方法,右键点击运行或者调试。
运行成功后,打开浏览器输入 localhost 或者 locaolhost:80 就可以看到 Nginx 的那个标准首页了。
如图所示:
七、总结
使用 CLion 调试 nginx 需要依赖于 CMakeLists.txt 文件。
而 CMakeLists.txt 文件是通过 nginx 源码目录下的 auto/configure 脚本来生成。
有了 CMakeLists.txt 文件,只需要创建 nginx 运行时必须使用到的目录和文件,打开 clion 找到 main 方法点击调试即可。
八、我的 Nginx 源码
在这里
九、参考文档
clion本地调试nginx-1.22.1
使用 CLion debug 跟踪 nginx/OpenResty 源码
十、书籍推荐
书名
作者
版次
Nginx 源码版本
推荐指数
其他信息
《Nginx 底层设计与源码分析》
聂松松,赵禹,施洪宝
2023.12
1.16.0
4星
版本较新,内容全面,难易适中
作为第一本学习 Nginx 的书籍
《深入理解 Nginx 模块开发与架构解析》
陶辉
2019.09
1.0.14
3星
书很好,但是版本比较老了,内容比较深
作为第二本学习 Nginx 的书籍
《Nginx 高性能Web服务开发详解》
苗泽
2013.10
1.2.3
2星
版本比较老,后续有空再来学习吧
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
在类
Unix
系统
中将
Nginx
相关帖子
狂雨小说系统源码
漫画小说听书分销系统源码
EFUCMS正版小说漫画系统源码带第三方支付
nginx解决进程内存占用翻倍
带vip功能的一个网盘系统
Flask 应用部署实战:Nginx 反向代理配置指南
多进程架构+多系统兼容,开发必备!
嵌入式系统内存魔法之分散加载
嵌入式系统内存魔法之分散加载
从繁琐到高效:招聘自动化系统优化招聘流程的关键步骤
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
程序
狂雨小说系统源码
0
41
新程序
2025-12-04
程序
漫画小说听书分销系统源码
0
43
新程序
2025-12-04
程序
EFUCMS正版小说漫画系统源码带第三方支付
0
50
新程序
2025-12-04
业界
nginx解决进程内存占用翻倍
2
287
疝镜泛
2025-12-04
程序
带vip功能的一个网盘系统
3
62
新程序
2025-12-06
业界
Flask 应用部署实战:Nginx 反向代理配置指南
1
950
盒礁泅
2025-12-11
安全
多进程架构+多系统兼容,开发必备!
2
63
百里宵月
2025-12-11
业界
嵌入式系统内存魔法之分散加载
0
867
坪钗
2025-12-13
业界
嵌入式系统内存魔法之分散加载
1
774
梅克
2025-12-13
安全
从繁琐到高效:招聘自动化系统优化招聘流程的关键步骤
1
483
蒋炸役
2025-12-19
回复
(5)
东门清心
2025-10-9 08:52:31
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
收藏一下 不知道什么时候能用到
喳谍
2025-10-28 20:57:16
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
前排留名,哈哈哈
乳杂丫
2025-10-30 05:46:24
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享,学习下。
窖咎
2025-12-4 02:08:18
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
喜欢鼓捣这些软件,现在用得少,谢谢分享!
赊朗爆
2025-12-6 07:11:50
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
热心回复!
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
痨砖
2025-12-6 07:11:50
关注
0
粉丝关注
27
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994892
kk14977
6845357
4
xiangqian
638210
5
韶又彤
9997
6
宋子
9981
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9950
查看更多
今日好文热榜
490
【有手就行】SWIFT:花20分钟把大模型的名
559
论文速读记录 | 2025.12(2)
371
浮点数的本质:为什么计算机无法精确表示0.
726
Flink源码阅读:如何生成JobGraph
926
Python 潮流周刊#132:30 年 Python 自由职
480
大模型榜单周报(2025/12/20)
154
【节点】[LinearToGammaSpaceExact节点]原
789
Aspire 与 Azure Functions 深度集成:架构
1002
阿里Z-Image图像生成模型容器部署
309
痞子衡嵌入式:16MB以上NOR Flash地址模式
668
最新AI换脸软件,全面升级可直播,Mirage下
450
热点 Key 与大 Key 治理——识别、拆分、预
646
Media Extended
329
vlookup的终结者splookup,9个案例讲透查询
872
ROS2之Launch介绍
895
精选 8 个 .NET 开发实用的类库,效率提升
110
精选 8 个 .NET 开发实用的类库,效率提升
599
精选 8 个 .NET 开发实用的类库,效率提升
173
精选 8 个 .NET 开发实用的类库,效率提升
119
精选 8 个 .NET 开发实用的类库,效率提升