【问题标题】:Enabling gzip on Amazon Elastic Beanstalk Windows environment在 Amazon Elastic Beanstalk Windows 环境中启用 gzip
【发布时间】:2015-07-13 07:25:14
【问题描述】:

我无法为 AWS Elastic Beanstalk 创建适当的部署包以在 Windows IIS 环境中启用 gzip 压缩。

我按照here 的描述在网络配置中启用。这仅适用于静态文件,动态文件按原样提供。

有人有解决办法吗?

编辑: IIS 还有另一个问题。它不会压缩从代理请求的文件,并且还会在第一次请求时提供原始文件。这会导致 CDN 提供未压缩文件,因为它们的端点缓存了原始文件。

【问题讨论】:

    标签: windows amazon-web-services iis gzip amazon-elastic-beanstalk


    【解决方案1】:

    经过 10 个小时的努力,我终于想出了一个可靠的解决方案。

    AWS 支持配置文件来修改环境。它们在部署应用程序之前运行。 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers.html

    所以我创建了一个配置文件以在 IIS 上启用 gzip,将其放在我的项目文件夹中的“.ebextensions/gzip.config”中。

    YAML 格式的配置:

    container_commands: 
         00-server-config:
           command: c:\windows\system32\inetsrv\appcmd set config /section:system.webServer/serverRuntime /frequentHitThreshold:1 /frequentHitTimePeriod:00:00:05
           waitAfterCompletion: 0
         01-server-config:
           command: c:\windows\system32\inetsrv\appcmd set config /section:system.webServer/httpCompression /noCompressionForHttp10:False /noCompressionForProxies:False
           waitAfterCompletion: 0
         02-gzip-dynamic: 
           command: c:\windows\system32\inetsrv\appcmd set config /section:urlCompression /doDynamicCompression:True
           waitAfterCompletion: 0
         03_gzip_static: 
           command: c:\windows\system32\inetsrv\appcmd set config /section:urlCompression /doStaticCompression:True
           waitAfterCompletion: 0
         04_restart_iis: 
           command: iisreset
           waitAfterCompletion: 0
    

    web.config 需要对 system.webServer 部分进行一些更改:

    <httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files" noCompressionForHttp10="false" noCompressionForProxies="false">
        <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll"/>
        <dynamicTypes>
            <add mimeType="text/*" enabled="true"/>
            <add mimeType="message/*" enabled="true"/>
            <add mimeType="application/javascript" enabled="true"/>
            <add mimeType="application/x-javascript" enabled="true"/>
            <add mimeType="application/json; charset=utf-8" enabled="true"/>
            <add mimeType="*/*" enabled="false"/>
        </dynamicTypes>
        <staticTypes>
            <add mimeType="text/*" enabled="true"/>
            <add mimeType="message/*" enabled="true"/>
            <add mimeType="application/javascript" enabled="true"/>
            <add mimeType="application/x-javascript" enabled="true"/>
            <add mimeType="application/atom+xml" enabled="true"/>
            <add mimeType="application/xaml+xml" enabled="true"/>
            <add mimeType="*/*" enabled="false"/>
        </staticTypes>
    </httpCompression>
    <httpProtocol>
        <customHeaders>
            <remove name="Vary" />
            <add name="Vary" value="Accept-Encoding" />
        </customHeaders>
    </httpProtocol>
    

    通过这两项更改,Elastic Beanstalk 实例准备好为压缩的静态和动态文件提供服务。也适用于 CDN。

    【讨论】:

    • 另外,如果使用 Visual Studio,请确保更改 gzip.config 的文件属性,使其“复制到输出目录”。
    • 我想指出,对于 dotnet core,您仍然可以将 web.config 文件添加到您的项目中。它与 MS 移至 csproj 的设置结合使用
    • 我认为您需要在 Startup.cs 中添加压缩。这可能会有所帮助talkingdotnet.com/…
    【解决方案2】:
    1. 如果您没有设置压缩角色,请参阅下面的“00”
    2. 如果您的 applicationHost.config 禁用 web.config 中的更改:

        <section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
      

      我发现最容易补充现有的 applicationHost.config dynamicTypes 使用下面的 '05'。


    commands: 
      00-install-comp:
        command: powershell.exe -nologo -noprofile -command "& { Import-Module ServerManager; Add-WindowsFeature Web-Stat-Compression,Web-Dyn-Compression; }"
        waitAfterCompletion: 0
      01-server-config:
        command: c:\windows\system32\inetsrv\appcmd set config /section:system.webServer/serverRuntime /frequentHitThreshold:1 /frequentHitTimePeriod:00:00:05
        waitAfterCompletion: 0
      02-server-config:
        command: c:\windows\system32\inetsrv\appcmd set config /section:system.webServer/httpCompression /noCompressionForHttp10:False /noCompressionForProxies:False
        waitAfterCompletion: 0
      03-gzip-dynamic: 
        command: c:\windows\system32\inetsrv\appcmd set config /section:urlCompression /doDynamicCompression:True
        waitAfterCompletion: 0
      04_gzip_static: 
        command: c:\windows\system32\inetsrv\appcmd set config /section:urlCompression /doStaticCompression:True
        waitAfterCompletion: 0
      05_gzip_dyn_type_1:
        command: c:\windows\system32\inetsrv\appcmd set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/json',enabled='True']" /commit:apphost
        waitAfterCompletion: 0
        ignoreErrors: true
      05_gzip_dyn_type_2:
        command: c:\windows\system32\inetsrv\appcmd set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/json; charset=utf-8',enabled='True']" /commit:apphost
        waitAfterCompletion: 0
        ignoreErrors: true
      06_restart_iis: 
        command: iisreset
        waitAfterCompletion: 0
    

    【讨论】:

      猜你喜欢
      • 2016-07-30
      • 2017-02-11
      • 2014-08-20
      • 2014-08-07
      • 2016-04-20
      • 2012-12-21
      • 2013-08-16
      • 2015-09-18
      • 2020-12-05
      相关资源
      最近更新 更多