nginx sub_filter的一个小问题
时间:2014-09-22 21:12 来源:linux.it.net.cn 作者:it
因为要实现一个类似sub_filter流式解析输出包的模块,就读它的代码想仿着来写。结果发现了一个小问题,也不知道是否算是bug。
函数ngx_http_sub_parse逐个字符遍历buf,找到要替换的字符串ctx->match。何时才算是完全匹配到了呢?
if (ch == ctx->match.data[looked]) {
ctx->looked.data[looked] = *p;
looked++;
if (looked == ctx->match.len) {
....
return NGX_OK;
}
在前面找到ctx->match的第一个字符时,looked置为1.
问题来了,如果ctx->match长度就是1,那么 if (ch == ctx->match.data[looked]) 永远都不会满足的,也就是不会return NGX_OK了。
也就是说,sub_filter是不支持对单个字符进行替换的。
这样的配置sub_filter "d" "LANRUI"; 是不会生效的。 match的长度至少要为2.
nginx wiki上也没有提及这一点。如果有人确实想实现一个字符的替换,那就自己动手吧,比多个字符的简单多了,不用考虑跨buf的问题。
(责任编辑:IT)
|