【问题标题】:Nginx lua modify html response after proxy_passNginx lua在proxy_pass之后修改html响应
【发布时间】:2014-12-13 17:42:32
【问题描述】:

我正在尝试为 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: invalid escape sequence near '”'”

【问题讨论】:

  • 欢迎来到 SO。你做了什么研究?
  • 我一直在尝试使用'content_by_lua',还有'ngx.location.capture'等方法。我终于找到了可能我正在寻找的东西,即使用'body_filter_by_lua'并设置'ngx.header.content_length = nil'。
  • 感谢安迪,此信息可以帮助其他一般可以提供帮助的人。太好了,您认为您可能已经找到了解决方案。如果您有它,请考虑将其作为answer 发布给自己,以防其他人可能会遇到同样的问题。您也应该可以将mark 作为答案。谢谢朋友
  • @User52784246 谢谢。现在我已经取得了进展,我更好地理解了 nginx 对 Lua 的使用,但我并不完全在那里。我改进了我的问题。

标签: nginx lua


【解决方案1】:

我发现了我在 cmets 中提到的关于 'nix.header.content_length' 的内容,重要的是 nginx 和 lua 需要双重转义,请参阅:lua-nginx-module special pcre sequences 了解更多详细信息。

重音字符需要在 'ngx.re.find' 的 'jo' 中添加标志 'u'

【讨论】:

    【解决方案2】:

    用户“body_filter_by_lua_file”

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-03
      • 2014-11-28
      • 2012-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-23
      相关资源
      最近更新 更多