【问题标题】:How to disable output buffering in nginx for PHP application如何在 nginx 中为 PHP 应用程序禁用输出缓冲
【发布时间】:2012-08-23 08:20:39
【问题描述】:

我们有类似这样的代码:

<?php
    ob_implicit_flush(true);
    ob_end_flush();

    foreach ($arrayOfStrings as $string) {
        echo time_expensive_function($string);
    }
?>

在 Apache 中,这会在输出时将每个回显发送到浏览器。然而,在 nginx/FastCGI 中,由于 nginx 的工作方式(默认情况下),这不起作用。

是否可以在 nginx/FastCGI 上实现这一点,如果可以,如何实现?

【问题讨论】:

    标签: php nginx fastcgi


    【解决方案1】:

    首先 php 必须正确刷新所有内容:

    @ob_end_flush();
    @flush();
    

    然后,我找到了两个可行的解决方案:

    1) 通过 Nginx 配置:

    fastcgi_buffering off;
    

    2) 通过 php 代码中的 HTTP 标头

    header('X-Accel-Buffering: no');
    

    【讨论】:

    • 只是添加 header('X-Accel-Buffering: no'); 为我工作:)
    • header('X-Accel-Buffering: no');为我工作,谢谢你,先生,花了 2 小时谷歌搜索,没有任何工作只有这个
    • fastcgi_buffering 关闭;在 nginx.conf 中为我工作,谢谢!
    • 谢谢! header('X-Accel-Buffering: no'); 也为我工作!
    • header('X-Accel-Buffering: no'); 为我工作。谢谢!
    【解决方案2】:

    简单的解决方案:

    fastcgi_keep_conn on; # < solution
    
    proxy_buffering off;
    gzip off;
    

    【讨论】:

    • 其实就像你说的,fastcgi_keep_conn on; 是秘密词。
    • 为什么没有记录 fastcgi_keep_conn 指令?
    • 非常感谢!你拯救了我的一天。
    • 这些都去哪儿了?
    • 可以在 nginx http、server 或 location 中使用。 nginx.org/en/docs/http/…
    【解决方案3】:

    我不想为整个服务器或整个目录关闭 gzip,只是为了几个脚本,在一些特定情况下。

    在任何内容被回显之前,您只需要这个:

    header('Content-Encoding: none;');
    

    然后照常进行刷新:

    ob_end_flush();
    flush();
    

    Nginx 似乎发现了已关闭的编码并且不 gzip。

    【讨论】:

      【解决方案4】:

      在循环中添加 flush() 函数:

      foreach ($arrayOfStrings as $string) {
        echo time_expensive_function($string);
        flush();
      }
      

      它可能有效,但不一定在每次迭代中都有效(其中涉及一些魔法!)

      【讨论】:

        【解决方案5】:
        【解决方案6】:

        我在脚本开头需要这两行:

        header('X-Accel-Buffering: no');
        ob_implicit_flush(true);
        

        单独的每一行也可以工作,将它们结合起来可以让我的浏览器更快地从服务器获取结果。无法解释,只是经历过。

        我的配置是带有php-fpm的nginx。

        【讨论】:

          猜你喜欢
          • 2012-04-01
          • 2011-04-20
          • 2010-09-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多