
Tengo un servidor lighttpd versión 1.4.46+ en Linux que sirvearchivo1.xmlyarchivo2.xmldehtdocsdirectorio tal cual. Hay clientes que solicitan estos archivos, cada uno de ellos envía unAgente de usuarioencabezado al servidor, que tiene formatoMiAplicación 12345dónde12345es la versión del cliente.
Lo que tengo que hacer es analizar el número de versión.12345y servir cualquieraarchivo1.xmloarchivo2.xml, dependiendo del número de versión del cliente.archivo1.xmldebe entregarse a los clientes con el número de versión a continuación11255yarchivo2.xmldebe entregarse a los clientes con número de versión11255y arriba, y revertir.
¿Cuál es la forma más sencilla de hacer esto? Preferiblemente aevitar redirecciones, y preferiblemente aEvite los scripts de Shell o Perlinvolucrados, si es posible. Evitar redireccionamientos está enmás alta prioridad, mientras que el uso de un script está enprioridad más baja.
¿Algún gurú de Lighttpd que pueda ayudarme, por favor?
Probé la coincidencia de expresiones regulares de estilo Perl (=~) en$HTTP["usarioagente"]y estableciendo condicionalservidor.raíz-documentoaraíz_servidor + "/htdocs/archivo1"o"/htdocs/archivo2"que incluyen ambos archivos, pero falló.
quería probarincluir_shell, pero no estoy seguro de cómo pasar argumentos al script que pueda manejar el número de versión y posiblemente escribir un archivo de configuración de inclusión basado en los resultados. Posiblemente podría agregar condiciones if para los números de versión.1-11254servirarchivo1.xmlpero esa lista de condiciones sería enorme, lo cual parece incorrecto.
Respuesta1
puedes usar lighttpdmod_magnety algunas líneas 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
Lo anterior no está probado y es para lighttpd 1.4.60 o posterior. La versión actual de lighttpd es lighttpd 1.4.69. Si está ejecutando lighttpd 1.4.46, es probable que sus sistemas tengan un mantenimiento deficiente y estén muy desactualizados, pero puede encontrar información sobre las interfaces mod_magnet de lighttpd más antiguas en el mismo documento: lighttpdmod_magnet