Nginx lua在proxy_pass之后修改html响应

时间:2014-10-18 06:20:31

标签: nginx lua

我正在尝试为PoC做些什么,并且是为来自动态后端服务器的网页添加href。使用“subs_filter”添加href很容易,但我需要使用响应中嵌入的信息来构造href。

是否可以使用LUA处理来自proxy_pass的响应,修改它并返回请求者(客户端)?

欢迎任何和所有建议。

以下是我正在查看的代码,现在我更了解Lua以及nginx如何使用它我看到'body_filter'是正确的方法。然而,代码看起来很简单,但我无法使正则表达式工作。

进一步的背景,我正在尝试解析返回的proxy_pass响应,解析它的开始和结束时间,然后构建放在头部的JS脚本URL。

我想要反对的示例响应。

Informações Adicionais
   Horário de início: 08H50
   Horário de término: 09H14

“location {}”

中的代码
body_filter_by_lua '
        -- my regex which is validate but doesn't seem to be within LUAJIT
        --local from, to, err = ngx.re.find(ngx.arg[1], "(.início: *\d{2}H\d{2})", "jo")
        local from, to, err = ngx.re.find(ngx.arg[1], "início", "jo")

        replacestr = string.sub(ngx.arg[1], to, 5)

        replaceme = "<script></script></head>"
        ngx.arg[1] = ngx.re.sub(ngx.arg[1],"</head>", replaceme)
    ';

将“início”更改为“head”例如有效,所以我假设它是重音字符,但我无法找到确认信息。

将“início”更改为“ \ d {2} H \ d {2}”失败,“body_filter_by_lua:5:无效的转义序列靠近'”'“

2 个答案:

答案 0 :(得分:0)

我发现了我在评论中提到的关于&#39; nix.header.content_length&#39;而且重要的是nginx和lua需要双重转义,请参阅:lua-nginx-module special pcre sequences了解更多详情。

重音字符需要旗帜&#39; u&#39;添加到&#39; jo&#39; &#39; ngx.re.find&#39;

答案 1 :(得分:0)

用户“body_filter_by_lua_file”

等同于body_filter_by_lua,除了指定的文件包含Lua代码,或者从v0.5.0rc32版本开始,要执行的Lua / LuaJIT字节码。

当给出类似foo / bar.lua的相对路径时,它们将在启动Nginx服务器时变为相对于由-p PATH命令行选项确定的服务器前缀路径的绝对路径。

该指令最初是在v0.5.0rc32版本中引入的。