关于nginx缓存不更新的问题

关于nginx缓存不更新的问题

关于用docker-machine启动nginx server,然后nginx总是缓存,不更新文件的问题

之前用 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缓存不更新的问题