nginx缓存,如何禁用nginx缓存输出?php的分段输出需求
发布于 作者:苏南大叔 来源:程序如此灵动~
php本身有两层缓存:php.ini中的output_buffering,以及ob_start()。与此同时,nginx默认也是有一层缓存的。那么,问题就来了。好不容易通过了php的缓存考验,nginx也是默认开启缓存的,分段输出的效果又丢失了... 这就是本文的主要需求点的处理方案。

苏南大叔的“程序如此灵动”博客,记录苏南大叔的编程故事。本文测试环境:win10,nginx@1.15.11和php-cgi@8.2.11nts。
前文回顾
实现内容输出的分段输出显示,有很多的拦路虎。为了更清楚明白的说明问题,上面的文章里面,使用了单独的php来启动服务端。
php -S localhost:8000 -c php.ini单php不叠加nginx的情况下,有几种方案,来解决这个问题。参考文章:
- https://newsn.net/say/php-buffer.html
- https://newsn.net/say/php-flush.html
- https://newsn.net/say/php-flush-2.html
本文在上述几篇文章的基础上进行扩展,叠加了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默认关闭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;相关文章
- https://newsn.net/say/nginx-apache-font.html
- https://newsn.net/say/nginx-401.html
- https://newsn.net/say/nginx-ssl-conf.html
结语
更多nginx配置经验文字,可以参考苏南大叔的博客链接: