我正在使用 nginx 来为我的静态内容提供服务,有没有办法为每个满足特定规则的文件设置过期标头?例如,我可以为所有扩展名为“.css”的文件设置 expires 标头吗?
J. *_*ker 141
除了一些更多的文件扩展名之外,我更喜欢做一个更完整的缓存头。这 '?' 前缀是“非捕获”标记,nginx 不会创建 $1。它有助于减少不必要的负载。
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
Run Code Online (Sandbox Code Playgroud)
Dav*_*ney 23
server {
...
location ~* \.css$ {
expires 30d;
}
...
}
Run Code Online (Sandbox Code Playgroud)
该location指令
该expires指令
amu*_*ell 21
我没有足够的声誉来评论为什么接受的答案会导致文件不再显示,但我想通了,并愿意提供帮助!
精简版:
如果您没有全局设置,请确保为图像上的位置块指定了一个根目录!
长版如下:
首先,我实现此解决方案的方法与此答案非常相似,您在其中编写规则(如已接受的答案中所示):
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
Run Code Online (Sandbox Code Playgroud)
进入文件img-cache.conf
然后将该文件包含到您的server {...}指令中。
我的网站可用文件夹中的 somesite.com 示例:
#Image Caching
include /etc/nginx/conf/img-cache.conf;
Run Code Online (Sandbox Code Playgroud)
这样您就可以将图像缓存位置块添加到您可能正在运行的多个站点。
其次,我有一种情况,我的 /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;
}
Run Code Online (Sandbox Code Playgroud)
您还可以将到期时间设置为最大值。这是我用于 css 和 js 的指令。
# Set css and js to expire in a very long time
location ~* ^.+\.(css|js)$ {
access_log off;
expires max;
}
Run Code Online (Sandbox Code Playgroud)
小智 8
所有上述解决方案都将否认不同路径具有不同别名的可能性。此外,为了将所有不同的缓存过期时间集中在一个地方,您应该按以下方式使用 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;
}
...
}
Run Code Online (Sandbox Code Playgroud)
Off禁用缓存,epoch(对于 unix epoch)导致资源总是被重新获取,max将日期设置为浏览器最大值。
~image/ 匹配任何图像类型。
有关 nginx 地图的更多信息,请访问http://nginx.org/en/docs/http/ngx_http_map_module.html。
| 归档时间: |
|
| 查看次数: |
167544 次 |
| 最近记录: |