在 Amazon Elastic Beanstalk Windows 环境中启用 gzip
Enabling gzip on Amazon Elastic Beanstalk Windows environment
我无法为 AWS Elastic Beanstalk 创建正确的部署包以在 Windows IIS 环境中启用 gzip 压缩。
我已按照 here 所述在网络配置中启用。这仅适用于静态文件,动态文件按原样提供。
有人对此有解决方案吗?
编辑:
IIS 还有另一个问题。它不会压缩从代理请求的文件,还会在第一次请求时提供原始文件。这会导致 CDN 提供未压缩的文件,因为它们的端点缓存了原始文件。
折腾了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。
- 如果您没有设置压缩角色,请参阅下面的“00”
如果您的 applicationHost.config 禁用 web.config 中的更改:
<section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
我发现最容易补充现有的 applicationHost.config
下面使用“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
我无法为 AWS Elastic Beanstalk 创建正确的部署包以在 Windows IIS 环境中启用 gzip 压缩。
我已按照 here 所述在网络配置中启用。这仅适用于静态文件,动态文件按原样提供。
有人对此有解决方案吗?
编辑: IIS 还有另一个问题。它不会压缩从代理请求的文件,还会在第一次请求时提供原始文件。这会导致 CDN 提供未压缩的文件,因为它们的端点缓存了原始文件。
折腾了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。
- 如果您没有设置压缩角色,请参阅下面的“00”
如果您的 applicationHost.config 禁用 web.config 中的更改:
<section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
我发现最容易补充现有的 applicationHost.config 下面使用“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