2012-04-07 13 views
4

私の設定はちょっと変わって見えるかもしれませんが、遠すぎてはいけません。 PHPページと静的ファイルを扱うapache2インスタンスがあります。私はnode-formidableを使ってファイルアップロード(POST)を処理するノードjsサーバーを持っています。その上に、nginx 1.0.14を使用します。 phpファイルで提供されるフォームでアップロードするためにノードサーバーを使用するには、同じドメイン、ポート、プロトコルを使用できるようにnginxを置くことにしました。 したがって、基本的に私は(直接)私のノードjsに、好ましくはプロキシの外側に完全にパイプしたい/アップロードしています。残りはapache2のサーバによってhandledeさ:https://stackoverflow.com/a/1167559nginx proxy_bufferingとnode js formidableを使用したPOST本体のパイプ

に基づいています

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; 
} 

私の問題は、nginxのは、ノードJSにnginxのからそれを送信する前に全体のPOSTリクエストをバッファリングしていることです。私は、ノードのjsがヒットする前に、最大100%までクロムカウントの進捗インジケータとしてこれを確認できます(ローカルホストからローカルホストに送信するので、0-100%のインスタントアップロード)。

proxy_buffering offが私が期待しているように動作していない理由がわかりません(バッファしてはならず、代わりに要求をバックエンドに渡します)。

また、これは別の方法で可能ですか?

どのようなヒント/助けも大歓迎です。

  • キャスパー

  • 注: 私が使用しているので、普及していないとするnginx_tcp_proxy_moduleを使用してみました。 私はVarnishを使用して考えていますが、私が望むことをすることができるので、piping directly to node-js based on url(素晴らしいブログ投稿者、btw。 Varnishはそれを行うことができることを確認している場合

答えて

1

current docsが作る(httpsがサポートされていないので、私はそれをラップする必要があるだろう、しかし、2個のドメイン(本命)と、それは不可能だろう)、それをクリアproxy_bufferingディレクティブのみ応答要求のバッファリングに影響します。

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

POSTリクエストのバッファリングに必要なディレクティブは、proxy_request_bufferingという名前です。再び、from the current docs

クライアントリクエストボディのバッファリングを有効または無効にします。

(キャスパーのためにそれがproxy_request_bufferingディレクティブがこの質問を頼まれたseveral years afterをリリースし、nginxのバージョン1.7.11で追加された注目に値します。)

+0

ありがとう!あなたの答えは私に多くの時間を救った。私のサーバブロックに 'proxy_request_buffering off;'を追加すると動作します。 – codeKonami

関連する問題