
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