我使用的是Plesk(好像是OVH提供的17.8.11),nginx配置为代理。我的PHP脚本在浏览器接受的情况下会将图片返回为WEBP格式,否则会返回原始格式(JPG或PNG)。
在.htaccess中,我返回了头信息 Vary: Accept
所以代理知道,内容取决于的 Accept
头部。
在Plesk的nginx设置中,我只选中了 "代理模式 "选项,其他的复选框都被清除了。Vary: Accept
是不存在的,我无法想象nginx不处理这个头,请帮我解决这个问题。
对于 Vary:
头被nginx允许和理解,你需要使用 gzip on
和 gzip_vary on
在您的 /etc/nginx/nginx.conf
.
Plesk其实也有相关的文档,你查过Plesk支持网站吗?https:/support.plesk.comhcen-usarticles213380049-How-to-enable-disable-gzip-compression-in-nginx-on-a-Plesk-server。
对了,你的Plesk版本比较老,建议你更新一下。
我终于找到了原因:我没有为".webp "扩展名发送 "Vary: 接受 "的头,只有".jpg "和".png"。我的URL以.jpg或.png结尾,从来没有以.webp结尾,而这在Apache下运行良好。这是我的htaccess指令。
<IfModule mod_setenvif.c>
SetEnvIf Request_URI "\.(jpe?g|png)$" REQUEST_image
</IfModule>
<IfModule mod_headers.c>
Header append Vary Accept env=REQUEST_image
</IfModule>
为了解决这个问题,我在URLs过滤器中添加了.webp:
<IfModule mod_setenvif.c>
SetEnvIf Request_URI "\.(jpe?g|png|webp)$" REQUEST_image
</IfModule>
<IfModule mod_headers.c>
Header append Vary Accept env=REQUEST_image
</IfModule>
现在一切都好了