源站存在安全防护等原因导致访问CDN域名报503错误

免责声明: 本文档可能包含第三方产品信息,该信息仅供参考。阿里云对第三方产品的性能、可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺。

源站使用CDN加速后,访问域名报503错误。

  • 安全组规则限制访问。
  • 服务器配置了单IP访问次数限制。
  • Web服务异常或服务器超载。
  • 系统存在云锁、安全狗、防火墙等安全策略,拦截了CDN的回源IP。
  • 本文以源站为Linux系统的ECS服务器,且由Nginx服务提供Web服务为例,处理方法如下。

    CDN读取数据过程

    CDN读取数据全程如下。

    客户端 -> CDN L1层 -> CDN L2层 -> 源站

    当客户端访问您的源站资源时,客户端将先查看CDN的1级节点,再查找CDN的2级节点,如果2级节点没有,再查找源站。源站中的数据同步到2级节点,2级节点同步到1级节点,再从1级节点返回给客户端需要访问的数据。对于源站来说,CDN的L2节点才是客户端。

    回源节点的IP地址

    为了防止源站被攻击,一些客户希望阿里云CDN提供回源的节点IP,然后在源站设置IP白名单,只让CDN回源的节点访问源站。但是,由于CDN回源时会智能分配节点访问您的源站服务器,回源的节点IP是不固定的,因此不建议您将源站服务器的回源策略设置为固定的节点IP列表,这样可能会发生回源失败的情况。

    如果您有特殊业务需求,源站上有安全狗等防护软件确实需要配置白名单,请调用 接口DescribeL2VipsByDomain ,获取CDN回源的节点IP列表并添加到您源站服务器的白名单中,以免影响CDN回源获取资源。但是该接口仅支持日峰值带宽为1Gbps以上的用户调用,如果您符合该条件,请您提交工单,申请该接口的调用权限。

    安全组规则限制

  • 登录 ECS控制台
  • 在实例列表页面,单击对应的实例名称。
  • 安全组 页签中,单击 安全组列表
  • 查看正在使用的规则表,单击 配置规则 ,根据需要添加或变更安全组规则即可。有关如何判断IP地址是否为CDN的IP地址,请参考 CDN读取数据过程 。有关如何获取CDN的IP地址,请参考 回源节点的IP地址
  • 单IP访问次数限制

  • 远程连接 Linux实例。
  • 检查Nginx服务的配置文件,修改 ngx_http_limit_conn_module ngx_http_limit_req_module 配置项。本文以 ngx_http_limit_req_module 模块为例,配置文件示例如下。
    http {
    limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;
    ...
    server {
      ...
        limit_req zone=perip burst=5 nodelay;
      }
  • ngx_http_limit_conn_module 模块用于限制每个定义的密钥的连接数,特别是单个IP​​地址的连接数。使用 limit_conn_zone limit_conn 指令。
  • ngx_http_limit_req_module 模块用于限制每一个定义的密钥的请求的处理速率,特别是从一个单一的IP地址的请求的处理速率。使用泄漏桶方法进行限制,使用 limit_req_zone limit_req 指令。
  • limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s; 配置项定义一个limit_req_zone用来存储Session,其大小是10M内存,以$binary_remote_addr为Key,限制平均每秒的请求为10个。
  • limit_req zone=perip burst=5 nodelay; 配置项中启用nodelay选项,严格使用平均速率限制请求数,超过的请求会被延时处理。
  • Web服务异常

  • 远程连接 Linux实例。
  • 检查Nginx服务的日志,根据具体错误进行排查修复。
  • 执行如下命令,重新启动Nginx服务。
    注:该操作会影响业务,请谨慎使用。
    service restart nginx

    安全策略拦截

    设置各个安全产品的拦截策略,放行CDN的回源IP即可。

    添加加速域名 验证域名归属权 配置CNAME 域名配置功能函数 模拟访问测试(可选) 跨账号迁移CDN域名 停止加速服务 配置带宽封顶