Хуки-функции — это то, как модули (и Lua-скрипты) участвуют в обработке запросов. Каждый тип хука, предоставляемого сервером, существует для определенной цели, такой как сопоставление запросов с файловой системой, выполнение контроля доступа или установка типов mime:
Быстрый обработчик |
LuaQuickHandler |
Это первый хук, который будет вызываться после сопоставления запроса с хостом или виртуальным хостом. |
Перевести имя |
LuaHookTranslateName |
На этом этапе запрошенный URI преобразуется в имя файла в системе. На этом этапе работают такие модули, как mod_alias и
. mod_rewrite |
Сопоставить с хранилищем |
LuaHookMapToStorage |
На этом этапе файлы сопоставляются с их физическим, кэшированным или внешним/прокси-хранилищем. Может использоваться прокси или кеширующими модулями |
Проверить доступ |
LuaHookAccessChecker |
На этом этапе проверяется, есть ли у клиента доступ к ресурсу. Эта фаза запускается до аутентификации пользователя, так что будьте осторожны.
|
Проверить идентификатор пользователя |
LuaHookCheckUserID |
Этот этап использовался для проверки согласованного идентификатора пользователя. |
Проверить авторизацию |
LuaHookAuthChecker или
LuaAuthzProvider |
На этом этапе пользователь авторизуется на основе согласованных учетных данных, таких как идентификатор пользователя, сертификат клиента и т. д.
|
Тип проверки |
LuaHookTypeChecker |
На этом этапе проверяется запрошенный файл и назначается ему тип содержимого и обработчик. |
Исправления |
LuaHookFixups |
Это последняя фаза «исправить что-либо» перед запуском обработчиков содержимого. Любые последние изменения в запросе следует вносить здесь. |
Обработчик содержимого |
FX. .lua файлы или через LuaMapHandler |
Здесь обрабатывается контент. Файлы читаются, анализируются, некоторые запускаются, и результат отправляется клиенту |
Ведение журнала |
LuaHookLog |
После того, как запрос обработан, он проходит несколько этапов регистрации, в ходе которых запрос регистрируется либо в журнале ошибок, либо в журнале доступа. Mod_lua может подключиться к началу этого и управлять выводом журнала. |
Функциям-ловушкам передается объект запроса в качестве их единственного аргумента (за исключением LuaAuthzProvider, которому также передаются аргументы из директивы Require). Они могут возвращать любое значение, в зависимости от хука, но чаще всего они возвращают OK, DONE или DECLINED, которые вы можете записать в Lua как
apache2.OK
, apache2.DONE
, или
apache2.DECLINED
, или же код состояния HTTP.
translate_name.lua
-- example hook that rewrites the URI to a filesystem path.
require 'apache2'
function translate_name(r)
if r.uri == "/translate-name" then
r.filename = r.document_root .. "/find_me.txt"
return apache2.OK
end
-- we don't care about this URL, give another module a chance
return apache2.DECLINED
end
translate_name2.lua
--[[ example hook that rewrites one URI to another URI. It returns a
apache2.DECLINED to give other URL mappers a chance to work on the
substitution, including the core translate_name hook which maps based
on the DocumentRoot.
Note: Use the early/late flags in the directive to make it run before
or after mod_alias.
--]]
require 'apache2'
function translate_name(r)
if r.uri == "/translate-name" then
r.uri = "/find_me.txt"
return apache2.DECLINED
end
return apache2.DECLINED
end