我有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
(我用另一个ajax脚本检查进程的状态)
仅在apache下就能正常工作。但是当apache落后于nginx时我遇到了问题。在这种情况下,只有在完成过程完成后才会得到响应。
nginx设置:
server {
#...
proxy_set_header Connection close;
proxy_pass_header Content-Length;
#...
}
但我仍然在FireBug中保持Connection keep-alive。
如何让nginx立即给出apache的响应?
希望问题很明确。
感谢。
答案 0 :(得分:6)
您是否在nginx中尝试过proxy_buffering?不确定它是否会关闭连接,但至少响应将被传输到客户端。 : - )
答案 1 :(得分:0)
在fastcgi或reverse_proxy方案中使用时,Nginx不支持PHP中的任何flush()方法。
我在nginx / 0.8.49下测试了所有许多proxy_buffering_ *,buffer_size_ *配置但没有成功。它将一直等到PHP进程退出。
答案 2 :(得分:0)
如果您的内容很大,则必须调整代理缓冲区
client closed prematurely connection while sending to client, in nginx