如何使用 nginx+PHP-FPM 启用 PHP 的 flush()?

如何使用 nginx+PHP-FPM 启用 PHP 的 flush()?

我正在使用带有 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;

相关内容