2017-09-14 8 views
0

Expressで動作するISAMプロキシアプリケーション(Proxy-APPと呼ぶ)を使用しています。 ISAMはリバースプロキシコンセプトを使用してトラフィックをバックエンドエクスプレスアプリ(これをAppと呼ぶ)にリダイレクトします。プロキシの後ろにエクスプレスアプリからファイルをダウンロードしようとすると、プロキシが502の不正なゲートウェイエラーが発生する

問題:

私たちにはダウンロード機能がAppで書かれています。下記のように: -

router.get('/fileDownload', function (req, res, next) { 
    res.setHeader('Content-disposition', 'attachment;filename=' + req.query.fileName); 
    request(req.query.url).pipe(res); 
}); 

上記のコードは、外部URL(実際のファイルが含まれています)にリクエストし、応答をパイプします。 断続的に、Proxy-Appログに502 Bad Gatewayが表示されています。

502エラーが発生するとパターンがあります。 Proxy-Appが2分でアプリケーションからの応答を受信しない場合は、502エラーが返されます。

私たちは上記のコードをより効果的に書くことができるので、応答がreq.query.urlから来ないときにエラーを処理できます。

OR

我々は2分のタイムアウトを増やすことができるように、我々はプロキシアプリで何を変更することができます。以下は、http-proxy-middlewareのコンテキストとオプションです。

var context = '/'; 
    var options = { 
    target: TARGET, 
    changeOrigin: true, 
    logLevel: 'info', 
    agent: https.globalAgent, 
    timeout: 3600 * 1000 
    }; 

    var proxy = proxyMiddleware(context, options); 
    app.use(proxy); 

注:上記のタイムアウトは、問題の解決に影響していません。

編集:request node.jsのモジュール

答えて

0

まずISAMの問題はありませんでした。彼らは、裏口サーバーから502 Bad Gatewayのエラーが発生していると回答しました。すなわち私たちのApp。

最初の問題は、デフォルトのタイムアウトが2分だったことです。ノードsee linkにハードコードされています。 This blogこれを確認するのを手伝ってください。

しかし、サーバー/要求/応答のためにsetTimeoutを上げた後、私は長い時間でファイルを取得していました。基本的にはタイムアウトしていませんでした。 (502エラーなし)。

これでも問題は解決しませんでした。私はそれをしばらくしてからではなく、速くしたかった。グーグルでは、hyperquestというノードモジュールを私に与えました。これは同様の問題の設計である。これは、requestモジュールは、HTTP経由でデータをストリームするためのいくつかの制限があることを述べています。

関連する問題