为什么nginx不转发Apache以代理方式发送的Vary header?
Why nginx does not forward Vary header sent by Apache in proxy mode?
我正在使用 Plesk(好像是 OVH 提供的 17.8.11)并且 nginx 配置为代理。当浏览器接受时,我的 PHP 将 returns 图像脚本转换为 WEBP 格式,否则它 returns 原始格式(JPG 或 PNG)。
In .htaccess I return header Vary: Accept
所以代理知道内容取决于 Accept
header.
在 Plesk 的 nginx 设置中,我只勾选了 'Proxy mode' 选项,其他复选框都被清除了。
当我获取图像时 Vary: Accept
不存在,我无法想象 nginx 无法处理这个 header,请帮我解决这个问题。
要使 Vary:
header 被 nginx 允许和理解,您需要在 /etc/nginx/nginx.conf
中设置 gzip on
和 gzip_vary on
。
Plesk 实际上有关于它的文档,您查看 Plesk 支持网站了吗?
https://support.plesk.com/hc/en-us/articles/213380049-How-to-enable-disable-gzip-compression-in-nginx-on-a-Plesk-server
对了,你的Plesk版本太旧了,建议你更新一下。
我终于找到了原因:我没有为“.webp”扩展名发送"Vary: Accept" header,只为“.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>
为了修复它,我在 URL 过滤器中添加了 .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>
现在一切都好了。
我正在使用 Plesk(好像是 OVH 提供的 17.8.11)并且 nginx 配置为代理。当浏览器接受时,我的 PHP 将 returns 图像脚本转换为 WEBP 格式,否则它 returns 原始格式(JPG 或 PNG)。
In .htaccess I return header Vary: Accept
所以代理知道内容取决于 Accept
header.
在 Plesk 的 nginx 设置中,我只勾选了 'Proxy mode' 选项,其他复选框都被清除了。
当我获取图像时 Vary: Accept
不存在,我无法想象 nginx 无法处理这个 header,请帮我解决这个问题。
要使 Vary:
header 被 nginx 允许和理解,您需要在 /etc/nginx/nginx.conf
中设置 gzip on
和 gzip_vary on
。
Plesk 实际上有关于它的文档,您查看 Plesk 支持网站了吗? https://support.plesk.com/hc/en-us/articles/213380049-How-to-enable-disable-gzip-compression-in-nginx-on-a-Plesk-server
对了,你的Plesk版本太旧了,建议你更新一下。
我终于找到了原因:我没有为“.webp”扩展名发送"Vary: Accept" header,只为“.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>
为了修复它,我在 URL 过滤器中添加了 .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>
现在一切都好了。