我正在使用以下内容,试图使用Nginx和Varnish作为缓存来服务Magento的webp映像。
添加到/etc/nginx/mime.type
image/webp webp;
添加到主nginx.conf中
http {
map $http_accept $webp_suffix {
default "";
"~*webp" ".webp";
}
}
添加到my-site.conf中,用于Magento 2服务器块
location /media/ {
try_files $uri $uri/ /get.php?$args;
location ~ ^/media/theme_customization/.*\.xml {
deny all;
}
location ~* \.(ico|jpg|jpeg|png|gif|svg|js|css|swf|eot|ttf|otf|woff|woff2|webp)$ {
add_header Cache-Control "public";
add_header X-Frame-Options "SAMEORIGIN";
expires +1y;
try_files $uri$webp_suffix $uri$webp_suffix/ /get.php?$args;
}
但我仍然得到jpg图像而不是webp。我做错了什么?
发布于 2021-04-03 14:12:55
当map
被定义为:
map $http_accept $webp_suffix {
default "";
"~image/webp" ".webp";
}
当try_files
是:
try_files $uri$webp_suffix $uri$webp_suffix/ /get.php$args;
这意味着当请求URI为/media/image.jpg
时,如果用户的HTTP Accept
头包含image/webp
,nginx将查找D7
。
因此,您需要将.webp
扩展名附加到所有图像文件名,而不是替换扩展名。
编辑:
为了在原始服务器之外的任何缓存服务器上工作,缓存需要缓存不同版本的URL。
要做到这一点,我们需要添加
add_header Vary Accept;
到nginx配置。这告诉上游缓存应该根据用户的Accept
头存储不同的URL。
因此,在您的情况下,Varnish应该配置为服从Accept
头。
Cloudflare是另一个问题。它根本不支持Vary: Accept
头,因此这种为WebP图像提供服务的方法不适用于开箱即用的Cloudflare。
它可以通过添加一个Cloudflare工作人员来完成,它从请求中提取Accept
头,并基于它定义缓存键。
https://serverfault.com/questions/1059245
复制相似问题