
У меня есть сервер lighttpd версии 1.4.46+ на Linux, который обслуживаетфайл1.xmlифайл2.xmlотhtdocsкаталог как есть. Есть клиенты, которые запрашивают эти файлы, каждый из них отправляетПользователь-агентзаголовок на сервер, который имеет форматМое приложение 12345где12345это клиентская версия.
Мне нужно проанализировать номер версии.12345и служить либофайл1.xmlилифайл2.xml, в зависимости от номера версии клиента.файл1.xmlнеобходимо предоставить клиентам с номером версии ниже11255ифайл2.xmlнеобходимо предоставить клиентам номер версии11255и выше, и наоборот.
Как проще всего это сделать? Предпочтительноизбегать перенаправлений, и желательноизбегайте сценариев оболочки или Perlвовлечены, если возможно. Избегать перенаправлений - этонаивысший приоритет, при этом использование скрипта находится наболее низкий приоритет.
Есть ли среди вас гуру Lighttpd, которые могли бы мне помочь?
Я попробовал регулярное выражение в стиле Perl (=~)$HTTP["useragent"]и установление условныхсервер.документ-кореньккорневой_сервер + "/htdocs/file1"или"/htdocs/file2"которые включают оба файла, но не удались.
Я хотел попробоватьвключить_оболочку, но не уверен, как передать аргументы скрипту, который мог бы обрабатывать номер версии и, возможно, записать файл конфигурации include на основе результатов. Я мог бы, возможно, добавить условия if для номеров версий1-11254служитьфайл1.xmlно этот список условий станет очень большим, что выглядит неправильно.
решение1
Вы можете использовать lighttpdmod_magnetи несколько строк пользовательского кода lua.
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
Вышеизложенное не тестировалось и применимо к lighttpd 1.4.60 или более поздней версии. Текущая версия lighttpd — lighttpd 1.4.69. Если вы используете lighttpd 1.4.46, то, скорее всего, ваши системы плохо обслуживаются и сильно устарели, но вы можете найти информацию о старых интерфейсах lighttpd mod_magnet в том же документе: lighttpdmod_magnet