Answers:
除了一些其他文件扩展名之外,我更喜欢做一个更完整的缓存头。'?' 前缀是“非捕获”标记,nginx不会创建$ 1。它有助于减少不必要的负载。
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
root
组,在这种情况下,您应该将指令添加到该块中。(我知道这是迟到的2年,但对于未来的公民来说)
我没有足够的声誉来评论为什么接受的答案将导致文件不再显示,但我想出了办法,并希望为您提供帮助!
简洁版本:
如果没有全局目录,请确保为图像上的位置块指定了根目录!
下面的长版:
首先,我实现此解决方案的方法实际上与以下答案类似,您可以在其中编写规则(如已接受的答案):
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
进入文件img-cache.conf
然后将该文件包含到您的server {...}
指令中。
我的站点-可用文件夹中的somesite.com示例:
#Image Caching
include /etc/nginx/conf/img-cache.conf;
这样,您可以将图像缓存位置块添加到您可能正在运行的多个站点。
第二,我遇到一种情况,我的/ var / www /包含两个我可以作为public_html允许的文件夹-安全和培训,因此我必须在站点的服务器指令中指定特定的位置块,以选择这些文件夹。
因此,我没有设置全局根目录。
因此,当您设置图像位置块时,可能没有为它们提供用于从中查找图像的根目录!
我的解决方案是:
location ~ ^/training.+\.(?:ico|css|js|gif|jpe?g|png)$ {
root /var/www/;
expires 7d;
add_header Pragma public;
add_header Cache-Control "public";
try_files $uri 404;
}
location ~ ^/.+\.(?:ico|css|js|gif|jpe?g|png)$ {
root /var/www/secure;
expires 7d;
add_header Pragma public;
add_header Cache-Control "public";
try_files $uri 404;
}
.conf
。适当的文件夹nginx/1.14.0 (Ubuntu)
似乎是/etc/nginx/snippets/
。
您还可以将过期设置为最大。这是我用于css和js的指令。
# Set css and js to expire in a very long time
location ~* ^.+\.(css|js)$ {
access_log off;
expires max;
}
所有上述解决方案都将否认为不同路径使用不同别名的可能性。同样,为了将所有不同的缓存过期都放在一个位置,您应该通过以下方式使用nginx映射。
...
# 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;
}
...
}
Off
禁用缓存,epoch
(对于Unix时代)导致资源总是被重新提取,max
将日期设置为浏览器最大值。
〜image /匹配任何图像类型。
有关Nginx映射的更多信息,请访问http://nginx.org/en/docs/http/ngx_http_map_module.html。
$sent_http_content_type
为,"text/css;charset=UTF-8"
则上述表达式将失败。