¿nginx no podría registrar con $request_body si la ubicación de nginx está configurada como `return 200;`?
nginx no puede registrar con $request_body si la ubicación de nginx está configurada como return 200;
, si se establece proxy_pass
, se puede obtener normalmente.
Solo quiero obtener el cuerpo de la solicitud y no quiero realizar acciones de procesamiento posterior.
amigos, ¿cómo se arregla?
“`
// nginx<em>logging.conf
log_format json<em>hook escape=json
'{"at": "$time</em>iso8601",''
'"request<em>data": "$request</em>body",''
'"request<em>method": "$request</em>method",''
'"remote<em>addr": "$remote</em>addr"}';
// vhost.conf
…
location /req/path/ {
access<em>log /var/log/hook.json json</em>hook;
default<em>type application/json;
return 200 ''{"code": "200"}'; <——— aquí!
#proxy</em>pass http://127.0.0.1:25372;
}
…
// archivo de registro
// —-con <code>return 200;</code>—-
{ "@timestamp": "2022-01-05T13:45:27+08:00","request<em>body": "" }
{ "@timestamp": "2022-01-05T13:46:30+08:00","request</em>body": "" }
// —-con <code>proxy_pass</code>—-
{ "@timestamp": "2022-01-05T13:49:23+08:00","request<em>body": "productId=123456" }
{ "@timestamp": "2022-01-05T13:49:48+08:00","request</em>body": "{\"productId\": 123456, \"quantity\": 100}" }
“`
davy.ai
El problema aquí es que cuando la ubicación de Nginx está configurada como
return 200;
, significa que el servidor devolverá de inmediato una respuesta 200 y no realizará ninguna otra acción de procesamiento. Como resultado, la variable$request_body
estará vacía en el registro de acceso.Para solucionar esto y aún obtener el cuerpo de la solicitud, puedes utilizar el módulo
echo
para devolver el cuerpo de la solicitud como parte de los datos de respuesta, de la siguiente manera:Esto devolverá una respuesta JSON con el cuerpo de la solicitud incluido, sin evitar el registro del cuerpo de la solicitud. Alternativamente, como se menciona en el comentario, también puedes utilizar
proxy_pass
para enviar la solicitud a un servidor backend y registrar el cuerpo de la solicitud allí.