Azure上IIS无法提供静态文件letsencrypt.txt的问题求助
解决Azure App Service中letsencrypt.txt访问404的问题
问题根源
你的web.config里配置的aspNetCore handler路径为*,会拦截所有请求并转发给ASP.NET Core应用处理,但你的应用未配置静态文件支持,导致IIS无法直接返回letsencrypt.txt文件,最终返回404。
解决方案
方案1:修改web.config,让IIS直接处理静态文件
在<handlers>节点中,在aspNetCore handler之前添加专门处理letsencrypt.txt的规则,让IIS直接返回该文件,无需经过ASP.NET Core:
<configuration> <location path="." inheritInChildApplications="false"> <system.webServer> <handlers> <!-- 添加这一行 --> <add name="LetsEncryptTxt" path="letsencrypt.txt" verb="*" modules="StaticFileModule" resourceType="File" requireAccess="Read" /> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers> <!-- 其余配置保持不变 --> </system.webServer> </location> </configuration>
方案2:在ASP.NET Core应用中启用静态文件中间件
如果希望应用本身处理静态文件请求,在Program.cs(或Startup.cs)中添加静态文件中间件,确保它在路由配置之前执行:
var builder = WebApplication.CreateBuilder(args); // 保留原有服务注册配置 builder.Services.AddControllers(); var app = builder.Build(); // 启用静态文件支持,放在路由、授权等中间件之前 app.UseStaticFiles(); // 其余中间件配置 app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();
额外检查项
- 文件名一致性:确认
wwwroot下的文件确实是letsencrypt.txt,没有大小写或拼写错误(虽然Windows文件系统不区分大小写,但URL路由可能存在严格匹配情况)。 - API Management规则:如果你的域名通过API Management转发,检查APIM是否有路由规则拦截了
/letsencrypt.txt的请求,或未正确将该路径转发到App Service。 - 日志中的HTTPS+端口80:这是Azure App Service反向代理的正常行为,前端代理处理HTTPS后转发到后端80端口,并非404的原因。
内容的提问来源于stack exchange,提问作者BWhite
相关产品推荐
相关产品推荐

