Saltar a contenido

ctxdump: Almacena y aplica el antiguo ngx.ctx para evitar que se destruya después de que ocurra una redirección interna de NGINX

Instalación

Si no has configurado la suscripción al repositorio RPM, regístrate. Luego puedes proceder con los siguientes pasos.

CentOS/RHEL 7 o 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

Para usar esta biblioteca Lua con NGINX, asegúrate de que nginx-module-lua esté instalado.

Este documento describe lua-resty-ctxdump v0.1 lanzado el 07 de enero de 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"])
    }
}

Métodos

stash_ngx_ctx

sintaxis: ref = stash_ngx_ctx()
fase: *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*

Referencia el ngx.ctx, devuelve un ancla (una nueva referencia mantenida por lua-resty-ctxdump).

Nota: stash_ngx_ctx y apply_ngx_ctx deben ser llamados en pares, ¡de lo contrario ocurrirá una fuga de memoria! Consulta apply_ngx_ctx.

apply_ngx_ctx

sintaxis: old_ngx_ctx = apply_ngx_ctx(ref)
fase: *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*

Obtiene el antiguo ngx.ctx con el ancla devuelta de stash_ngx_ctx. Después de eso, el ancla dejará de funcionar.

Nota: stash_ngx_ctx y apply_ngx_ctx deben ser llamados en pares, ¡de lo contrario ocurrirá una fuga de memoria! Consulta stash_ngx_ctx.

Ver También

GitHub

Puedes encontrar consejos adicionales de configuración y documentación para este módulo en el repositorio de GitHub para nginx-module-ctxdump.