Azure Function本地调试模拟存储报407 Proxy Authentication Required错误
错误产生原因
时间触发类型的Azure Function启动时,必须通过配置的存储账户(你当前用的是本地Azurite模拟存储)完成监听器初始化、租约管理等核心操作。
你所在环境的系统全局已经配置了HTTP/HTTPS正向代理,Azure Functions运行时及依赖的Azure.Storage.Blobs SDK默认会继承系统代理配置,将**所有HTTP/HTTPS请求(包括访问本地127.0.0.1上Azurite服务的请求)**全部转发到公司代理。而公司代理要求身份认证,访问本地回环地址的请求不会携带代理认证信息,因此代理返回407 Proxy Authentication Required响应,最终导致Function监听器启动失败。
你在local.settings.json中添加的代理相关配置不生效,是因为Azure Functions运行时检测到对应参数已经在系统环境变量中存在,会直接使用系统级配置,跳过local.settings.json中的重复定义;且现有代理配置没有添加本地地址的绕过规则,本地Azurite的访问请求始终被转发到代理,才会触发这个错误。Azurite本身已经正常启动监听,问题和Azurite服务状态无关。
修复配置步骤
按优先级选以下任意一种方案调整即可:
- 方案1:修改系统环境变量添加本地地址代理绕过
找到系统环境变量中的NO_PROXY和no_proxy项(部分.NET SDK对大小写敏感,两个参数都要配置),在原有值末尾追加127.0.0.1,localhost,确保本地回环地址的请求不经过代理。修改完成后必须完全重启Visual Studio 2022(不要只停止调试重跑),让VS进程加载新的环境变量后再启动调试。 - 方案2:仅在项目调试配置中添加绕过规则,不修改系统全局配置
右键Function项目进入「属性-调试-调试启动配置文件」,打开launchSettings.json,在你当前使用的调试配置节点的environmentVariables段中添加两个绕过参数,配置示例如下:
项目级调试配置的优先级高于系统环境变量,配置保存后直接启动调试即可,不会影响系统内其他软件的代理设置。"environmentVariables": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "dotnet", "NO_PROXY": "127.0.0.1,localhost", "no_proxy": "127.0.0.1,localhost" } - 方案3:如果后续切换为使用云端真实Azure Storage账户而非本地Azurite调试,需要在代理配置中补充有效的身份认证信息,代理地址格式调整为
http://[代理账号]:[代理密码]@[代理IP]:[代理端口],同时确保代理放通对应Azure存储端点的访问权限即可。
配置完成后重新启动调试,存储监听器即可正常连接Azurite,时间触发器可以正常加载运行。
内容的提问来源于stack exchange,提问作者Bernhard Pranz
相关产品推荐
相关产品推荐

