代理之前的Nginx过滤消息

时间:2015-08-11 14:39:55

标签: nginx

我一直在努力创建一个用C语言编写的自定义过滤模块,它可以处理发布消息。读取json有效负载,决定是代理消息还是将204返回给客户端。

我在阅读消息的有效负载时遇到问题,我已阅读了相当多的模块,但遗漏了一些内容。我已经尝试了很多方法来解析有效负载,但似乎无法弄清楚如何只是简单地打印它。

我已经阅读了echo模块,redis模块,Evan Miller的文档等等。

我知道在处理有效负载之前我需要阅读完整的消息,但回调让我感到困惑。我真的不理解ngx_http_read_client_request_body中的回调。我试过阅读代码,但代码中几乎没有文档。

在下面的代码中,我尝试了多个东西来获取请求体,我尝试读取r-> request_body-> buf,bufs,读取完整体后。当我尝试打印请求主体时,我得到了段错误。我认为echo模块最接近我想要做的但是我在ngx_http_echo_wev_handler中对它如何处理请求感到困惑。

static ngx_int_t ngx_http_ortb_handler(ngx_http_request_t *r) {
    ngx_int_t rc;

    ngx_flag_t read_body;

    if (r->method != NGX_HTTP_POST) {
        read_body = 1;
    }

    ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "Received Post");

    if (read_body) {
        rc = ngx_http_read_client_request_body(r, ngx_http_upstream_init);
        if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
            return rc;
        }
        ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "return code %ld", rc);

        // What do I need to do here to read the body. 


    } else {
        r->main->count++;
        rc = ngx_http_discard_request_body(r);
        if (rc != NGX_OK) {
            return rc;
        }
        ngx_http_upstream_init(r);
    }

    return NGX_DECLINED;
}

0 个答案:

没有答案