Nginx作为反向代理,而长轮询
问题描述:
我有一个Apache作为后端服务器,它运行PHP脚本和Nginx作为反向代理服务器,处理静态内容。 一个php脚本,它给了我一些进程的ID,然后执行这个过程(相当长)。我需要传递给浏览器只有该进程的ID。Nginx作为反向代理,而长轮询
// ...
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。
我该如何让nginx立即给出apache的响应?
希望问题清楚。
谢谢。
答
您是否尝试过在nginx中关闭proxy_buffering?不确定它会关闭连接,但至少该响应将被传输到客户端。 :-)
答
当在fastcgi或reverse_proxy方案中使用时,Nginx不支持PHP中的任何flush()方法。
我在nginx/0.8.49下测试了所有的proxy_buffering_ *,buffer_size_ *配置没有成功。它会一直等到PHP进程退出。
您是否尝试过在nginx的proxy_buffering了吗?不确定它会关闭连接,但至少该响应将被传输到客户端。 – regilero 2011-01-23 13:43:12
@regilero这个工程!我想结合一些`location`指令,我将为我的脚本获得休息内容和工作解决方案的proxy_buffering。你应该发布这个答案。 – SaltLake 2011-01-23 14:24:18