【发布时间】:2011-06-13 13:28:47
【问题描述】:
我有 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 给出响应?
希望问题很清楚。
谢谢。
【问题讨论】:
-
你试过在 nginx 中关闭 proxy_buffering 吗?不确定它会关闭连接,但至少响应会按原样传输给客户端。
-
@regilero 这行得通!我想结合一些
location指令,我将获得用于休息内容的代理缓冲和为我的脚本工作的解决方案。您应该将此作为答案发布。
标签: php apache nginx long-polling