nginx-1.11.11模块编译报错解决

 · 2017-3-24 · 次阅读


Nginx最新版1.11.11编译报错

最近nginx官网更新了nginx的最新版nginx-1.11.11,于是下载下来想要搭在新买的vps上。
但是发现在了一个问题,在编译添加openresty外部模块lua-nginx-module和echo-nginx-module时
报错,报错如下:


报错分析

由报错信息可以看出lua-nginx-module模块的ngx_http_lua_headers.c文件中的第151和第227行
报类型不匹配的错误。分析lua-nginx-module源码可以看出:
ngx_http_connection_t结构体中的busy参数,由ngx_buf_t的双重指针

变为ngx_chain_tngx_buf_t链表:

下面是报错变量和对应的报错位置:


为何函数中b = hc->busy[i]改为b = hc->busy->buf和结尾的hc->busy = hc->busy->next
就可以了呢?看下图:


与上面的ngx_buf_t的双重指针对比发现了什么呢?
没错,这里其实就是要取ngx_buf_t的值,1.10以及之前的做法是ngx_buf_t双重指针的循环遍历。
而1.11开始使用ngx_chain_s链表来遍历获取ngx_buf_t的值。
我们要做的只不过是将循环中的ngx_buf_t的双重指针的循环修改为链表的方式就好了。
编译之后没有报错:

到此分析的也就差不多了呢,echo模块的报错原因也是如此,就是写blog的过程中官网又更新了最新版nginx-1.11.12版本,
1.11.12版本这部分的代码是一样的,其他地方的修改就不知道了,不知道会不会还有别的和第三方模块不兼容的地方。等待后续验证!