nginx版本变化引起的自定义http模块的运行异常
来源:互联网 发布:光良 右手边 知乎 编辑:程序博客网 时间:2024/05/21 20:25
在项目中写了个http模块来处理http请求,记得早前的资源服务器那个项目中使用的是nginx 的 0.7.67版本
使用这个版本,在postconfiguration 阶段设置handler的时候使用,指定的是NGX_HTTP_CONTENT_PARSE
是在这个间断去处理请求,这样,一切是正常的。
现在做的的http模块,在执行到自己写的handler中,如果设置超时函数,是不会调用的,不论在指定了超时函数和指定
超时时间后去return NGX_AGAIN 或者是return NGX_DONE,这些都是不会进回调函数的。
去对比现在使用的nginx-1.0.12和之前的nginx-0.7.67版本的代码。
可以在ngx_http_core_module.c的ngx_http_core_content_phase函数中看到:
rc = ph->handler(r); if (rc != NGX_DECLINED) { ngx_http_finalize_request(r, rc); return NGX_OK; }
在调用handler后,如果rc != NGX_DECLINED 就会去调用ngx_http_finalize_request(r, rc);
那么我们设置的超时回调函数,就没有机会去调用。
而在0.7.67版本的ngx_http_core_module.c的ngx_http_core_content_phase函数中是:
rc = ph->handler(r); if (rc == NGX_DONE) { return NGX_OK; } if (rc != NGX_DECLINED) { ngx_http_finalize_request(r, rc); return NGX_OK; }
因此是有与代码的变化,引起了现在的超时函数没有调用
解决方法是:
去查看了一些其他阶段的代码,发现指定NGX_HTTP_PREACCESS_PARSE阶段就可以,当然其他阶段的代码我没去细看。
- nginx版本变化引起的自定义http模块的运行异常
- perl版本差别引起的异常message
- MySQL版本问题引起的异常解决
- innerHTML引起未知的运行时异常
- Nginx的HTTP Access模块
- nginx的HTTP模块编写
- nginx-http模块的数据结构
- nginx的HTTP模块编写
- Nginx模块-简单的HTTP模块
- Android 4.0 中由ProGuard引起的运行异常ClassNotFound
- 13 Nginx的标准http模块
- 【Nginx】开发一个简单的HTTP模块
- nginx HTTP模块的hello world
- Nginx HTTP模块的配置项管理
- Nginx 定义自己的 http 模块
- nginx 开发简单的http模块
- Nginx的HTTP模块介绍-----数据结构部分
- 【Nginx】编译进去自己的HTTP模块
- 黑马程序员_基础学习笔记(4)
- 东亭路
- 那夜我遥望星空
- CRC校验源码分析
- Java绘图备忘
- nginx版本变化引起的自定义http模块的运行异常
- spring框架的IOC和AOP机制模拟
- jQuery之内容过滤选择器
- oracle中建立job定期运行存储过程总结
- eclipse 软件的背景颜色、字体设置
- php面向对象(关键字 :final self static const)
- ASP.NET十个有效性能优化的方法
- 常用软件开发过程模型比较
- ASP.NET应用程序设计的10大技巧(1)