使用"更高逻辑"修改反向代理上的html页面

时间:2017-09-14 19:38:53

标签: nginx reverse-proxy

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

在这种情况下,必须先将网站更改,然后才能将其发送给客户。但不像ngx_http_sub_module允许的那样简单。

网站上还有一些其他信息(例如json对象作为html评论)。这些信息是以正确方式修改网站所必需的。

一个发明的例子:

该网站包含此json:

environment = {"user": "admin"}

除此之外:

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

&#34;高级&#34;的任务反向代理是理解环境,评估条件并删除不符合条件的内容。并且&#34;元信息&#34;还

无法更改生成此页面的有问题的后端系统。不幸的是...

在我的研究的这一点上,我发现没有可以处理这项任务的反向代理。重写http标头对于大多数代理来说都没有问题,但是对于这样的&#34;高&#34;水平是一个问题。目前,我正在用PHP(和nginx)或node.js编写我的一个反向代理来解决这个问题。

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

1 个答案:

答案 0 :(得分:0)

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

中间件代理代码

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

使用Lua Scripting的Nginx

您可以安装使用Lua Scripting功能安装的自定义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/上的方法