我正在使用带有 PHP-FPM 的 nginx(已安装 APC)。
我需要 PHPflush()
才能工作。这可能吗?
到目前为止我尝试过的事情:
- 禁用所有输出缓冲
php.ini
以及输出压缩。 gzip
在 nginx 的配置中禁用。- 将 nginx 的
fastcgi_*
缓冲设置设置fastcgi_max_temp_file_size
为零。
我确信我一定是忽略了什么东西,因为我在这里和其他地方看到过很多帖子,人们声称他们已经让它工作了,但似乎我没有运气。
答案1
遗憾的是,nginx 无法做到这一点。nginx 的 fastcgi 实现需要缓冲区,即使你将缓冲指令设置为 0,也只会导致缓冲到磁盘而不是内存。
您必须找出一些替代系统,例如可以轮询状态的队列。(例如,想想 ala gearman)
编辑:这是可能的:http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_buffering
答案2
这是可能的。将其放入您网站配置文件的服务器部分:
gzip off;
proxy_buffering off;
fastcgi_keep_conn on;
fastcgi_max_temp_file_size 0;
fastcgi_buffering off;
将其放入 php.ini 中
output_buffering = Off
implicit_flush = On
请小心。禁用这些缓冲区可能会对性能造成严重影响。
答案3
我想要同样的东西,事实证明这是可能的。在回显任何内容之前,您只需要这样做:
header('Content-Encoding: none;');
然后按照正常方式进行冲洗:
ob_end_flush();
flush();
Nginx 似乎发现编码已被关闭,因此不会进行 gzip 压缩。
答案4
这是有可能的,看看这个回答。
我自己尝试过并且它有效。
升级你的 nginx 服务器 {} 配置:
fastcgi_keep_conn on; # < solution
proxy_buffering off;
gzip off;