2017-09-17 14 views
0

Nginx/openrestyと他のサービスを1つのVMで実行しています。基本的に、VMはOpenrestyに対する要求を受け入れ、その後、openrestyは要求を適切なサービスに転送します。例えば以下の要求はそれぞれServiceA、ServiceB、ServiceCに転送されます。それは正常に動作しています。複数の応答を統合し、NGINXで1つの応答を送信することは可能ですか?

今、私はすべてのサービスA、BおよびCからの応答を取得し、1つの統合レスポンスを返すことができる新しいエンドポイントを公開する必要があります。

自分の場所に複数のproxy_passを使用することはできません。どのように達成することができますか?例えば

http://server:80/services/refALL - > A、B、Cサービスからの統合応答を返します。

+0

どのような応答が返されますか? HTML、JSON、テキストファイル?そして、結合プロセスはどのくらい正確に機能しますか? –

+0

それは簡単な応答になります。 HTMLはほとんどまたは単にテキスト文字列 – Yogi

答えて

1

あなたは以下のようにすることができます。基本的には他のサービスからの応答を取得して組み合わせる

location /services/refALL { 
    content_by_lua_block { 
     local respA = ngx.location.capture("/services/refA") 
     local respB = ngx.location.capture("/services/refB") 
     local respC = ngx.location.capture("/services/refC") 

     ngx.say(respA.body .. respB.body .. respC.body) 
    } 
} 
+0

それは完璧です。私は単引用符を中括弧で置き換えるだけです。しかし、それは素晴らしい作品です。ステータスがすべて200であれば正常に動作します。しかし、apiのいずれかのhttpステータスコードが200でない場合は、別途報告する必要があります。 – Yogi

+0

@ Yogi、はい、私は誤って 'content_by_lua'と' content_by_lua_block'の構文を混ぜて、今すぐ答えて修正しました。呼び出しに失敗した場合は、 'respA.status'をチェックし、ステータスに基づいてアクションを実行するだけです。 –

+0

だから最終的にngx.say文が実行されます。このためのhttpステータスコードを調べることはできますか?実際には、少なくとも1つのコールがすべて失敗した場合、私は成功していないことを返します。現在は200 OKに戻っています。どのようにすれば500を返すことができますか。 – Yogi

関連する問題