Nginx Log Post: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
Строка 12: Строка 12:
 
log_format postdata escape=json '"$request" $status'
 
log_format postdata escape=json '"$request" $status'
 
' [REQUEST BODY]: $request_body';
 
' [REQUEST BODY]: $request_body';
  +
</PRE>
  +
  +
=Логгирование ответа от backend/upstream=
  +
Иногода (обычно для дебага) нужно логгировать не только запросы но и ответы от бекенда
  +
<BR>Сделать это на "голом" nginx у меня не получилось - только используя Lua.
  +
<BR>Другими словами в некоторых сборках обрадов докер может потребоваться замена версии nginx.
  +
  +
<PRE>
  +
http {
  +
...
  +
log_format bodylog '$remote_addr - $remote_user [$time_local] '
  +
'"$request" $status $body_bytes_sent '
  +
'"$http_referer" "$http_user_agent" $request_time '
  +
'<"$request_body" >"$resp_body"';
  +
  +
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
  +
';
  +
...
  +
}
  +
</PRE>
  +
<PRE>
  +
server {
  +
listen 1.2.3.4;
  +
  +
location / {
  +
proxy_pass http://127.0.0.1:3000;
  +
access_log /var/log/nginx/server.log bodylog;
  +
}
 
</PRE>
 
</PRE>

Версия 13:19, 5 августа 2021


Nginx Log POST

Иногдя нужно логгирировать (обычно для дебага) что отправляют через POST

Вот пример

    log_format postdata escape=json '"$request" $status'
                                    ' [REQUEST BODY]: $request_body';

Логгирование ответа от backend/upstream

Иногода (обычно для дебага) нужно логгировать не только запросы но и ответы от бекенда
Сделать это на "голом" nginx у меня не получилось - только используя Lua.
Другими словами в некоторых сборках обрадов докер может потребоваться замена версии nginx.

http {
  ...
  log_format bodylog '$remote_addr - $remote_user [$time_local] '
      '"$request" $status $body_bytes_sent '
      '"$http_referer" "$http_user_agent" $request_time '
      '<"$request_body" >"$resp_body"';

  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
  ';
...
}
server {
  listen 1.2.3.4;
 
  location / {
    proxy_pass http://127.0.0.1:3000;
    access_log  /var/log/nginx/server.log bodylog;
  }