部署.NET Core 6.0至DigitalOcean App Platform遇HTTPS配置异常求助
解决方案:.NET 6部署到DigitalOcean Apps Platform HTTPS配置错误
问题根源
DigitalOcean Apps Platform会自动处理外部HTTPS终止:用户的HTTPS请求先被DO负载均衡器接收,由平台提供的SSL证书完成加密,再以HTTP请求转发到容器。因此你的应用不需要在容器内配置HTTPS证书,只需监听HTTP端口即可。
你的配置核心错误:
- 强制应用监听HTTPS端口,但未提供有效生产证书
- 错误设置
ASPNETCORE_URLS,同时指定HTTPS的80和443端口(80为HTTP默认端口) - 在容器内生成开发者证书,这在生产环境无意义
具体修复步骤
1. 修正Dockerfile
修改后的Dockerfile关键变更已标注:
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base WORKDIR /app # 仅暴露HTTP 80端口 EXPOSE 80 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build WORKDIR /src COPY ["/Reservations.Api/Reservations.Api.csproj", "Reservations.Api/"] COPY ["/Reservations.Application/Reservations.Application.csproj", "Reservations.Application/"] COPY ["/Reservations.Persistance/Reservations.Persistance.csproj", "Reservations.Persistance/"] COPY ["/Reservations.Security/Reservations.Security.csproj", "Reservations.Security/"] COPY ["/Reservations.Domain/Reservations.Domain.csproj", "Reservations.Domain/"] COPY ["/Reservations.UnitTests/Reservations.UnitTests.csproj", "Reservations.UnitTests/"] RUN dotnet restore "Reservations.Api/Reservations.Api.csproj" COPY . . RUN dotnet build "Reservations.Api/Reservations.Api.csproj" -c Release -o /src/build # 移除无用的开发者证书生成命令 # RUN dotnet dev-certs https FROM build AS publish RUN dotnet publish "Reservations.Api/Reservations.Api.csproj" -c Release -o /src/publish FROM base AS final WORKDIR /app COPY --from=publish /src/publish . # 修正环境变量,仅监听HTTP 80端口 ENV ASPNETCORE_URLS="http://+:80" ENTRYPOINT ["dotnet", "Reservations.Api.dll"]
2. 配置Forwarded Headers(关键)
DO负载均衡器会将HTTPS请求转为HTTP转发,应用需要识别原始请求协议,否则UseHttpsRedirection会失效或导致循环重定向。在Program.cs中添加以下代码(放在UseHttpsRedirection之前):
app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto }); app.UseHttpsRedirection();
3. 忽略launchsettings.json(可选)
launchsettings.json仅在本地开发生效,部署时不会被读取,无需修改。
额外说明
- 无需手动上传SSL证书到容器,DigitalOcean Apps Platform会自动为域名配置并续期免费SSL证书
- 若需在代码中判断请求是否为HTTPS,使用
Request.IsHttps即可,配置Forwarded Headers后该属性会返回正确值
内容的提问来源于stack exchange,提问作者Pavle Ćurčić
相关产品推荐
相关产品推荐

