分类 WEB服务器 下的文章

nginx打印响应内容(reponse body)

oprenresty打印proxy后的响应内容,在默认的log_format并没有提供,只能借助lua来做,定义一个变量,然后再日志里面打印即可。

http {
    log_format accessupdate '$remote_addr [$time_local] $request $status $body_bytes_sent $request_body $resp_body';

    server {
        listen 80;
        location / {
            access_log logs/access.log accessupdate;
            lua_need_request_body on;
            set $resp_body "";
            body_filter_by_lua '
                local resp_body = string.sub(ngx.arg[1], 1, 1000)
                ngx.ctx.buffered = (ngx.ctx.buffered or "") .. resp_body
                if ngx.arg[2] then
                    ngx.var.resp_body = ngx.ctx.buffered
                end
            ';
        }
    }
}

网上有更简单的方案,打印到错误日志里面,但是这种会失去其它log_format的指导作用,这个方式我没有尝试过。

error_log /tmp/nginx.resp.info.log info;

location / {
    proxy_pass http://vpsea.flvcd.com/;
    body_filter_by_lua 'ngx.log(ngx.INFO, ngx.arg[1])';
}