首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Magento 2与Nginx和清漆-如何服务webp图像

Magento 2与Nginx和清漆-如何服务webp图像
EN

Server Fault用户
提问于 2021-04-03 09:56:40
回答 1查看 1K关注 0票数 1

我正在使用以下内容,试图使用Nginx和Varnish作为缓存来服务Magento的webp映像。

添加到/etc/nginx/mime.type

代码语言:javascript
代码运行次数:0
运行
复制
 image/webp webp;

添加到主nginx.conf中

代码语言:javascript
代码运行次数:0
运行
复制
http {
map $http_accept $webp_suffix {
            default   "";
            "~*webp"  ".webp";
          }
}

添加到my-site.conf中,用于Magento 2服务器块

代码语言:javascript
代码运行次数:0
运行
复制
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。我做错了什么?

EN

回答 1

Server Fault用户

发布于 2021-04-03 14:12:55

map被定义为:

代码语言:javascript
代码运行次数:0
运行
复制
map $http_accept $webp_suffix {
    default       "";
    "~image/webp" ".webp";
}

try_files是:

代码语言:javascript
代码运行次数:0
运行
复制
try_files $uri$webp_suffix $uri$webp_suffix/ /get.php$args;

这意味着当请求URI为/media/image.jpg时,如果用户的HTTP Accept头包含image/webp,nginx将查找D7

因此,您需要将.webp扩展名附加到所有图像文件名,而不是替换扩展名。

编辑:

为了在原始服务器之外的任何缓存服务器上工作,缓存需要缓存不同版本的URL。

要做到这一点,我们需要添加

代码语言:javascript
代码运行次数:0
运行
复制
add_header Vary Accept;

到nginx配置。这告诉上游缓存应该根据用户的Accept头存储不同的URL。

因此,在您的情况下,Varnish应该配置为服从Accept头。

Cloudflare是另一个问题。它根本不支持Vary: Accept头,因此这种为WebP图像提供服务的方法不适用于开箱即用的Cloudflare。

它可以通过添加一个Cloudflare工作人员来完成,它从请求中提取Accept头,并基于它定义缓存键。

票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1059245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档