If you’re getting compressed data in the request, and need to pass on the decompressed data, you can use the following code snippet to decompress the request in flight.

-- Handle request
local zlib = require 'zlib'

myStr = nil
if ngx.req.get_headers()['Content-Encoding'] == 'gzip' then

    ngx.req.read_body()
    local myStr = zlib.inflate()(ngx.var.request_body, 'finish')

    ngx.req.clear_header('Content-Encoding')
    ngx.req.clear_header('Content-Length')
    ngx.req.set_body_data(myStr)
end

To use the above, you will need the lua-zlib library which you can install using luarocks install lua-zlib.