【问题标题】:Why nginx does not forward Vary header sent by Apache in proxy mode?为什么nginx不转发Apache在代理模式下发送的Vary header?
【发布时间】:2020-04-29 15:22:35
【问题描述】:

我正在使用 Plesk(似乎是 OVH 提供的 17.8.11)并且 nginx 被配置为代理。我的 PHP 脚本在浏览器接受时将图像返回为 WEBP 格式,否则返回原始格式(JPG 或 PNG)。

在 .htaccess 中,我返回标头 Vary: Accept,因此代理知道内容取决于 Accept 标头。

在 Plesk 的 nginx 设置中,我只选中了“代理模式”选项,其他复选框被清除。 当我获取图像时,Vary: Accept 不存在,我无法想象 nginx 不处理此标头,请帮我解决这个问题。

【问题讨论】:

    标签: apache nginx plesk ovh


    【解决方案1】:

    要让 nginx 允许和理解 Vary: 标头,您需要在 /etc/nginx/nginx.conf 中设置 gzip ongzip_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 版本已经很旧了,我建议您更新它。

    【讨论】:

      【解决方案2】:

      我终于找到了原因:我没有为“.webp”扩展名发送“Vary:Accept”标头,只为“.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>
      

      现在一切都好。

      【讨论】:

        猜你喜欢
        • 2017-07-26
        • 1970-01-01
        • 2016-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多