之前用 docker-machine 在mac上配置docker环境时遇到了一个坑,简单的拉了个nginx镜像,跑起来以后,无论怎么修改 docroot 下的文件如 index.html,前端总是不更新,要么是304,要么是200,但显示的并不是我更改之后的,就跟php 打开了opcache一样,文件修改了但在前端并没有体现。
解决方法
关闭 nginx 的send_file
即可
# 关闭sendfile(在http层或者在server层)
sendfile off;
一个关于sendfile的说法是:
sendfile可以让sendfile()发挥作用。sendfile()可以在磁盘和TCP socket之间互相拷贝数据(或任意两个文件描述符)。Pre-sendfile是传送数据之前在用户空间申请数据缓冲区。之后用read()将数据从文件拷贝到这个缓冲区,write()将缓冲区数据写入网络。sendfile()是立即将数据从磁盘读到OS缓存。因为这种拷贝是在内核完成的,sendfile()要比组合read()和write()以及打开关闭丢弃缓冲更加有效。
所以应该是跟缓存什么的相关吧,呵呵。
转载请注明出处:qii404.me 关于nginx缓存不更新的问题