【问题标题】:static files shown as uncompressed even when web server has been configured for gzip compression即使 Web 服务器已配置为 gzip 压缩,静态文件仍显示为未压缩
【发布时间】:2014-05-20 01:59:40
【问题描述】:

我在 Amazon Elastic BeanStalk 上托管了我的网站。它使用 nginx 作为代理服务器并启用了 gzip 压缩。但是当我在站点上运行 PageInsights 时,它报告说我的许多静态内容文件需要被 gzip 压缩。为什么 PageSpeed Insights 无法识别压缩?还有什么需要做的吗?

【问题讨论】:

  • 你有想过这个吗?我启用了它,它也不会为我压缩
  • 不,它仍然显示为未压缩。

标签: nginx gzip amazon-elastic-beanstalk


【解决方案1】:

我想我确实找到了答案

通过在 nginx 上启用 gzip 压缩,您只为 text/html 启用它(即 nginx 默认http://nginx.org/en/docs/http/ngx_http_gzip_module.html#gzip_types

要为其他类型启用它,您必须明确地执行此操作。如果是 beanstalk,请在您的项目中创建以下文件

.ebextensions/gzip.config

并将代码放在那里(确保保留缩进,这很重要):

files:
  /etc/nginx/conf.d/gzip.conf:
    content: |
      gzip_types application/json;

如您所见,在我的情况下,我需要 gzip json 文件,您可能遇到了 Pagespeed 抱怨 css 和 js 文件的问题,对吧?正如上面的链接所示,您可以使用 * 通配符来压缩所有内容,但如果没有,只需在配置中列出您需要的 mime 类型,部署它,然后再次检查 PageSpeed Insights。

【讨论】:

  • 感谢您的提示!尽管就我而言,肯定还有另一个问题。我有一个“Content-Type:text/html”,但它仍然没有被压缩。也许我不应该使用 AWS 控制台,而应该直接使用 nginx 配置来启用 gzip。谁知道控制台的作用。
【解决方案2】:

Dmitry 的回答仅适用于亚马逊为您设置的默认配置中没有 gzip_types 条目的情况。现在就是这种情况,因此您需要编写一个 .ebextensions conf 文件以使用自定义配置覆盖整个配置。为此,您需要:

  1. 通过 SSH 从您的一个实例下载默认配置。它将在文件夹/etc/nginx/conf.d 中并被称为00_elastic_beanstalk_proxy.conf
  2. 在您的 .ebextensions 文件夹中创建一个名为 proxy.conf 的新文件,该文件遵循此模板:

    files:
      "/etc/nginx/conf.d/proxy.conf":
        mode: "000644"
        owner: root
        group: root
        content: |
            # Paste the contents of the config you downloaded here 
            # at this indentation level
    
    container_commands:
      00_remove:
        command: "rm -f /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf"
    
  3. 将配置更改为您想要的 gzip_types。
  4. 部署您的应用程序

作为参考,这是我的工作 proxy.conf 文件的样子:https://pastebin.com/raw/KGvdsZc4

注意事项: 我确信以这种方式覆盖整个配置是一个常见的用例,虽然它使将来更容易更改配置,但这会破坏 AWS EB Web 工具的某些功能。特别是影响 nginx 配置的任何东西(静态文件路径、gzip 压缩等)都将不起作用。为了进行更改,您只需直接在 proxy.conf 中更改配置

【讨论】:

    【解决方案3】:

    techwes 解决方案非常有用并且效果很好(在我的情况下,允许我将 application/javascript 添加到 gzip_types),但需要进行一项修改:您的 .ebextensions 文件夹中的文件必须以 .config 扩展名命名,因此它应该是proxy.config。 (我尝试在 techwes 的帖子中添加评论,但没有足够的代表!)

    还应注意,如果您使用 AWS 控制台(环境 > 配置 > 软件配置)在您的 EB 环境中关闭 gzip,它将从 00_elastic_beanstalk_proxy.conf 文件中删除 gzip 行,因此您可以使用 @ 987654324@ 文件添加另一个.conf 文件,而无需替换整个00_elastic_beanstalk_proxy.conf 文件。

    【讨论】:

      猜你喜欢
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多