lighttpd 1.4.46+ serve arquivo específico baseado em $HTTP

lighttpd 1.4.46+ serve arquivo específico baseado em $HTTP

Eu tenho um servidor lighttpd versão 1.4.46+ no Linux que servearquivo1.xmlearquivo2.xmldehtdocsdiretório como está. Existem clientes que solicitam esses arquivos, cada um deles envia umAgente de usuáriocabeçalho para o servidor, que tem formatoMeu aplicativo 12345onde12345é a versão do cliente.

O que preciso fazer é analisar o número da versão12345e servir tambémarquivo1.xmlouarquivo2.xml, dependendo do número da versão do cliente.arquivo1.xmlprecisa ser servido a clientes com número de versão abaixo11255earquivo2.xmlprecisa ser servido aos clientes com número de versão11255e acima, e inverso.

Qual é a maneira mais fácil de fazer isso? De preferência paraevite redirecionamentos, e de preferência paraevite scripts Shell ou Perlenvolvidos, se possível. Evitar redirecionamentos está emPrioridade máxima, enquanto o uso de um script está emprioridade mais baixa.

Algum guru lighttpd por perto para me ajudar, por favor?

Eu tentei correspondência de expressão regular no estilo Perl (=~) em$HTTP["agente do usuário"]e definindo condicionalservidor.document-rootpararaiz_servidor + "/htdocs/arquivo1"ou"/htdocs/arquivo2"que incluem os dois arquivos, mas falhou.

eu queria tentarinclude_shell, mas não tenho certeza de como passar argumentos para o script que possam manipular o número da versão e possivelmente gravar um arquivo de configuração de inclusão com base nos resultados. Eu poderia adicionar condições if para números de versão1-11254servirarquivo1.xmlmas essa lista de condições tornar-se-ia muito grande, o que parece errado.

Responder1

Você pode usar lighttpdmod_magnete algumas linhas de código lua personalizado.

local r = lighty.r
if r.req_attr["physical.path"] == "/path/to/htdocs/file.xml" then
  local ver = string.match(r.req_header["User-Agent"], "MyApp (%d+)")
  local path = string.sub(r.req_attr["physical.path"], 1, -4)   -- remove '.xml'
  if ver and ver > 12345 then
    r.req_attr["physical.path] = path .. "2.xml"
  else
    r.req_attr["physical.path] = path .. "1.xml"
  end
  r.resp_header["Vary"] = "User-Agent"
end
return 0

O texto acima não foi testado e é para lighttpd 1.4.60 ou posterior. A versão atual do lighttpd é lighttpd 1.4.69. Se você estiver executando o lighttpd 1.4.46, é provável que seus sistemas sejam mal mantidos e muito desatualizados, mas você pode encontrar informações sobre as interfaces mod_magnet mais antigas do lighttpd no mesmo documento: lighttpdmod_magnet

informação relacionada