How to log all headers in nginx?

前端 未结 3 1398
醉酒成梦
醉酒成梦 2020-12-15 02:39

How do I log all the headers the client (browser) has sent in Nginx? I also want to log the response headers. Note that I am using nginx as reverse proxy.

After goi

相关标签:
3条回答
  • 2020-12-15 03:24

    Based on @user1778602 response the set_by_lua can be used to set all headers into a variable to be consumed later at the log_format. The following sets all headers in the variable "$request_headers"

    set_by_lua $request_headers '
      local h = ngx.req.get_headers()
      local request_headers_all = ""
      for k, v in pairs(h) do
        request_headers_all = request_headers_all .. ""..k..": "..v..";"
      end
      return request_headers_all
    ';
    
    0 讨论(0)
  • 2020-12-15 03:33

    After much research, I can conclude that it is not possible out of the box.

    Update- you can use openresty which comes with Lua. Using Lua one can do pretty cool things, including logging all of the headers to say, Redis or some other server

    0 讨论(0)
  • 2020-12-15 03:40

    As @gauravphoenix said you need opnresty which comes with Lua. See https://github.com/openresty/lua-nginx-module/ for installing it. Once it's running then add in nginx

    header_filter_by_lua_block {
      local h = ngx.req.get_headers()
      for k, v in pairs(h) do
        ngx.log(ngx.ERR, "Got header "..k..": "..v..";")
      end
    }
    

    Inspect your error log.

    0 讨论(0)
提交回复
热议问题