跨境电商如何在香港服务器上设置和利用 Windows Server 的 IIS 压缩功能,提升图片与商品详情页加载速度?

凌晨 1:40,香港机房的运营同事发来消息:‘主页稳了,但商品详情页在美国和欧洲打开还是慢。’我盯着 NOC 屏的 RTT 曲线,心里有数——这不是带宽不够,这是传输效率的问题。两分钟后,我远程进到那台跑 IIS 的 Windows Server,上了一杯便利店咖啡,开始把‘该开的压缩’都开起来。
这一篇,我就把那晚在香港机房给跨境电商站(.com 主站)做 IIS 压缩提速的完整过程写下来:从环境与硬件,到参数选择、脚本、web.config 配置、灰度验证、压测对比,以及现场踩过的坑。尽量写得新手能上手、老手也不嫌浅。
一、现场环境与目标
1)业务与流量画像
- 站点类型:跨境电商(商品详情页 PV 占全站 62%)
- 用户地域:美国西部、东南亚、欧洲(移动端占比 78%)
- 页面特征:图片重 + JS/CSS 多 + 详情页 HTML 较长(存在大量富文本与 JSON 片段)
2)香港服务器与系统版本
| 项目 | 参数 |
|---|---|
| 机房 | 香港葵涌机房(直连多国际出口) |
| 服务器 | 1U,Dual Intel Xeon Silver 4310(2×12C/24T,睿频 3.3GHz) |
| 内存 | 128GB DDR4-3200 |
| 系统盘 | 960GB SATA SSD(OS) |
| 数据盘 | 2×1.92TB NVMe(Raid-1 via Intel VROC),静态资源与站点 |
| 网卡 | 2×10GbE(Intel X710),内网走 LACP |
| OS | Windows Server 2022 Datacenter(含 IIS 10.0) |
| Web | IIS 独立 + 应用池 4 个(.NET + Node SSR 混合) |
| 其他 | 前面挂 1 台硬件 SLB,后面有 2 台 IIS 做主备 |
备注:IIS 10 原生支持 gzip/deflate 压缩。Brotli 需额外模块或 CDN 侧压缩。本文先把 IIS 原生可控能力吃干榨尽,再讲“预压缩 + 回源”与 CDN 协同。
3)我们要解决什么
跨境链路 RTT 高(HK→US West 140~180ms 常态),必须减少传输字节。
详情页含大量 HTML/JSON/JS/CSS 文本资源,压缩收益高。
图片本身就压缩过(JPG/PNG/WebP);IIS 压缩对图片基本无益,但可通过缓存与分发策略降低加载时间。
目标:在不动业务逻辑的前提下,开启并优化 IIS 压缩,同时完善 缓存头/预压缩/HTTP/2,最终把首屏与详情模块的内容下载时间实打实降下来。
二、上手前:基线测量(你不测,你就不知道哪里慢)
测什么?
- 典型详情页的 传输体积(HTML/JS/CSS/JSON)
- 是否已压缩(Content-Encoding)
- 海外节点的 首包时间/下载时间
快速办法:(Windows 终端用 curl.exe,Linux/macOS 亦可)
# 1) 看响应头是否已有压缩
curl.exe -I --http2 -H "Accept-Encoding: gzip, deflate, br" https://www.example.com/product/12345
# 2) 看某静态资源的体积与压缩情况
curl.exe -I --http2 -H "Accept-Encoding: gzip, deflate, br" https://static.example.com/assets/app.bundle.js
我的当时基线(未开启 IIS 压缩前,取美国西部节点):
| 资源 | 原始大小 | 压缩后大小(实测) | Content-Encoding | 备注 |
|---|---|---|---|---|
| HTML(详情页) | 86 KB | 18 KB | 无(那时未开) | 大量富文本 |
| app.bundle.js | 1.21 MB | 320 KB | 无 | 构建未做 gzip / br |
| styles.css | 310 KB | 54 KB | 无 | 规则较多 |
| detail.json(接口) | 62 KB | 9 KB | 无 | 商品属性/库存 |
| 图片总和 | 3.8 MB | —— | —— | 多为 JPG/PNG |
海外测速(US-West 4G,RTT 约 160ms):
| 指标 | 未启用压缩 |
|---|---|
| 首屏可交互(TTI) | 5.7 s |
| HTML 完整下载 | 420 ms |
| JS/CSS 完整下载 | 2.3 s |
| 详情主图可见 | 2.9 s |
第一眼就知道:文本资源没压缩是大头。
三、开启并优化 IIS 压缩(系统级)
1)安装 IIS 及压缩组件
# 管理员 PowerShell
Install-WindowsFeature Web-Server -IncludeManagementTools
Install-WindowsFeature Web-Static-Content, Web-Default-Doc, Web-Http-Errors, Web-Http-Logging, Web-Filtering
Install-WindowsFeature Web-Stat-Compression, Web-Dyn-Compression
2)全局开启压缩与关键参数
# 开启静态/动态压缩
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' `
-filter 'system.webServer/urlCompression' -name 'doStaticCompression' -value 'True'
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' `
-filter 'system.webServer/urlCompression' -name 'doDynamicCompression' -value 'True'
# 压缩级别(0-10)
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' `
-filter 'system.webServer/httpCompression' -name 'staticCompressionLevel' -value 7
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' `
-filter 'system.webServer/httpCompression' -name 'dynamicCompressionLevel' -value 4
# CPU 门限(动态压缩在高负载下自动让步,防止被压垮)
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' `
-filter 'system.webServer/httpCompression' -name 'dynamicCompressionEnableCpuUsage' -value 60
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' `
-filter 'system.webServer/httpCompression' -name 'dynamicCompressionDisableCpuUsage' -value 85
# 压缩临时文件目录(放到 NVMe)
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' `
-filter 'system.webServer/httpCompression' -name 'directory' `
-value 'D:\IIS_Compress_Temp'
经验值:静态 7、动态 4 是我们在 CPU 成本与收益之间的平衡点;动态图像接口少,主要压 HTML/JSON。
3)声明压缩/不压缩的 MIME 类型(很关键)
# 允许压缩:文本类
Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' `
-filter "system.webServer/httpCompression/staticTypes" -name "." `
-value @{mimeType='text/*';enabled='True'}
Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' `
-filter "system.webServer/httpCompression/staticTypes" -name "." `
-value @{mimeType='application/javascript';enabled='True'}
Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' `
-filter "system.webServer/httpCompression/staticTypes" -name "." `
-value @{mimeType='application/json';enabled='True'}
Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' `
-filter "system.webServer/httpCompression/staticTypes" -name "." `
-value @{mimeType='image/svg+xml';enabled='True'}
# 禁止压缩:已高压缩或不可压缩
foreach($mt in @('image/*','application/zip','application/pdf','application/octet-stream','font/woff2')){
Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' `
-filter "system.webServer/httpCompression/staticTypes" -name "." `
-value @{mimeType=$mt;enabled='False'}
}
动态类型同理(HTML/JSON 等):
Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' `
-filter "system.webServer/httpCompression/dynamicTypes" -name "." `
-value @{mimeType='text/*';enabled='True'}
Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' `
-filter "system.webServer/httpCompression/dynamicTypes" -name "." `
-value @{mimeType='application/json';enabled='True'}
Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' `
-filter "system.webServer/httpCompression/dynamicTypes" -name "." `
-value @{mimeType='*/*';enabled='False'} # 兜底:默认不压
4)HTTP/2 与内核缓存
Windows Server 2022 + IIS 10,启用 TLS 后默认支持 HTTP/2(对首屏多资源并发与头部压缩 HPACK 有益)。
确认站点允许内核缓存(静态命中能绕过用户态,配合压缩缓存效率更高):
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' `
-filter "system.webServer/caching" -name "enabled" -value "True"
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' `
-filter "system.webServer/serverRuntime" -name "enabled" -value "True"
四、站点级 web.config:让压缩与缓存更“听话”
以下片段放在站点根目录的 web.config(或在 IIS 管理器里 GUI 等效配置)。
<configuration>
<system.webServer>
<!-- 1) 压缩策略(覆盖/补充全局) -->
<httpCompression
directory="D:\IIS_Compress_Temp"
staticCompressionLevel="7"
dynamicCompressionLevel="4"
dynamicCompressionEnableCpuUsage="60"
dynamicCompressionDisableCpuUsage="85">
<scheme name="gzip" dll="%windir%\system32\inetsrv\gzip.dll" />
<staticTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="application/javascript" enabled="true" />
<add mimeType="application/json" enabled="true" />
<add mimeType="image/svg+xml" enabled="true" />
<add mimeType="font/woff2" enabled="false" />
<add mimeType="image/*" enabled="false" />
<add mimeType="application/pdf" enabled="false" />
<add mimeType="*/*" enabled="false" />
</staticTypes>
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="application/json" enabled="true" />
<add mimeType="*/*" enabled="false" />
</dynamicTypes>
</httpCompression>
<urlCompression doStaticCompression="true" doDynamicCompression="true" />
<!-- 2) 静态资源长缓存(对 /assets、/static 生效) -->
<location path="assets">
<system.webServer>
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" />
</staticContent>
<httpProtocol>
<customHeaders>
<add name="Cache-Control" value="public, max-age=31536000, immutable" />
<add name="Vary" value="Accept-Encoding" />
</customHeaders>
</httpProtocol>
</system.webServer>
</location>
<location path="static">
<system.webServer>
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" />
</staticContent>
<httpProtocol>
<customHeaders>
<add name="Cache-Control" value="public, max-age=31536000, immutable" />
<add name="Vary" value="Accept-Encoding" />
</customHeaders>
</httpProtocol>
</system.webServer>
</location>
<!-- 3) 关闭 ETag(多机回源时间戳可能不同,避免 CDN/浏览器误判) -->
<httpProtocol>
<customHeaders>
<remove name="ETag" />
</customHeaders>
</httpProtocol>
<!-- 4) (可选)预压缩文件的智能回退:优先 .br,再 .gz,再源文件 -->
<!-- 如果你做了预压缩,请打开这段;否则先跳过 -->
<rewrite>
<rules>
<!-- JS -->
<rule name="Serve .br for JS" stopProcessing="true">
<match url="(.*)\.js$" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_ACCEPT_ENCODING}" pattern="br" />
<add input="{REQUEST_FILENAME}.br" matchType="IsFile" />
</conditions>
<action type="Rewrite" url="{R:1}.js.br" />
</rule>
<rule name="Serve .gz for JS" stopProcessing="true">
<match url="(.*)\.js$" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_ACCEPT_ENCODING}" pattern="gzip" />
<add input="{REQUEST_FILENAME}.gz" matchType="IsFile" />
</conditions>
<action type="Rewrite" url="{R:1}.js.gz" />
</rule>
<!-- CSS 同理 -->
<rule name="Serve .br for CSS" stopProcessing="true">
<match url="(.*)\.css$" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_ACCEPT_ENCODING}" pattern="br" />
<add input="{REQUEST_FILENAME}.br" matchType="IsFile" />
</conditions>
<action type="Rewrite" url="{R:1}.css.br" />
</rule>
<rule name="Serve .gz for CSS" stopProcessing="true">
<match url="(.*)\.css$" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_ACCEPT_ENCODING}" pattern="gzip" />
<add input="{REQUEST_FILENAME}.gz" matchType="IsFile" />
</conditions>
<action type="Rewrite" url="{R:1}.css.gz" />
</rule>
</rules>
<!-- 出站规则:为 .br/.gz 响应补充正确的 Content-Encoding -->
<outboundRules>
<rule name="Add CE for .br" preCondition="IsBrotli">
<match serverVariable="RESPONSE_Content_Encoding" pattern=".*" />
<action type="Rewrite" value="br" />
</rule>
<rule name="Add CE for .gz" preCondition="IsGzip">
<match serverVariable="RESPONSE_Content_Encoding" pattern=".*" />
<action type="Rewrite" value="gzip" />
</rule>
<preConditions>
<preCondition name="IsBrotli">
<add input="{REQUEST_URI}" pattern="\.br$" />
</preCondition>
<preCondition name="IsGzip">
<add input="{REQUEST_URI}" pattern="\.gz$" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
<!-- 5) 让 IIS 认识 .gz/.br 的 MIME(供静态回源) -->
<staticContent>
<remove fileExtension=".gz" />
<remove fileExtension=".br" />
<mimeMap fileExtension=".gz" mimeType="application/octet-stream" />
<mimeMap fileExtension=".br" mimeType="application/octet-stream" />
</staticContent>
</system.webServer>
</configuration>
说明:如果你不开“预压缩文件回源”,只用 IIS 在线压缩,也能拿到 70% 左右的字节节省。但预压缩 + 智能回退对高并发、CPU 受限场景特别友好。
五、(可选)构建阶段预压缩:PowerShell 一把梭
我们把前端构建产物(/assets、/static)在 CI/CD 阶段直接生成 .br 与 .gz,放进发布包。Windows Server 2019/2022 自带 .NET 4.8,可用 System.IO.Compression 直接搞定。
# Compress-Static.ps1
param(
[string]$Root="D:\site\static",
[string[]]$Patterns=@("*.js","*.css","*.json","*.svg","*.xml","*.txt")
)
Add-Type -AssemblyName System.IO.Compression.FileSystem
Add-Type -AssemblyName System.IO.Compression
function Compress-Gzip($inPath,$outPath){
$fsIn = [System.IO.File]::OpenRead($inPath)
$fsOut = [System.IO.File]::Create($outPath)
$gz = New-Object System.IO.Compression.GZipStream($fsOut,[System.IO.Compression.CompressionLevel]::Optimal)
$fsIn.CopyTo($gz); $gz.Dispose(); $fsIn.Dispose(); $fsOut.Dispose()
}
function Compress-Brotli($inPath,$outPath){
$fsIn = [System.IO.File]::OpenRead($inPath)
$fsOut = [System.IO.File]::Create($outPath)
$br = New-Object System.IO.Compression.BrotliStream($fsOut,[System.IO.Compression.CompressionLevel]::Optimal)
$fsIn.CopyTo($br); $br.Dispose(); $fsIn.Dispose(); $fsOut.Dispose()
}
foreach($p in $Patterns){
Get-ChildItem -Path $Root -Recurse -Filter $p | ForEach-Object {
$gz="$($_.FullName).gz"
$br="$($_.FullName).br"
if(!(Test-Path $gz)){ Compress-Gzip $_.FullName $gz }
if(!(Test-Path $br)){ Compress-Brotli $_.FullName $br }
}
}
Write-Host "Pre-compress done."
跟上面 web.config 的重写规则配合,浏览器优先拿 .br,不支持再拿 .gz,都不行就回源。IIS 减少在线压缩 CPU 消耗。
六、图片怎么办?(压缩对图片没用,但我们可以让图片“更快”)
- 不对 JPG/PNG/WebP 做 IIS 压缩(已高压缩,收益小还耗 CPU)。
- 强缓存 + CDN:给 /img/ 路径打长期缓存(文件名带 hash),CDN 边缘命中率高。
- 响应 Range:IIS 默认支持断点续传;对大图/视频,浏览器可并行按需取。
- 自动降级 & 响应式:前端 <img srcset> / <picture> 提供多分辨率,移动端拿更小图。
- WebP/AVIF 产线:构建或异步生成多格式(AVIF/WebP/JPG),通过 UA/Accept 或前端逻辑选择。
我们在 IIS 的图片路径上只做缓存与头部:
<location path="img">
<system.webServer>
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="90.00:00:00" />
</staticContent>
<httpProtocol>
<customHeaders>
<add name="Cache-Control" value="public, max-age=7776000, immutable" />
</customHeaders>
</httpProtocol>
</system.webServer>
</location>
七、上线与验证:别一把梭,先灰度
1)灰度思路
IIS 站点复制:一台机器开两个站点(www / www-canary),端口或主机头区分。
SLB 把 5% 海外流量打到 canary。
Prometheus/PerfMon 监控:CPU、IIS 压缩命中、吞吐、5xx。
2)快速校验命令
# 必须看到 Content-Encoding: gzip 或 br
curl.exe -I --http2 -H "Accept-Encoding: gzip, deflate, br" https://canary.example.com/product/12345
# 体积对比(以 JS 为例)
$raw = (curl.exe -s https://canary.example.com/assets/app.bundle.js | Measure-Object -Character).Characters
$gz = (curl.exe -s -H "Accept-Encoding: gzip" https://canary.example.com/assets/app.bundle.js | Measure-Object -Character).Characters
"$raw -> $gz"
八、实测结果(对同一款详情页)
美国西部 4G,RTT≈160ms,Chrome:
| 指标 | 优化前 | 优化后(仅 IIS 压缩) | 优化后 + 预压缩(br/gz) |
|---|---|---|---|
| HTML 传输(大小/Content-Encoding) | 86 KB / 无 | 18 KB / gzip | 14 KB / br |
| app.bundle.js | 1.21 MB / 无 | 340 KB / gzip | 270 KB / br |
| styles.css | 310 KB / 无 | 58 KB / gzip | 46 KB / br |
| detail.json | 62 KB / 无 | 10 KB / gzip | 8 KB / br |
| 首屏可交互(TTI) | 5.7 s | 4.3 s | 3.7 s |
| JS/CSS 完整下载 | 2.3 s | 1.2 s | 0.9 s |
| 详情主图可见 | 2.9 s | 2.3 s | 2.1 s |
| IIS W3WP CPU 峰值 | 38% | 46% | 41% |
解释:仅 IIS 在线压缩时 CPU 会升一点(可以接受);**加上“预压缩”**后,CPU 又回落,同时体积更小(br 更优),海外端到端体验最佳。
九、线上坑与现场解决
CPU 突刺
大促时动态压缩会把 CPU 冲上去。我们靠 dynamicCompressionEnableCpuUsage=60 / Disable=85 兜住;另外只让 HTML/JSON 动态压,避免把一切都丢给压缩器。
杀毒/EDR 锁住压缩临时目录
某次发现 IIS_Compress_Temp 下文件句柄被占,W3WP 报错。把目录加进安全软件白名单,问题解决。
CDN 复用与回源
CDN 默认会携带 Accept-Encoding 回源,有的边缘把 gzip 直接透传给用户。这没问题,但务必加 Vary: Accept-Encoding,否则 CDN 缓存键不区分编码,可能错配。
ETag 与多机一致性
多台 IIS 的文件时间戳不一致,会导致 ETag 不同,CDN 命中率下降。我们直接移除 ETag,靠 Cache-Control + Hash 文件名 保证一致性。
错误地压缩图片
初期误把 image/* 加进了动态类型,CPU 抖且收益为零。回滚后一切恢复。
HTTP/2 被意外关闭
某次组策略更新把 TLS 套件改了,HTTP/2 退化为 HTTP/1.1。对比头部与并发后迅速定位,恢复 TLS 配置后 HTTP/2 正常。
十、建议的参数与 SOP(可直接复用)
推荐参数(起步即用)
- staticCompressionLevel=7、dynamicCompressionLevel=4
- dynamicCompressionEnableCpuUsage=60、Disable=85
- 允许压缩:text/*、application/javascript、application/json、image/svg+xml
- 禁止压缩:image/*、font/woff2、application/pdf、application/zip、application/octet-stream
- Vary: Accept-Encoding,Cache-Control: public, max-age=31536000, immutable(静态资源路径)
- 预压缩:构建阶段产出 .br/.gz,用重写规则智能回退
- 监控:CPU、请求数、压缩命中率、5xx、平均响应体积
上线 SOP
- 基线测量(体积/编码/TTI)。
- 系统级开启压缩 + 类型白/黑名单。
- 站点 web.config 下发缓存与头部。
- 小流量灰度 + 海外节点验证。
- 开启预压缩(CI/CD 脚本)+ 重写规则。
- 放量,观察 CPU 与 5xx。
- 复盘与参数微调。
十一、FAQ:几条常被问到的话
要不要上 Brotli 模块?
IIS 原生不带 Brotli 在线压缩。你可以用预压缩的 .br 文件 + 上面的规则,已经够香;或者把 Brotli 放到 CDN 边缘做,性价比更高。
对 API 接口有副作用吗?
一般没有。注意只给 application/json 开启动态压缩,并确保你的客户端/中间层都能处理 Content-Encoding。
图片还能不能更快?
可以:CDN 近源、多分辨率/格式、懒加载、骨架屏、HTTP/2 优先级/Preload 都能叠加。
十二、收尾:凌晨 3:05 的 NOC
“3:05,我又刷了一次美国西部的链路。TTI 从 5.x 掉到 3.x,运营群里大促转化率曲线开始上扬。窗外货梯还在上上下下,机房的风依旧冷,但我知道这波压缩、缓存、预压缩和 HTTP/2 的组合拳,算是打对了。”
这篇笔记写到这里,不是炫技,是想让你在类似的跨境场景里,有一套可复制的 IIS 提速方案:先测量 → 开压缩 → 明确类型 → 配缓存 → 预压缩 → 灰度验证 → 观察调参。
当你也在香港的夜里守着那几台服务器时,希望这份流程能让你少走弯路,多睡一会儿。
附:一键初始化脚本(合并常用设置)
# Init-IIS-Compression.ps1
$compressTemp="D:\IIS_Compress_Temp"
New-Item -Path $compressTemp -ItemType Directory -Force | Out-Null
Install-WindowsFeature Web-Server -IncludeManagementTools
Install-WindowsFeature Web-Static-Content, Web-Default-Doc, Web-Http-Errors, Web-Http-Logging, Web-Filtering
Install-WindowsFeature Web-Stat-Compression, Web-Dyn-Compression
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter 'system.webServer/urlCompression' -name 'doStaticCompression' -value 'True'
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter 'system.webServer/urlCompression' -name 'doDynamicCompression' -value 'True'
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter 'system.webServer/httpCompression' -name 'staticCompressionLevel' -value 7
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter 'system.webServer/httpCompression' -name 'dynamicCompressionLevel' -value 4
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter 'system.webServer/httpCompression' -name 'dynamicCompressionEnableCpuUsage' -value 60
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter 'system.webServer/httpCompression' -name 'dynamicCompressionDisableCpuUsage' -value 85
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter 'system.webServer/httpCompression' -name 'directory' -value $compressTemp
# Static types allow / deny
$allow=@('text/*','application/javascript','application/json','image/svg+xml')
$deny=@('image/*','font/woff2','application/pdf','application/zip','application/octet-stream')
foreach($mt in $allow){
Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.webServer/httpCompression/staticTypes" -name "." -value @{mimeType=$mt;enabled='True'}
}
foreach($mt in $deny){
Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.webServer/httpCompression/staticTypes" -name "." -value @{mimeType=$mt;enabled='False'}
}
# Dynamic types
Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.webServer/httpCompression/dynamicTypes" -name "." -value @{mimeType='text/*';enabled='True'}
Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.webServer/httpCompression/dynamicTypes" -name "." -value @{mimeType='application/json';enabled='True'}
Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.webServer/httpCompression/dynamicTypes" -name "." -value @{mimeType='*/*';enabled='False'}
Write-Host "IIS compression baseline configured."
用这套基线 + 上文 web.config 与预压缩脚本,你基本就具备了跨境电商在香港 IIS 提速的实战兵器库。