ctxdump: Сохранение и применение старого ngx.ctx для предотвращения его уничтожения после внутреннего перенаправления NGINX
Установка
Если вы еще не настроили подписку на RPM-репозиторий, зарегистрируйтесь. Затем вы можете продолжить с следующими шагами.
CentOS/RHEL 7 или Amazon Linux 2
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-ctxdump
CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-ctxdump
Чтобы использовать эту библиотеку Lua с NGINX, убедитесь, что установлен nginx-module-lua.
Этот документ описывает lua-resty-ctxdump v0.1, выпущенный 7 января 2021 года.
location /t1 {
set $ctx_ref = "";
content_by_lua_block {
local ctxdump = require "resty.ctxdump"
ngx.ctx = {
Date = "Wed May 3 15:18:04 CST 2017",
Site = "unknown"
}
ngx.var.ctx_ref = ctxdump.stash_ngx_ctx()
ngx.exec("/t2")
}
}
location /t2 {
internal;
content_by_lua_block {
local ctxdump = require "resty.ctxdump"
ngx.ctx = {
Date = "Wed May 3 15:18:04 CST 2017",
Site = "unknown"
}
ngx.ctx = ctxdump.apply_ngx_ctx(ngx.var.ctx_ref)
ngx.say("Date: " .. ngx.ctx["Date"] .. " Site: " .. ngx.ctx["Site"])
}
}
Методы
stash_ngx_ctx
синтаксис: ref = stash_ngx_ctx()
фаза: *init_worker_by_lua*, set_by_lua*, rewrite_by_lua*, access_by_lua*,
content_by_lua*, header_filter_by_lua*, body_filter_by_lua*, log_by_lua*,
ngx.timer.*, balancer_by_lua*
Ссылается на ngx.ctx, возвращает якорь (новую ссылку, поддерживаемую lua-resty-ctxdump).
Примечание: stash_ngx_ctx и apply_ngx_ctx должны вызываться парами, в противном случае произойдет утечка памяти! См. apply_ngx_ctx.
apply_ngx_ctx
синтаксис: old_ngx_ctx = apply_ngx_ctx(ref)
фаза: *init_worker_by_lua*, set_by_lua*, rewrite_by_lua*, access_by_lua*,
content_by_lua*, header_filter_by_lua*, body_filter_by_lua*, log_by_lua*,
ngx.timer.*, balancer_by_lua*
Получает старый ngx.ctx с якорем, возвращаемым из stash_ngx_ctx. После этого якорь перестанет работать.
Примечание: stash_ngx_ctx и apply_ngx_ctx должны вызываться парами, в противном случае произойдет утечка памяти! См. stash_ngx_ctx.
См. также
- upyun-resty: https://github.com/upyun/upyun-resty
GitHub
Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-ctxdump.