Nginx使用時にPHPからflush()してもすぐにecho出力が表示されない場合の対策

Nginx+PHP-FPMの環境において、PHPコードからflush()を実行してもecho出力がすぐに表示されなかったので、対策を調べました。

結論

Nginx の設定ファイルにて fastcgi_bufferingoff にします。

/etc/nginx/conf.d/default.conf 等を開き、次のような感じで設定します。

server {
  ...
  location ~ \.php$ {
    fastcgi_buffering off;
    ...
  }
}

上記によって、Nginxがデータをバッファリングするのを防止することができます。

備考

WordPress環境で動作を確認しました。

参考サイト

http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_buffering

https://serverfault.com/questions/488767/how-do-i-enable-php-s-flush-with-nginxphp-fpm