DR

DR

Ao usar log_subrequest onno Nginx, como posso identificar linhas de log que são subsolicitações?

O Apache possui a variável IS_SUBREQ, mas o Nginx não parece ter um equivalente.

Estou usando o slicemódulo e processando meus logs comALCEe precisa separar as linhas de log para solicitações principais das linhas de log para subsolicitações.

Obrigado

Responder1

DR

Existe uma maneira, mas não sem um pouco de programação envolvida.

  • Remover parte da string de consulta de$request_uri
  • URI-desescape do resultado
  • Adicione o $query_string, se houver
  • Adicione o $query_stringa$uri
  • Compare o aprimorado $uricom o modificado $request_uri, se eles não forem iguais, você acabou de descobrir uma subsolicitação.

Resposta longa

Atualmente, parece não haver maneira de distinguir entre solicitações e subsolicitações interagidas pelo usuário com uma simplesvariávelcomo no Apache. Algo como $is_subreqsimplesmentenão está disponível. (equipe de desenvolvimento nginx, alguém?)

No momento estou programando um plugin htaccess para nginx, onde precisava encontrar uma maneira de garantir que a solicitação atual seja a original. Isto pode ser alcançado porem comparação $uricom$request_urie, se forem diferentes, a solicitação será um acompanhamento.

Mastome cuidado, se você comparar as variáveis ​​com ousadia, você falhará: $urinão possui seu $query_stringe é decodificado por URL, enquanto $request_uripermanece intacto (ainda codificado), com sua string de consulta anexada.

Aqui está um código extraído do meu projeto atual (implementação do htaccess em Lua), onde você pode ver como fiz isso:

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

informação relacionada