From 09915b7aabf86392b3cbfa20ba902f102a42f7e2 Mon Sep 17 00:00:00 2001 From: Daniel Kertesz Date: Fri, 3 Jun 2022 20:28:59 +0100 Subject: [PATCH] log the size of the response headers --- backend/server/routes.go | 10 ++++++++++ backend/server/server.go | 2 ++ outer-proxy/conf/conf.d/default.conf | 16 ++++++++++------ outer-proxy/conf/lua/example.lua | 2 +- outer-proxy/conf/lua/log_headers_size.lua | 20 ++++++++++++++++++++ outer-proxy/conf/nginx.conf | 9 ++++++++- 6 files changed, 51 insertions(+), 8 deletions(-) create mode 100644 outer-proxy/conf/lua/log_headers_size.lua diff --git a/backend/server/routes.go b/backend/server/routes.go index 18ce45e..4e701f6 100644 --- a/backend/server/routes.go +++ b/backend/server/routes.go @@ -43,3 +43,13 @@ func (s *Server) baseHandler(w http.ResponseWriter, r *http.Request) { return } } + +func (s *Server) largeHandler(w http.ResponseWriter, r *http.Request) { + b := make([]byte, 8192) + for i := range b { + b[i] = 'A' + } + + w.Header().Add("X-Large-Header", string(b)) + fmt.Fprintf(w, "very large\n") +} diff --git a/backend/server/server.go b/backend/server/server.go index 24809d7..ca91b27 100644 --- a/backend/server/server.go +++ b/backend/server/server.go @@ -30,6 +30,8 @@ func (s *Server) Run() error { mux := http.NewServeMux() mux.HandleFunc("/", s.baseHandler) + mux.HandleFunc("/large", s.largeHandler) + mux.HandleFunc("/large_error", s.largeHandler) hs := &http.Server{ Addr: fmt.Sprintf("%s:%d", s.Address, s.Port), diff --git a/outer-proxy/conf/conf.d/default.conf b/outer-proxy/conf/conf.d/default.conf index ccbb07e..8075688 100644 --- a/outer-proxy/conf/conf.d/default.conf +++ b/outer-proxy/conf/conf.d/default.conf @@ -21,12 +21,16 @@ server { proxy_pass http://inner-proxy; } - #error_page 404 /404.html; + location /large { + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Real-IP $remote_addr; + proxy_pass http://backend; + proxy_buffer_size 9k; + } - # redirect server error pages to the static page /50x.html - # - error_page 500 502 503 504 /50x.html; - location = /50x.html { - root /usr/share/nginx/html; + location /large_error { + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Real-IP $remote_addr; + proxy_pass http://backend; } } diff --git a/outer-proxy/conf/lua/example.lua b/outer-proxy/conf/lua/example.lua index d585a4d..ab6c012 100644 --- a/outer-proxy/conf/lua/example.lua +++ b/outer-proxy/conf/lua/example.lua @@ -3,7 +3,7 @@ local _M = {} function _M.run() - ngx.var.example_var = "foo" + -- ngx.var.example_var = "foo" end return _M diff --git a/outer-proxy/conf/lua/log_headers_size.lua b/outer-proxy/conf/lua/log_headers_size.lua new file mode 100644 index 0000000..f7d0c90 --- /dev/null +++ b/outer-proxy/conf/lua/log_headers_size.lua @@ -0,0 +1,20 @@ +-- log the total size of the response's headers. +-- https://github.com/openresty/lua-nginx-module#ngxrespget_headers + +local _M = {} + +function _M.run() + local h, err = ngx.resp.get_headers() + if err == "truncated" then + ngx.log(ngx.ERR, "truncated headers from lua") + return + end + + local size=0 + for k, v in pairs(h) do + size = size + string.len(v) + end + ngx.var.headers_size = size +end + +return _M diff --git a/outer-proxy/conf/nginx.conf b/outer-proxy/conf/nginx.conf index bdb456f..3fce57b 100644 --- a/outer-proxy/conf/nginx.conf +++ b/outer-proxy/conf/nginx.conf @@ -32,7 +32,8 @@ http { '"headers":{' '"x_forwarded_for": "$http_x_forwarded_for",' '"x_forwarded_host": "$http_x_forwarded_host",' - '"x_forwarded_proto": "$http_x_forwarded_proto"' + '"x_forwarded_proto": "$http_x_forwarded_proto",' + '"response_size": $headers_size' '},' '"host": "$host",' '"method": "$request_method", ' @@ -88,11 +89,17 @@ http { # Set default values for variables manipulated by Lua scripts. map $request $example_var { default ""; } + map $request $headers_size { default 0; } + # Run the following Lua scripts in the log phase. log_by_lua ' require("example").run() '; + header_filter_by_lua_block { + require("log_headers_size").run() + } + # Misc settings sendfile on; keepalive_timeout 65;