Nginx版本变化引起的自定义http模块的运行异常

Linux大全评论1.1K views阅读模式

在项目中写了个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函数中看到:

  1. rc = ph->handler(r);  
  2.   
  3. if (rc != NGX_DECLINED) {  
  4.     ngx_http_finalize_request(r, rc);  
  5.     return NGX_OK;  
  6. }  

在调用handler后,如果rc != NGX_DECLINED 就会去调用ngx_http_finalize_request(r, rc);

那么我们设置的超时回调函数,就没有机会去调用。

而在0.7.67版本的ngx_http_core_module.c的ngx_http_core_content_phase函数中是:

  1. rc = ph->handler(r);  
  2.   
  3. if (rc == NGX_DONE) {  
  4.     return NGX_OK;  
  5. }  
  6.   
  7. if (rc != NGX_DECLINED) {  
  8.     ngx_http_finalize_request(r, rc);  
  9.     return NGX_OK;  
  10. }  

因此是有与代码的变化,引起了现在的超时函数没有调用

企鹅博客
  • 本文由 发表于 2020年4月5日 09:02:40
  • 转载请务必保留本文链接:https://www.qieseo.com/148289.html

发表评论