4

私のセットアップは少し変わっているように見えるかもしれませんが、あまりフェッチされるべきではありません。phpページと静的ファイルをサーバーするapache2インスタンスがあります。node-formidablePOSTを使用してファイルのアップロード()を処理するノードjsサーバーがあります。その上に、を使用します。phpファイルで提供されるフォームでのアップロードにノードサーバーを使用するために、同じドメイン、ポート、およびプロトコルを維持できるようにnginxを配置することにしました。つまり、基本的に/ uploadをノードjsに(直接)パイプし、できればプロキシの外部に完全にパイプします。残りはapache2サーバーによって処理されます:nginx 1.0.14

location /upload {
    client_max_body_size        10m;
    client_body_buffer_size     128k;
    proxy_connect_timeout       600;
    proxy_send_timeout          600;
    proxy_read_timeout          600;
    proxy_buffer_size           4k;
    proxy_buffers               4 32k;
    proxy_busy_buffers_size     64k;
    proxy_temp_file_write_size  64k;
    send_timeout                600;
    proxy_buffering             off;
    proxy_pass https://node_backend;
}
location / {
    proxy_set_header Host $http_host;
    proxy_pass https://apache_backend;
}

これはhttps://stackoverflow.com/a/1167559に基づいています

私の問題は、nginxからノードjsに送信する前に、nginxがPOSTリクエスト全体をバッファリングすることです。これは、ノードjsがヒットする前にChromeの進行状況インジケーターが100%までカウントされることで確認できます(0〜100%のインスタントアップロード(ローカルホストからローカルホストに送信されるため))。

proxy_buffering offなぜ期待どおりに機能しないのかわかりません(バッファリングしないで、受信時にリクエストをバックエンドに渡す必要があります)。

あるいは...これは他の方法で可能ですか?

ヒント/ヘルプは大歓迎です。

  • キャスパー

  • 注:nginx_tcp_proxy_moduleあまり普及していないものを使ってみました。Varnish自分のやりたいことができるので、URLに基​​づいてnode-jsに直接パイプすることを検討しました(著者による優れたブログ投稿、読む価値があります)が、httpsサーバーを実行しています(実際には2つ) )それVarnishができるかどうかはわかりませhttpsん(サポートされていないので、ラップする必要がありますが、2つのドメイン(証明書)では不可能です)

4

1 に答える 1

1

現在のドキュメントproxy_bufferingでは、ディレクティブがリクエストではなくレスポンスのバッファリングにのみ影響することを明確にしています。

プロキシ サーバーからの応答のバッファリングを有効または無効にします。

POST リクエストをバッファリングするために必要なディレクティブは、適切な名前のproxy_request_buffering. 繰り返しますが、現在のドキュメントから:

クライアント要求本文のバッファリングを有効または無効にします。

(Casperのために、この質問がされてから数年後proxy_request_bufferingにリリースされたnginxバージョン1.7.11にディレクティブが追加されたことに注意してください。)

于 2016-05-28T05:19:21.807 に答える