2017-09-14 10 views
0

私は現在解決できない問題があります。バックエンド構造では、クライアントに送るべきhtml Webページを提供するサーバーです。古典的なリバースプロキシ(nginxのような)は、この問題を非常に簡単に処理できます。"高論理"の逆プロキシでhtmlページを修正

この場合、ウェブサイトを変更してからクライアントに送信する必要があります。しかし、簡単な方法で、ngx_http_sub_moduleのようにすることはできません。

ウェブサイトには、いくつかの追加情報があります(例:jsonオブジェクトはHTMLコメントです)。これらの情報は、ウェブサイトを正しい方法で変更するために必要です。それに

environment = {"user": "admin"} 

追加この条件は:

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

"高度な" リバースプロキシの仕事を理解することです

ウェブサイトは、このJSONが含まれています

Aは一例を発明しました環境を評価し、条件に合致しないコンテンツを削除する。そして、「メタ情報」も。

このページを生成する問題のあるバックエンドシステムを変更することはできません。残念ながら...

私の研究のこの時点で、私はこのタスクを処理することができるリバースプロキシは見つかりませんでした。 httpヘッダーの書き換えはほとんどのプロキシでは問題ありませんが、このような「高」レベルのコンテンツは問題です。現在、私は、この問題を解決するために、PHP(およびnginx)またはnode.jsを使用して自分のリバースプロキシを作成します。

しかし、私が問題の最初の人であることはほとんど想像もできません。

答えて

0

ですから、問題を解決するためのさまざまなオプションを持って、私はあなたがどのnginxのは意志PHP、PythonやNodeJSを書きます

ミドルウェア・プロキシコード

と考えることができる2つをリストしにリクエストを送信すると、これは既存のバックエンドとプロセスを照会し、出力と戻ります。 Luaのスクリプト

nginxのあなたはnginxのは、Luaのスクリプト機能をインストールするカスタムインストールすることができます。 Openrestyはこれらすべてのカスタムアドオンがプリインストールされています。私はあなたがしたい場合は、あなたが持つことができる、ドッカーラベルメタデータ・サーバを作成するための類似した何かをした

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) 

以下のように、あなたはLuaのファイルで

location /apiOld { 
    internal; 
    proxy_pass http://oldapi; 
} 

location /api { 
    content_by_lua_file parse_response.lua; 
} 

以下のような設定を作成するには、何かを持っていますアプローチを見てくださいhttp://tarunlalwani.com/post/docker-compose-scale-with-dynamic-configuration-part-1/

関連する問題