免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 2806 | 回复: 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的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

数据风云,十年变迁
DTCC 第十届中国数据库技术大会已启航!

2019年5月8日~5月10日,由IT168旗下ITPUB企业社区平台主办的第十届中国数据库技术大会(DTCC2019),将在北京隆重召开。大会将邀请百余位行业专家,就热点技术话题进行分享,是广大数据领域从业人士的又一次年度盛会和交流平台。与SACC2018类似,本届大会将采用“3+2”模式:3天传统技术演讲+2天深度主题培训。大会不仅提供超100场的主题演讲,还会提供连续2天的深度课程培训,深化数据领域的项目落地实践方案。
DTCC2019,一场值得期待的数据技术盛会,殷切地希望您报名参与!

活动入口>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP