Возникла задача логировать всё, что приходит на сервак и ответ. Для этого необходимо воспользоваться настройкой nginx и nginx_lua
В конечном виде, лог выглядиит вот так:
root@queen♕ # tail -f api1-access.log
>>>>90.118.76.65 - [24/Sep/2020:13:47:37 +0300]
HTTP_STATUS: "200" BODY_BYTES_SENT: "96"
HTTP_REFER:""
AGENT:"" REQUEST_TIME: "0.298"
REQUEST_BODY:
<"">
REQUEST: >>>
"GET /MqttPlatform/emq/addressVeh?usr=onthefly&pw=pasw&bleMAC=90:50:D9:1A:66:F6 HTTP/1.1"
RESPONSE: <<<
"{"s":true,"u":"90:50:D9:1A:66:F6","h":"domain.com","p":"20210","t":1600944457}"
Для этого, необходимо в конфиге nginx в файле nginx.conf сделать следующие изменения
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
load_module modules/ndk_http_module.so;
load_module modules/ngx_http_lua_module.so;
events {
worker_connections 1024;
}
http {
include /etc/nginx/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"';
access_log /var/log/nginx/access.log main;
log_format bodylog escape=none '\n>>>>$remote_addr - $remote_user [$time_local] '
'\nHTTP_STATUS: "$status" BODY_BYTES_SENT: "$body_bytes_sent" '
'\nHTTP_REFER:"$http_referer"'
'\nAGENT:"$http_user_agent" REQUEST_TIME: "$request_time"'
'\nREQUEST_BODY:\n<"$request_body">'
'\nREQUEST: >>>\n "$request"'
'\nRESPONSE: <<< \n "$resp_body"';
lua_need_request_body on;
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 80 default_server;
set $resp_body "";
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://127.0.0.1:3000;
access_log /var/log/nginx/server.log bodylog;
}
}
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
Стоит обратить внимание на флаг lua_need_request_body. Для него необходимо установить, две либы
luajit-2.0.4-3.el7.x86_64
luajit-devel-2.0.4-3.el7.x86_64
Установка модулей
В чате nginx_ru один из участников скомпилировал модули
1. Скачиваете модуль в /etc/nginx/modules/
2. Пишете в конфиге
load_module modules/ngx_http_lua_module.so ;Смотрите nginx -t
Photos NASA on The Commons.