# Expires mappings
map $sent_http_content_type $expires {
default off;
text/html epoch;
text/css max;
application/javascript 7d;
~image/ max;
}
...
server {
listen ...;
expires $expires;
location /assets/ {
# It is now possible to serve some resources from different path
alias /var/www/my_other_path/
}
# and have them all have same expirations
location / {
try_files $uri $uri/ /index.html;
}
...
}
除了一些更多的文件扩展名之外,我更喜欢做一个更完整的缓存头。这 '?' 前缀是“非捕获”标记,nginx 不会创建 $1。它有助于减少不必要的负载。
该
location
指令该
expires
指令我没有足够的声誉来评论为什么接受的答案会导致文件不再显示,但我想通了并且想帮忙!
精简版:
如果您没有全局设置,请确保为图像上的位置块指定了根目录!
长版如下:
首先,我实现此解决方案的方法与此答案非常相似,您可以在其中编写规则(如在接受的答案中):
进入文件img-cache.conf
然后将该文件包含到您的
server {...}
指令中。我的站点可用文件夹中的 somesite.com 示例:
这样,您可以将图像缓存位置块添加到您可能正在运行的多个站点。
其次,我的 /var/www/ 包含两个我允许作为 public_html 的文件夹 - 安全和培训,所以我必须在我的站点的服务器指令中创建特定的位置块,以挑选出这些文件夹。
因此,我没有设置全局根目录。
因此,当您制作图像位置块时,您可能没有为它们提供用于查找图像的根目录!
我的解决方案是:
您还可以将过期时间设置为最大值。这是我用于 css 和 js 的指令。
所有上述解决方案都将否认不同路径具有不同别名的可能性。此外,为了将所有不同的缓存过期时间集中在一个地方,您应该按以下方式使用 nginx 映射。
...
Off
禁用缓存,epoch
(对于 unix epoch)导致资源总是被重新获取,max
将日期设置为浏览器最大值。~image/ 匹配任何图像类型。
有关 nginx 地图的更多信息,请访问http://nginx.org/en/docs/http/ngx_http_map_module.html。
如果您有一个存放所有静态文件的地方,那么这样的事情就可以了...
接受的答案导致 nginx 找不到我的任何静态文件。不太清楚为什么,但这是一个简单的选择。
此页面上的大多数答案都非常过时和/或令人费解......
对于初学者来说,现在
Expires
标头不是一个好的选择,Pragma
标头也不是……理想情况下,您应该在Nginx 配置中禁用这两个标头。Cache-Control
在静态资产位置块上设置单个标题要干净得多:请记住,对于 Nginx,如果您使用
expires
诸如此类的指令,它expires max
不仅会设置 HTTPExpires
标头,还会设置Cache-Control
标头,因此它会很快变得非常混乱。TLDR 仅用于
Cache-Control
您的静态文件,以便像 Cloudflare 这样的 CDN 可以在边缘缓存它们和/或浏览器可以缓存它们一段时间。我建议不要在 WordPress 等动态网站上为您的页面/HTML 内容使用任何缓存标头,因为它只会导致冲突和混乱……如果您真的想要,您可以只
etag
为您的页面使用 an,但我个人不这样做't 并且认为在使用像 Varnish 或 Litespeed 的 LS Cache 之类的激进输出缓存时,这些更有意义。上述方法是我们在SlickStack中使用的方法,它在性能和稳定性方面非常出色,同时可以防止例如 WordPress 插件(或人)弄乱您的设置。
Step1:配置 Cache-Control 和 Expires 标头:
在块上方添加以下内容
server
:而这条线在
server
块内。expires $expires;
资料来源:数字海洋