【问题标题】:Modify html page on reverse proxy with "higher logic"使用“更高逻辑”修改反向代理上的 html 页面
【发布时间】:2017-09-14 19:38:52
【问题描述】:

我有一个问题,我目前不知道如何解决:在后端结构中是一个服务器,它提供应该发送给客户端的 html 网页。经典的反向代理(如 nginx)可以很容易地处理这个问题。

在这种情况下,网站必须在发送给客户之前进行更改。但不是像ngx_http_sub_module 这样允许的简单方式。

网站中有一些附加信息(例如,作为 html 注释的 json 对象)。这些信息是正确修改网站所必需的。

一个发明的例子:

网站包含这个json:

environment = {"user": "admin"}

除此之外:

<!-- if(user == "admin") -->
<strong>Hello Admin!</strong>
<!-- end; -->

“高级”反向代理的任务是了解环境、评估条件并删除不符合条件的内容。还有“元信息”。

无法更改生成此页面的有问题的后端系统。可惜……

在我研究的这一点上,我发现没有可以处理此任务的反向代理。对于大多数代理来说,重写 http 标头是没有问题的,但是如此“高”级别的内容是一个问题。目前,我将使用 PHP(和 nginx)或 node.js 编写我的一个反向代理来解决这个问题。

但是,我很难想象我是第一个遇到问题的人。

【问题讨论】:

    标签: nginx reverse-proxy


    【解决方案1】:

    所以你有不同的选择来解决这个问题,我会列出我能想到的两个

    中间件代理代码

    因此,您将编写一个 PHP、Python 或 NodeJS,Nginx 将向其发送请求,这将查询现有的后端和进程以及输出和返回。

    Nginx 与 Lua 脚本

    您可以安装带有 Lua 脚本功能的自定义 Nginx。 Openresty 是预装了所有这些自定义插件的一种。然后你创建一个像下面这样的配置

    location /apiOld {
        internal;
        proxy_pass http://oldapi;
    }
    
    location /api {
        content_by_lua_file parse_response.lua;
    } 
    

    在 lua 文件中,您将拥有如下所示的内容

    local res = ngx.location.capture("/apiOld");
    local body = res.body
    local cjson = require("cjson")
    local data = cjson.decode(body)
    
    ...do something with data and create desired output...
    local result = "desired output"
    ngx.say(result)
    

    我为创建 Docker 标签元数据服务器做了类似的事情,如果您愿意,可以查看 http://tarunlalwani.com/post/docker-compose-scale-with-dynamic-configuration-part-1/ 上的方法

    【讨论】:

    • 这太棒了!你知道这是否可以使用 Lua 以外的东西来实现?
    猜你喜欢
    • 2019-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多