You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署.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ć

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 16:17:29