LINUX.ORG.RU

Lua+nginx и фаза логирования

 ,


0

2

В lua новичок, стоит задача следующего толка. Каким образом с помощью lua можно перед фазой логирования nginx вырезать некоторые данные из POST запроса. Тоесть конкретно в лог что бы они не попадали. Это к примеру данные карт, поля паролей и т.д. Например если хотим из запроса убрать d = 4:

curl --header «Content-Type: application/json» --request POST --data '{a = 1, b = 2, c = 3, d = 4}' https://127.0.0.1

в лог должно записать:

'{a = 1, b = 2, c = 3}' Спасибо за помощь.

Ответ на: комментарий от Semknot

Строка:«папа-пароль-мама»
Ты пишешь регулярку которая матчит строку в 3 capture groups(также можно использовать named groups)
$1=папа
$2=пароль
$3=мама

После чего в переменную my_filtered пишешь $1$3, и логируешь эту переменную вместо $request_body

zolden ★★★★★
()
Ответ на: комментарий от Semknot

Задача сводится к выкусыванию нужных данных из строки(«тела запроса»).
В целом это решаемо без Lua.
Для этого нужно знать регулярки(сейчас, как я понимаю, проблема именно с ними, и без знания этой матчасти дальше продвинуться не получится), посредством их, ты в строке 111112223333 выделяешь части нужным тебе образом, например (11111)(222)(3333) и дальше можешь писать в переменную эти части в произвольном порядке, например х = 222111113333 или х = 111113333.

zolden ★★★★★
()
Ответ на: комментарий от zolden

Скорее с регулярками возможно я розберусь, на данный момент застрял как переопределить переменную.

Использую LUA и есть такой кусок кода:

location /test
 { default_type text/html;
 lua_code_cache off;
 content_by_lua '
     function processRequest()
       ngx.req.read_body()
       changed_request = ngx.req.get_body_data()
     end

     processRequest()

     local str1 = changed_request
     local arr = {}

     for w in string.gmatch(str1, «%d+») do
       table.insert(arr, w)
     end


     ngx.var.changed_request = changed_request
    
     ngx.say("Старая таблица -", changed_request)              

     ngx.say("Новая таблица -", arr)   ';

    }


Переменную changed_request я логирую вместо $request_body

log_format data '"$changed_request"';

и в лог она попадает, вопрос как переопределить ngx.var.changed_request на arr?
Semknot
() автор топика
Ответ на: комментарий от Semknot

С этим разобрался - и опять же не могу дальше понять - как я могу вырезать или манипулировать данными только перед фазой логирования nginx, что бы определенные значения отсутствовали только в лог файле а сам changed_request оставался без изменений.

Semknot
() автор топика
Ответ на: комментарий от zolden

ну разве changed_request для меня не промежуточная переменная?

Semknot
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.