概要
本文将介绍如何在 Windows 中配置代理服务器,并区分 用户级(WinINET) 与 系统级(WinHTTP) 设置。
示例:ProxyServer = http=<<PROXY_ADDRESS>>;https=<<PROXY_ADDRESS>>
其中的环境依赖项以 <<变量名>> 表示。
变量说明
以下表格定义了文中使用的变量,请根据您的环境替换。
| 变量名 | 示例值 | 说明 |
|---|---|---|
<<PROXY_ADDRESS>> |
proxy.example.com:8080 |
代理服务器主机名与端口号 |
<<PROXY_BYPASS>> |
intranet.example.com;192.168.*;<local> |
不经代理的域名或子网,多个值用分号分隔 |
<<ADVPROXY_SETTINGS_PATH>> |
C:\proxy-settings.json |
advproxy 配置文件的保存路径 |
Step 1: 了解代理设置类型
| 类型 | 作用范围 | 用途 |
|---|---|---|
| 用户级 (WinINET) | 当前登录用户 | 适用于浏览器及用户应用通信,反映 IE/Edge 设置 |
| 系统级 (WinHTTP) | 服务账号 / 系统全局 | 适用于 Windows Update、BITS、Defender 等系统服务 |
BITS(后台智能传输服务)负责在后台传输 Windows 更新和安全定义文件。
由于其以 LocalSystem 账号运行,因此不会使用用户级代理(WinINET)设置。
Step 2: 使用 PowerShell 配置用户级代理(WinINET)
$proxy = "<<PROXY_ADDRESS>>"
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" `
-Name ProxyEnable -Value 1
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" `
-Name ProxyServer -Value "http=$proxy;https=$proxy"
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" `
-Name ProxyOverride -Value "<<PROXY_BYPASS>>"
验证设置:
Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" | Select ProxyEnable, ProxyServer, ProxyOverride
Step 3: 配置系统级代理(WinHTTP / BITS)
① 旧方式(适用于 Windows Server 2019 及更早版本)
netsh winhttp set proxy <<PROXY_ADDRESS>> "<<PROXY_BYPASS>>"
netsh winhttp show proxy
② 新方式(Windows Server 2022 及更高版本推荐)
创建 JSON 文件:
@'
{
"ProxyIsEnabled": true,
"Proxy": "http=<<PROXY_ADDRESS>>;https=<<PROXY_ADDRESS>>",
"ProxyBypass": "<<PROXY_BYPASS>>",
"AutoConfigIsEnabled": false,
"AutoDetect": false
}
'@ | Out-File "<<ADVPROXY_SETTINGS_PATH>>" -Encoding ascii
应用配置:
netsh winhttp set advproxy setting-scope=machine settings-file="<<ADVPROXY_SETTINGS_PATH>>"
若不希望使用 JSON 文件,可直接通过命令设置:
netsh winhttp set advproxy setting-scope=machine settings='{\"ProxyIsEnabled\":true,\"Proxy\":\"http=<<PROXY_ADDRESS>>;https=<<PROXY_ADDRESS>>\",\"ProxyBypass\":\"<<PROXY_BYPASS>>\",\"AutoConfigIsEnabled\":false,\"AutoDetect\":false}'
此方式适合临时测试或快速部署场景。
Step 4: 将代理配置应用于 BITS(LocalSystem)
bitsadmin /util /setieproxy localsystem MANUAL_PROXY <<PROXY_ADDRESS>> "<<PROXY_BYPASS>>"
bitsadmin /util /getieproxy localsystem
Step 5: 验证与故障排查
netsh winhttp show proxy
Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" | Select ProxyEnable, ProxyServer, ProxyOverride
如果 Windows Update 在代理环境下失败,请确保 AutoDetect 被禁用。
在 Server Core 环境中,应使用 advproxy 命令进行设置。
重置代理设置
若需取消代理配置,可使用以下命令。
用户级(WinINET)
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name ProxyEnable -Value 0
Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name ProxyServer -ErrorAction SilentlyContinue
Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name ProxyOverride -ErrorAction SilentlyContinue
系统级(WinHTTP / advproxy)
netsh winhttp reset proxy
或在 Windows Server 2022 及以上版本中:
netsh winhttp set advproxy setting-scope=machine settings='{\"Proxy\":\"\",\"ProxyBypass\":\"\",\"AutoconfigUrl\":\"\",\"AutoDetect\":false}'
总结
Windows 代理配置分为两类:
- WinINET:影响用户级浏览器及应用程序通信,对应 IE/Edge 设置。
- WinHTTP / advproxy:影响系统服务(Windows Update、BITS、Defender 等)。
在 Windows Server 2022 及更高版本中,推荐使用 advproxy。
结合 bitsadmin 可确保 LocalSystem 账号也能正确应用代理设置。
运维建议:
- 明确通信层级(用户通信或系统通信)
- 按层级分别配置 WinINET / WinHTTP
- 在 Server Core 环境中优先使用
advproxy - 无需时使用
reset proxy或reset advproxy清除设置
通过正确配置,可确保 Windows Update、Defender 更新及 BITS 传输在代理环境中稳定运行。
