2015-05-04 59 views
1

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

我在网页配置中启用了here。这仅适用于静态文件,动态文件按原样提供。

有人有这个解决方案吗?

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

回答

6

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

有了这个两个变化弹性魔豆实例准备提供压缩静态和动态文件。也适用于CDN。

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 
相关问题