文档章节

nginx 源码调试

悬崖
 悬崖
发布于 2016/04/14 12:58
字数 499
阅读 161
收藏 3
点赞 1
评论 1

这段时间正在学习nginx源码,看到一贴子的提问 (帖子:http://www.oschina.net/question/2711991_2165566?p=1#AnchorAnswer1114315),决定试试能不能搞定。

这个帖子的主要问题是,自己写的第三方模块,不能使用gzip压缩,nginx自带模块使用正常。

对nginx 熟悉的大牛,估计一眼就能看出问题所在,对于我这种小菜,比对了helloworld模块跟status模块,也没看出问题所在,只能用绝招跟踪两个模块的源码。

nginx是多个work进程,为了方便调试,把修改nginx.conf配置文件,只启用1个work进程。

现在是status模块可以gzip,  helloword模块不能gzip, 说明gzip模块的配置是正确,初步怀疑是helloword模块中的某些参数配置不正确,导致没有调用到gzip。

查看ngx_http_gzip_filter_module.c代码,ngx_http_gzip_header_filter()函数为此模块的handle函数。

ps -ef|grep nginx  查看nginx进程号,

32259 为nginx工作进程号。

gdb attach 32259   启动gdb 附加到此进程

b ngx_http_gzip_header_filter  打断点,到此函数,

使用curl给nginx 发信息,

curl -I  -H"accept-encoding:gzip" "http://127.0.0.1/hello_world"  

gdb 能断到此函数,说明能进入gzip模块。

然后单步运行,发现在这句(return ngx_http_next_header_filter(r);)返回了,并没有继续执行。

 

之后使用curl -I  -H"accept-encoding:gzip" "http://127.0.0.1/nginx-status" 发送,并没有在此位置退出,说明是上面判断条件成立,使helloword模块返回了。

单步跟踪之后是ngx_http_test_content_type(r, &conf->types) == NULL条件成立,于是根据此函数进去,发现没有进入for循环,p len 为0, 顾发现content_type_len 没有设置。


在helloworld模块中,添加:r->headers_out.content_type_len = sizeof("text/plain") - 1;

 由于要使用压缩,在helloworld 模块,不能指定content_length, 删掉 r->headers_out.content_length_n = content_length;


重新编译源码,测试发送:

此处应有掌声  -_-

————————————————————————————————————————

由于水平有限,文章中有错误在所难免,请大家包含并指教,谢谢!


© 著作权归作者所有

共有 人打赏支持
悬崖
粉丝 3
博文 37
码字总数 22549
作品 0
海淀
程序员
加载中

评论(1)

yizhiniu
yizhiniu
79
Nginx 源码学习资料

转自http://www.cnblogs.com/yjf512/archive/2012/06/13/2548515.html nginx源码学习是一个痛苦又快乐的过程,下面列出了一些nginx的学习资源。 首先要做的当然是下载一份nginx源码,可以从n...

小南学技术 ⋅ 2016/08/09 ⋅ 0

nginx源码学习资源(不断更新)

nginx源码学习是一个痛苦又快乐的过程,下面列出了一些nginx的学习资源。 首先要做的当然是下载一份nginx源码,可以从nginx官方网站下载一份最新的。 看了nginx源码,发现这是一份完全没有注...

王二狗子11 ⋅ 01/08 ⋅ 0

c语言开源项目--nigix学习资料总结 by 博客园 叶剑峰

nginx源码学习是一个痛苦又快乐的过程,下面列出了一些nginx的学习资源。 首先要做的当然是下载一份nginx源码,可以从nginx官方网站下载一份最新的。 看了nginx源码,发现这是一份完全没有注...

文艺小青年 ⋅ 2017/04/08 ⋅ 0

eclipse调试nginx

目前只是简单的将框架搭建了起来,具体要一步一步的调试和多进程调试还要继续探索。 假设你已经有了nginx的源码 接下来要做的是./configure 配置的信息参考http://wiki.nginx.org/NginxChsI...

Orion ⋅ 2011/09/30 ⋅ 0

nginx模块_使用gdb调试nginx源码

工欲善其事必先利其器,如何使用调试工具gdb一步步调试nginx是了解nginx的重要手段。 ps:本文的目标人群是像我这样初接触Unix编程的同学,如果有什么地方错误请指正。 熟悉gdb的使用 这里就...

王二狗子11 ⋅ 01/08 ⋅ 0

nginx_Nchan调试

Nchan作为Nginx web服务器的一个模块,实现了发布/订阅服务器。我这里的调试通过HTTP POST请求发布消息,通过长轮训来订阅消息。(还有其他的发布、订阅的方式,比如websocket。) 1、 下载n...

一万 ⋅ 2016/07/28 ⋅ 0

nginx_Nchan调试

Nchan作为Nginx web服务器的一个模块,实现了发布/订阅服务器。我这里的调试通过HTTP POST请求发布消息,通过长轮训来订阅消息。(还有其他的发布、订阅的方式,比如websocket。) 1、 下载n...

一万 ⋅ 2016/07/18 ⋅ 0

nginx的小总结(一)

nginx是一个免费、开源、高性能的HTTP server、反向代理服务器以及邮件代理服务器。因其高性能、可靠性好、丰富的特征插件、极低的资源消耗而闻名! NGINX的编译安装(RHEL6.0) [root@serv...

fsxchen ⋅ 2013/02/27 ⋅ 3

nginx 调试意外

你好。我是一名在读研究生。遇到调试nginx源码的问题。总是调试到os/unix/ngx_daemon.c 意外跳出,但是用ps命令查看,却已经开始运行master和worker。有点不明白,望指导。910900429@qq.com...

zhaoruixue ⋅ 2011/11/04 ⋅ 2

linux 下编译安装 nginx

1.环境说明 ubuntu 12.04 源码存储路径 /home/wzw/workstation/src 安装路径 /home/wzw/workstation/env 切换到工作目录 cd /home/wzw/workstation/src/ 2.zlib wget http://zlib.net/zlib-1......

酒肉穿肠过 ⋅ 2013/08/07 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

RabbitMQ学习以及与Spring的集成(三)

本文介绍RabbitMQ与Spring的简单集成以及消息的发送和接收。 在RabbitMQ的Spring配置文件中,首先需要增加命名空间。 xmlns:rabbit="http://www.springframework.org/schema/rabbit" 其次是模...

onedotdot ⋅ 24分钟前 ⋅ 0

JAVA实现仿微信红包分配规则

最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指教。 算法介绍 一、红包金额限制 对于微...

小致dad ⋅ 36分钟前 ⋅ 0

Python 数电表格格式化 xlutils xlwt xlrd的使用

需要安装 xlutils xlwt xlrd 格式化前 格式化后 代码 先copy读取的表格,然后按照一定的规则修改,将昵称中的学号提取出来替换昵称即可 from xlrd import open_workbookfrom xlutils.copy ...

阿豪boy ⋅ 今天 ⋅ 0

面试题:使用rand5()生成rand7()

前言 读研究生这3 年,思维与本科相比变化挺大的,这几年除了看论文、设计方案,更重要的是学会注重先思考、再实现,感觉更加成熟吧,不再像个小P孩,人年轻时总会心高气傲。有1 道面试题:给...

初雪之音 ⋅ 今天 ⋅ 0

Docker Toolbox Looks like something went wrong

Docker Toolbox 重新安装后提示错误:Looks like something went wrong in step ´Checking if machine default exists´ 控制面板-->程序与应用-->启用或关闭windows功能:找到Hyper-V,如果处......

随你疯 ⋅ 今天 ⋅ 0

Guacamole 远程桌面

本文将Apache的guacamole服务的部署和应用,http://guacamole.apache.org/doc/gug/ 该链接下有全部相关知识的英文文档,如果水平ok,可以去这里仔细查看。 一、简介 Apache Guacamole 是无客...

千里明月 ⋅ 今天 ⋅ 0

nagios 安装

Nagios简介:监控网络并排除网络故障的工具:nagios,Ntop,OpenVAS,OCS,OSSIM等开源监控工具。 可以实现对网络上的服务器进行全面的监控,包括服务(apache、mysql、ntp、ftp、disk、qmail和h...

寰宇01 ⋅ 今天 ⋅ 0

AngularDart注意事项

默认情况下创建Dart项目应出现以下列表: 有时会因为不知明的原因导致列表项缺失: 此时可以通过以下步骤解决: 1.创建项目涉及到的包:stagehand 2.执行pub global activate stagehand或pub...

scooplol ⋅ 今天 ⋅ 0

Java Web如何操作Cookie的添加修改和删除

创建Cookie对象 Cookie cookie = new Cookie("id", "1"); 修改Cookie值 cookie.setValue("2"); 设置Cookie有效期和删除Cookie cookie.setMaxAge(24*60*60); // Cookie有效时间 co......

二营长意大利炮 ⋅ 今天 ⋅ 0

【每天一个JQuery特效】淡入淡出显示或隐藏窗口

我是JQuery新手爱好者,有时间就练练代码,防止手生,争取每天一个JQuery练习,在这个博客记录下学习的笔记。 本特效主要采用fadeIn()和fadeOut()方法显示淡入淡出的显示效果显示或隐藏元...

Rhymo-Wu ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部