当前位置: > Linux服务器 > nginx >

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)
------分隔线----------------------------
栏目列表
推荐内容