Hello!
2015-09-19 7:36 GMT+08:00 YuanSheng Wang:
> location / {
> content_by_lua '
> ngx.req.read_body()
> local data = ngx.req.get_body_data()
> data = data .. " add something..."
>
> local res, err = ngx.location.capture(..., {body=data})
> '
> }
>
在这里使用子请求貌似有点儿重,而且需要缓存所有的请求头数据到 Lua 字符串中,对于大的请求体开销比较大。或许可以这么玩:
1.上 ngx.req.socket 自己以流式方式读取请求体,
2. 然后通过 ngx.req.init_body(), ngx.req.append_body(), 以及
ngx.req.finish_body() 把修改后的请求体数据块写到 nginx 自己的请求体缓冲区(或 nginx
自己创建的临时文件)中去,以供包括 ngx_proxy 在内的其他 nginx C 模块使用
当然,由于你只是添加新内容,你只需要在开头或末尾添加新数据就好了,不用修改已读取的数据块,同时也可以做到严格的流式处理(比如使用 8KB 的缓冲区)。
Regards,
-agentzh