获取nginx响应头、响应体

在原生nginx中无法获取响应相关信息。我们可以在openresty中借助lua来获取这些信息。

worker_processes  1;
error_log logs/error.log;
events {
    worker_connections 1024;
}
http {
    log_format log_req_resp '$remote_addr - $remote_user [$time_local] '
        '"$request" $status $body_bytes_sent '
        '"$http_referer" "$http_user_agent" $request_time req_body:"$request_body"' 
        ' resp_body:"$resp_body" resp_header:"$resp_header"';

    server {
        listen 8082;
        access_log logs/access.log log_req_resp;

        set $resp_header "";
        header_filter_by_lua '
            local h = ngx.resp.get_headers()
            for k, v in pairs(h) do
            ngx.var.resp_header=ngx.var.resp_header..k..": "..v
            end
        ';

        #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
        ';

        location / {
            echo "Hello World!";
        }
    }
}

注:读取响应时不需要设置lua_need_request_body on; 这个指令是openresty在读取请求时设置的,否则就需要在读取请求前使用ngx.req.read_body(),例如:

ngx.req.read_body()  -- explicitly read the req body
local data = ngx.req.get_body_data()

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值