6

バックエンド サーバーとして apache を使用しています。これは、php スクリプトを実行し、nginx を静的コンテンツを処理するリバース プロキシ サーバーとして実行します。いくつかのプロセスの ID を提供し、このプロセスを実行する php スクリプト (かなり長い)。そのプロセスの ID のみをブラウザーに渡す必要があります。

  // ...
  ob_start();

  echo json_encode($arResult); // only this data should be passed to browser

  $contentLength = ob_get_length();
  header('Connection: close');
  header('Content-Length: ' . $contentLength);

  ob_end_flush();
  ob_flush();
  flush();
  // then performed a long process

(別の ajax スクリプトでプロセスのステータスを確認します)

これは、apache だけで問題なく動作します。しかし、Apache が nginx の背後にあると問題が発生します。この場合、プロセスが完全に終了した場合にのみ応答を受け取ります。

nginx 設定:

server {
  #...
  proxy_set_header Connection close;

  proxy_pass_header Content-Length;
  #...
}

しかし、私はまだ FireBug で Connection keep-alive を取得しています。

nginx に apache からすぐに応答させるにはどうすればよいですか?

質問が明確であることを願っています。

ありがとう。

4

3 に答える 3

7

nginx で proxy_buffering をオフにしてみましたか? 接続を閉じるかどうかはわかりませんが、少なくとも応答はそのままクライアントに送信されます。:-)

于 2011-01-23T16:55:05.537 に答える
0

Nginx は、fastcgi または reverse_proxy スキームで使用する場合、PHP の flush() メソッドをサポートしません。

多くの proxy_buffering_*、buffer_size_* 構成をすべてテストしましたが、nginx/0.8.49 では成功しませんでした。PHP プロセスが終了するまで常に待機します。

于 2011-01-23T16:59:52.393 に答える
0

コンテンツが大きい場合は、プロキシ バッファを調整する必要があります

nginxで、クライアントへの送信中にクライアントが途中で接続を閉じました

于 2011-02-17T12:47:48.420 に答える