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

Nginx代理DigitalOcean App Platform返回403 Cloudflare错误

故障根因

返回的Cloudflare 403错误是DigitalOcean App Platform(以下简称DO App Platform)边缘层的Host白名单校验拦截导致,和自有Nginx服务器的配置逻辑无关。
DO App Platform默认接入Cloudflare提供WAF、CDN能力,所有访问*.ondigitalocean.app默认域名的请求,边缘层会校验请求携带的Host头:仅当Host值属于当前应用已绑定的域名列表(包含平台分配的默认*.ondigitalocean.app域名、用户在控制台手动添加并完成校验的自定义域名)时才会转发到后端应用,否则直接在边缘层返回403 Permission Denied。
添加proxy_set_header Host $host配置后,Nginx转发到DO的请求Host从默认的my-app-platform-app.ondigitalocean.app变成了自有域名mydomain.com,但没有在DO App Platform控制台将该域名添加为应用的绑定域名,Host不在白名单内,因此触发拦截。

可选解决方案

根据业务需求二选一即可:

  • 方案1:保留Host头为DO默认域名,自定义头透传原始访问域名
    如果不需要后端应用直接收到自有域名作为Host,仅需要业务逻辑能拿到用户实际访问的域名,不需要修改转发的Host头,额外添加自定义头传递原始请求信息即可,不会触发WAF拦截,参考配置:
    location /api {
        proxy_pass              https://my-app-platform-app.ondigitalocean.app;
        proxy_http_version      1.1;
        # 显式指定转发给DO的Host为平台默认域名,避免被Nginx默认规则修改
        proxy_set_header        Host my-app-platform-app.ondigitalocean.app;
        # 透传原始访问域名、客户端IP、协议给后端
        proxy_set_header        X-Forwarded-Host $host;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        X-Forwarded-Proto $scheme;
    }
    
    后端.NET服务中直接读取X-Forwarded-Host头即可获取用户访问的真实自有域名。
  • 方案2:在DO侧添加自定义域名到白名单
    如果必须让后端应用收到的Host头就是自有域名,登录DO App Platform控制台,进入对应应用的设置页面,找到「Domains」管理项,添加mydomain.com作为应用自定义域名,按照平台提示完成域名所有权校验即可。

    注意:由于是通过自有Nginx反向代理访问应用,不需要按照DO的提示将域名解析到平台提供的CNAME地址,仅需要完成所有权校验步骤,平台就会将该域名加入Host白名单,之前配置的proxy_set_header Host $host即可正常生效,不会再触发403拦截。

配置避坑提醒

当前配置的location /api规则在搭配不带路径后缀的proxy_pass时,Nginx会将完整的/api/xxx路径原样转发到DO端的应用。如果DO应用内接口路径本身没有/api前缀,需要调整配置做路径重写,避免出现接口404问题,参考配置:

location /api/ {
    # proxy_pass末尾加斜杠,会自动剥离匹配的/api前缀再转发
    proxy_pass              https://my-app-platform-app.ondigitalocean.app/;
    proxy_http_version      1.1;
    proxy_set_header        Host my-app-platform-app.ondigitalocean.app;
    proxy_set_header        X-Forwarded-Host $host;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        X-Forwarded-Proto $scheme;
}

内容的提问来源于stack exchange,提问作者Jason White

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 07:24:24