为什么nginx在代理模式下不能转发Apache发送的Vary头?

问题描述 投票:0回答:1

我使用的是Plesk(好像是OVH提供的17.8.11),nginx配置为代理。我的PHP脚本在浏览器接受的情况下会将图片返回为WEBP格式,否则会返回原始格式(JPG或PNG)。

在.htaccess中,我返回了头信息 Vary: Accept 所以代理知道,内容取决于的 Accept 头部。

在Plesk的nginx设置中,我只选中了 "代理模式 "选项,其他的复选框都被清除了。Vary: Accept 是不存在的,我无法想象nginx不处理这个头,请帮我解决这个问题。

apache nginx plesk ovh
1个回答
0
投票

对于 Vary: 头被nginx允许和理解,你需要使用 gzip ongzip_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版本比较老,建议你更新一下。


0
投票

我终于找到了原因:我没有为".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>

现在一切都好了

© www.soinside.com 2019 - 2024. All rights reserved.