如何在 Windows 中配置代理服务器

概要

本文将介绍如何在 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 账号也能正确应用代理设置。

运维建议:

  1. 明确通信层级(用户通信或系统通信)
  2. 按层级分别配置 WinINET / WinHTTP
  3. 在 Server Core 环境中优先使用 advproxy
  4. 无需时使用 reset proxyreset advproxy 清除设置

通过正确配置,可确保 Windows Update、Defender 更新及 BITS 传输在代理环境中稳定运行。