TL;DR

TL;DR

Cuando lo uso log_subrequest onen Nginx, ¿cómo puedo identificar líneas de registro que son subsolicitudes?

Apache tiene la variable IS_SUBREQpero Nginx no parece tener un equivalente.

Estoy usando el slicemódulo y procesando mis registros conALCEy es necesario separar las líneas de registro para las solicitudes principales de las líneas de registro para las subsolicitudes.

Gracias

Respuesta1

TL;DR

Hay una manera, pero no sin un poco de programación.

  • Eliminar parte de la cadena de consulta de$request_uri
  • URI-eliminar el resultado
  • Agregue el $query_string, si lo hubiera
  • Añadir el $query_stringa$uri
  • Compare lo mejorado $uricon lo modificado $request_uri, si no son iguales entre sí, acaba de descubrir una subsolicitud.

Respuesta larga

Actualmente, parece no haber manera de distinguir entre solicitudes interactuadas por el usuario y subsolicitudes con una simplevariablecomo en apache. Algo así como $is_subreqsimplementeno está disponible. (equipo de desarrollo de nginx, ¿alguien?)

En este momento estoy programando un complemento htaccess para nginx, donde necesitaba encontrar una manera de asegurarme de que la solicitud actual sea la original. Esto se puede lograr medianteComparado $uricon$request_uri, y si difieren, la solicitud es un seguimiento.

Peroten cuidado, si compara audazmente las variables, fallará: $uricarece de su $query_stringURL y está decodificada, mientras que $request_urise deja intacta (todavía codificada), con su cadena de consulta adjunta.

Aquí hay un código extraído de mi proyecto real (implementación de htaccess en Lua), donde puedes ver cómo lo hice:

local org_request_uri = ngx.var.request_uri
-- The original requested URI including query string.
-- Make sure uri doesn't end on '?', as request_uri will never match that.
org_request_uri_path = org_request_uri:match('^[^%?]+')
if org_request_uri:len() > org_request_uri_path:len() then
    org_request_uri = ngx.unescape_uri(org_request_uri_path)..
        org_request_uri:sub(org_request_uri_path:len()+1)
else
    org_request_uri = ngx.unescape_uri(org_request_uri_path)
end

local request_uri = ngx.var.uri -- The actual requested URI including query string
if ngx.var.query_string then
    request_uri = request_uri..'?'..ngx.var.query_string
end

información relacionada