我有一个问题,我目前不知道如何解决它:在后端结构是一个服务器,提供应发送给客户端的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编写我的一个反向代理来解决这个问题。
然而,我很难想象我是第一个遇到问题的人。
答案 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/上的方法