Nginx 静态文件显示为未压缩,即使web服务器已配置为gzip压缩

Nginx 静态文件显示为未压缩,即使web服务器已配置为gzip压缩,nginx,gzip,amazon-elastic-beanstalk,Nginx,Gzip,Amazon Elastic Beanstalk,我已经在Amazon Elastic BeanStalk上托管了我的网站。它使用nginx作为代理服务器,并启用了gzip压缩。但是当我在网站上运行PageInsights时,它报告说我的许多静态内容文件需要Gzip。为什么PageSpeed Insights无法识别压缩?还有什么需要做的吗?我想我确实找到了答案 通过在nginx上启用gzip压缩,您只能为text/html启用它(这是nginx的默认设置) 为了对其他类型启用它,您必须显式地这样做。对于beanstalk,请在项目中创建以下文

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

我想我确实找到了答案

通过在nginx上启用gzip压缩,您只能为text/html启用它(这是nginx的默认设置)

为了对其他类型启用它,您必须显式地这样做。对于beanstalk,请在项目中创建以下文件

.ebextensions/gzip.config

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


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

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

  • 通过SSH从一个实例下载默认配置。它将位于文件夹
    /etc/nginx/conf.d
    中,名为
    00\u elastic\u beanstalk\u proxy.conf
  • 在.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"
    
  • 更改配置以获得所需的gzip_类型
  • 部署应用程序
  • 作为参考,这是我的工作
    proxy.conf
    文件的外观:

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

    中更改配置即可。techwes的解决方案非常有用,效果非常好(在我的情况下,允许我将应用程序/javascript添加到gzip_类型中),只需进行一次修改:您的.ebextensions文件夹中的文件必须使用
    .config
    扩展名命名,所以它应该是
    proxy.config
    。(我试图在techwes的帖子中添加评论,但没有足够的代表!)


    还应注意,如果您使用AWS控制台(环境>配置>软件配置)在EB环境中关闭gzip,它将从
    00\u elastic\u beanstalk\u proxy.conf
    文件中删除gzip行,因此,您可以使用
    .config
    文件来添加另一个
    .conf
    文件,而不必替换整个
    00\u elastic\u beanstalk\u proxy.conf
    文件。

    您知道这一点吗?我已经启用了它,但它没有为我压缩不,它仍然显示为未压缩。谢谢提示!不过,就我而言,肯定还有另一个问题。我有一个“内容类型:text/html”,但它仍然不是压缩。也许我不应该使用AWS控制台,而应该直接使用nginx config来启用gzip。谁知道控制台做什么。
    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"