免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4852 | 回复: 2

[其他] nginx大神进来看!!接收请求包体后怎么继续执行后续阶段? [复制链接]

论坛徽章:
0
发表于 2018-06-06 18:18 |显示全部楼层
有个需求要根据request的body的内容决定要不要proxy_pass,我在preaccess阶段的handler里调用ngx_http_read_client_request_body来接收body,在ngx_http_read_client_request_body的回调函数里面解析body的内容,正常就继续后续阶段的处理,由proxy模块转发请求到upstream,异常就直接返回一个403页面.在preaccess_handler里直接返回NGX_DECLINED框架就会继续往后执行了,ngx_http_read_client_request_body的回调函数里要怎么搞才能继续执行后续阶段啊?跪求nginx开发大神们给个解决方案谢谢!!!!!
代码大致就是这个样子:
static void
read_body_done(ngx_http_request_t *r)
{

    ...
    rc = process_body(r);
    if (rc == NGX_OK) {
        // 执行后续阶段的handler
    } else {
        // 返回403
    }
}


static ngx_int_t
preaccess_handler(ngx_http_request_t *r)

{
    ...
    rc = ngx_http_read_client_request_body(r, read_body_done);
    if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
        return rc;
    }
    return NGX_AGAIN;

}


论坛徽章:
0
发表于 2018-07-21 15:28 来自手机 |显示全部楼层
建议用ngx lua实现比较简单,在access by lua事件中读取所有的体,判断,或ngx.exit(403),或return以走proxy模块

论坛徽章:
0
发表于 2018-07-21 15:31 来自手机 |显示全部楼层
如果领导不让用ngx lua,可以参考ngx lua在ngx_http_lua_access_handler中是怎么使用ngx_http_read_client_request_body的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP