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
配置经验文字,可以参考苏南大叔的博客链接:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。