我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

php本身有两层缓存:php.ini中的output_buffering,以及ob_start()。与此同时,nginx默认也是有一层缓存的。那么,问题就来了。好不容易通过了php的缓存考验,nginx也是默认开启缓存的,分段输出的效果又丢失了... 这就是本文的主要需求点的处理方案。

苏南大叔:nginx缓存,如何禁用nginx缓存输出?php的分段输出需求 - nginx禁用缓存输出
nginx缓存,如何禁用nginx缓存输出?php的分段输出需求(图2-1)

苏南大叔的“平行空间笔记本”博客,记录苏南大叔的编程故事。本文测试环境:win10nginx@1.15.11php-cgi@8.2.11nts

前文回顾

实现内容输出的分段输出显示,有很多的拦路虎。为了更清楚明白的说明问题,上面的文章里面,使用了单独的php来启动服务端。

php -S localhost:8000 -c php.ini

php不叠加nginx的情况下,有几种方案,来解决这个问题。参考文章:

本文在上述几篇文章的基础上进行扩展,叠加了nginx的设置。看看,nginx设置对网页输出缓存的影响。

nginx默认开启buffer

nginx默认开启缓存,因此它也会默认破坏php的分段输出效果。因此,需要主动关闭nginx的效果。配置类似如下:

location ~ \.php(.*)$ {
    fastcgi_pass   127.0.0.1:9001;
    fastcgi_index  index.php;
    fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_param  PATH_INFO  $fastcgi_path_info;
    fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
    include        fastcgi_params;
    proxy_buffering off;
    fastcgi_keep_conn on;
}

关键点就是:

proxy_buffering off;
fastcgi_keep_conn on;

苏南大叔:nginx缓存,如何禁用nginx缓存输出?php的分段输出需求 - 输出效果
nginx缓存,如何禁用nginx缓存输出?php的分段输出需求(图2-2)

nginx默认关闭gzip

nginx默认情况下,是关闭gzip的。但是,如果开启gzip的话,依然会开启类似的缓存效果,导致目标需求无法实现。配置类似如下:

location ~ \.php(.*)$ {
    fastcgi_pass   127.0.0.1:9001;
    fastcgi_index  index.php;
    fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_param  PATH_INFO  $fastcgi_path_info;
    fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
    include        fastcgi_params;
    proxy_buffering off;
    fastcgi_keep_conn on;
    gzip on;
}

所以,对于本文的需求来说,是万万不能有这种(打开)gzip设置的。关键点是:

gzip on;

应该删除,或者改成:

gzip off;

相关文章

结语

更多nginx配置经验文字,可以参考苏南大叔的博客链接:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   nginx