「Nginx」- 記錄 HTTP 請求頭到日志 @20210130


問題描述

我們希望在日志中記錄 HTTP 請求頭信息,以查看請求信息、進行請求調試等等。

該筆記將記錄:在 Nginx 中,如何在日志中記錄 HTTP 請求頭信息。

解決方案

簡單說:目前(01/11/2021),沒有直接的方案(變量),需要變通處理。

方案一、枚舉變量

我們自定義日志格式,並在日志中打印這些變量。如下示例,輸出部分與客戶端網絡地址有關的變量:

log_format client_ip_address '[$time_local] Host="$http_host", '
                             'Forwarded="$http_forwarded", '
                             'X-Forwarded-For="$http_x_forwarded_for", '
                             'X-Forwarded-Host="$http_x_forwarded_host", '
                             'X-Forwarded-Proto="$http_x_forwarded_proto", '
                             'X-REAL-IP="$http_x_real_ip", '
                             'realip_remote_addr="$realip_remote_addr", '
                             'remote_addr="$remote_addr", '
                             'server_addr="$server_addr", '                          
                             'upstream_addr="$upstream_addr", ' ;

server {
	...
    access_log /var/log/nginx/client-ip-address.log client_ip_address;
    ...
}

方案二、使用 Lua 模塊

1)安裝 lua-nginx-module 模塊:

# Debian GNU/Linux 10 (buster)
apt-get install libnginx-mod-http-lua

# 通常開箱即用,無需使用 load_module /path/to/module.so 引入模塊

2)使用如下代碼進行頭部記錄:

# 該示例,將頭部信息寫入日志
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
}

# 該示例,將直接返回請求頭
location /request_headers {
	
	default_type 'text/plain';
	
	# 或者寫在變量中,然后進行引用
	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..";\\n"
	  end
	  return request_headers_all';
	  
	return 200 $request_headers;
	
}

注意事項,我們沒有展開深入說明,只提供思路(並驗證有效)。

參考文獻

WikiNotes/記錄 HTTP 請求頭到日志
logging - How to log all headers in nginx? - Stack Overflow
openresty/lua-nginx-module: Embed the Power of Lua into NGINX HTTP servers



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM