es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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}" }

“`

Tags:  ,

Answer

  1. Avatar for 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:

    ubicacion /ruta/solicitud/ {
        access_log /var/log/hook.json json_hook;
        default_type application/json;
        return 200 '{"code": "200", "request_body": $request_body}';
    }
    

    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í.

Comments are closed.