nginx打印請求頭日志方法(親測可用)
一、前言
之前想用nginx打印收到的請求的請求頭,但是只找到打印請求體的,沒有打印請求頭的,感覺原版nginx不支持。
建議如果想打印請求頭,先換成openresty
(本人安裝的是openresty-1.21.4.1.tar.gz版本的)
網(wǎng)上有些文章的配置,本人試了后發(fā)現(xiàn)不行,各種報錯,不知道為什么;
這個的配置可以,在此記錄下
二、openresty打印請求頭方法
1.安裝好openresty
2.找到nginx配置文件nginx.conf,增加一種日志打印格式,可以寫在http {里:
http {
include mime.types;
default_type application/octet-stream;
#這個是默認日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#這個是自定義的打印請求頭的日志格式
log_format accesslog_headers '$time_iso8601'
'\t$request_time'
'\t$status'
'\t$remote_addr'
'\t$http_x_forwarded_for'
'\t$host'
'\t$server_addr'
'\t$request_method'
'\t$uri' #cs-uri-stem
'\t$args' #cs-uri-query
'\t"$http_user_agent"'
'\t"$http_referer"'
'\t$bytes_sent'
'\t$request_length'
'\t$upstream_addr'
'\t$upstream_status'
'\t$upstream_response_time'
'\t$request_uri'
'\t$request_headers'; #設(shè)置這個變量,后面賦值
#這里配置后全局的日志都會用默認日志格式main,日志打印位置是logs文件夾里的access.log文件
access_log logs/access.log main;3.繼續(xù)修改nginx.conf,可以在想打印request_header的location里加,也可以加在全局。
以下是在某個location里加的方法樣例:
location /my/header/api/ {
#這個是增加的,使用打印請求頭的日志格式accesslog_headers,日志打印位置是logs/access_headers.log
access_log logs/access_headers.log accesslog_headers;
#給request_headers變量賦值,使用lua獲取到請求頭
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';
這樣配置可以指定訪問某個location才打印header,并且不影響main格式的日志,比較方便。
4.保存配置文件,重啟nginx。
5.當有請求訪問/my/header/api/時,就會打印日志,本人的日志文件路徑在/home/myuser/openresty/nginx/logs /access_headers.log。
三、備注
1.如果想打印請求體,直接日志格式log_format里加默認的$request_body即可(不用自己賦值),然后就會打印出來。(再次注意原版nginx沒有$request_header,所以才換成openresty自己用lua賦值)
2.如果想打印響應(yīng)頭和響應(yīng)體(例如后臺服務(wù)器返回的),也可以自己日志格式里加2個變量,后續(xù)用lua賦值,然后打印。
到此這篇關(guān)于nginx打印請求頭日志方法(親測可用)的文章就介紹到這了,更多相關(guān)nginx打印請求頭日志內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
nginx中的兩個模塊的proxy_pass的區(qū)別解析
在nginx中配置proxy_pass代理轉(zhuǎn)發(fā)時,如果在proxy_pass后面的url加/,表示絕對根路徑;如果沒有/,表示相對路徑,把匹配的路徑部分也給代理走。本文給大家介紹nginx中的兩個模塊的proxy_pass的區(qū)別,感興趣的朋友一起看看吧2021-11-11

