Nginx作为长轮询时的反向代理

Sal*_*ake 6 php apache nginx long-polling

我有apache作为后端服务器,运行php脚本和nginx作为反向代理服务器,处理静态内容.一个php脚本,它给我一些进程的ID,然后执行这个过程(很长).我只需要向浏览器传递该进程的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
Run Code Online (Sandbox Code Playgroud)

(我用另一个ajax脚本检查进程的状态)

这在单独的apache下工作正常.但是当apache落后于nginx时我遇到了问题.在这种情况下,我只有在完成过程完成时才得到响应.

nginx设置:

server {
  #...
  proxy_set_header Connection close;

  proxy_pass_header Content-Length;
  #...
}
Run Code Online (Sandbox Code Playgroud)

但我仍然在FireBug中获得了Connection keep-alive.

如何让nginx立即给出apache的响应?

希望问题很清楚.

谢谢.

reg*_*ero 6

你在nginx中尝试过proxy_buffering吗?不确定它是否会关闭连接,但至少响应将被传输到客户端.:-)