我试图添加“expires”标题到我的nginx上的文件,但允许我们通过添加一个查询string到最后来覆盖它们。 这是我有的configuration:
location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { add_header Vary Accept-Encoding; expires max; }
我有一个脚本,允许人们旋转和图像,然后重新加载图像显示新旋转的图像。 我遇到的问题是,它并不总是工作!
我们将"?dummy="+$.now()到图像名称的末尾,这样通常会强制浏览器再次下载图像。
这个逻辑在我们的Apache服务器上工作正常,但我不能完全正确地在nginx上工作(它似乎只工作一半的时间)
我错过了什么吗?
FWIW:我真的不想重命名图片,因为这意味着我们也必须重命名所有的缩略图版本 – 对此,还有不less。
以下是图片中的信息:
而且,当你旋转图像时,这个保持不变(即使我可以看到一个新的networking请求,并用一个新的dummy = xxx param来请求它)
如果我强制重新加载页面,这是我所看到的:
所以“最后修改”,“电子标签”等东西正在更新,但由于某种原因,浏览器不认识到:/
我的一个Nginxconfiguration有这个,这可能会指出你在正确的方向。 使用“如果” 并不总是理想的 ,但它似乎为我工作得很好。
set $skip_cache 0; if ($request_method = POST) { set $skip_cache 1; } if ($query_string != "") { set $skip_cache 1; } if ($skip_cache = 1) { set $cacheControl "private, max-age=0, s-maxage=0, no-cache, no-store"; } if ($skip_cache = 0) { set $cacheControl "public, max-age=86400, s-maxage=86400"; } location /whatever/ { add_header Cache-Control $cacheControl; }
好吧,这不是我的问题的答案 – 但它已经解决了我的问题。 基本上,我现在只是重新命名图像,然后重新resize。 这远非理想(因为我可能宁愿保留原来的名字),但已经浪费了太多的时间。 我不明白为什么nginx和Apache会以不同的方式对待它,但看起来它们确实如此。