在Amazon Elastic Beanstalk Windows环境中启用gzip

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

我在这里描述的webconfiguration启用。 这只适用于静态文件,dynamic文件按原样提供。

有人有这个解决scheme?

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

终于挣扎了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。

  1. 如果您没有压缩角色设置,请参阅下面的“00”
  2. 如果您的applicationHost.config禁用了web.config中的更改:

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

    我发现使用下面的'05'补充现有的applicationHost.config dynamicTypes是最简单的。


 commands: 00-install-comp: command: powershell.exe -nologo -noprofile -command "& { Import-modulee 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