如何为IIS的ApplicationPoolIdentity账号配置默认代理规则?
IIS 10 下ApplicationPoolIdentity身份应用绕过代理访问本地资源解决方案
核心原因
ApplicationPoolIdentity是IIS生成的专属虚拟账户,默认不会加载用户配置文件,普通用户维度的IE代理设置、注册表修改、系统环境变量都不会作用到该身份下的进程,所以会出现普通用户正常但应用池进程始终走代理的情况。
可行解决方案
方案1:应用代码层面配置全局代理(最推荐)
该方案不需要修改服务器配置,仅对当前应用生效,可控性最高。
在.NET Core 3.1应用的Program.cs的CreateHostBuilder方法中添加全局代理配置:
using System.Net; public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureServices(services => { // 配置全局默认代理规则,所有HttpClient默认使用该配置 HttpClient.DefaultProxy = new WebProxy { // 如不需要对外走代理,直接删除Address配置,将UseProxy设为false即可 Address = new Uri("http://你司实际代理地址:端口"), BypassProxyOnLocal = true, // 自动绕过localhost、127.0.0.1等本地地址 // 自定义需要绕过代理的内部域名、IP段 BypassList = new string[] { "*.你司内部域名.com", "10.0.*", "192.168.*" }, UseDefaultCredentials = true }; }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
修改后重新编译发布应用即可生效。
方案2:修改ApplicationPoolIdentity账户的代理配置
如果不能修改应用代码,可直接修改虚拟账户的系统代理规则:
- 打开IIS管理器,找到对应应用池,右键选择「高级设置」
- 在「进程模型」分类下找到「加载用户配置文件」,将值改为
True,保存后重启应用池 - 以管理员身份打开命令提示符,执行命令获取应用池对应的SID:
wmic useraccount where name='IIS APPPOOL\替换为你的应用池名称' get sid - 打开注册表编辑器,定位到路径
HKEY_USERS\上一步获取到的SID\Software\Microsoft\Windows\CurrentVersion\Internet Settings - 修改对应键值:
- 要完全关闭代理:将
ProxyEnable的DWORD值改为0 - 仅绕过本地资源:保留
ProxyEnable为1,新增字符串值ProxyOverride,内容填<local>;*.你司内部域名.com;192.168.*
- 要完全关闭代理:将
- 重启应用池后生效
方案3:修改.NET全局配置文件(服务器所有应用生效)
如果该服务器上所有IIS应用都需要相同的代理规则,可修改machine.config配置:
- 打开对应架构的配置文件:
- 64位应用池:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config - 32位应用池:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config
- 64位应用池:
- 在
<configuration>节点下添加以下配置:<system.net> <defaultProxy enabled="true"> <proxy bypassonlocal="True" proxyaddress="http://你司实际代理地址:端口"/> <bypasslist> <add address="[a-z]+\.你司内部域名\.com$" /> <add address="192\.168\.\d{1,3}\.\d{1,3}" /> </bypasslist> </defaultProxy> </system.net> - 保存后重启IIS服务生效
注意事项
- 若应用完全不需要走任何代理,所有方案中都可以直接关闭代理开关,不需要填写实际代理地址
- 修改注册表或系统配置前建议提前备份对应配置项,避免影响其他服务运行
内容的提问来源于stack exchange,提问作者Daniel Habenicht
相关产品推荐
相关产品推荐

