域名无法访问的临时解决方案

我们监测到从今天(06/20)下午开始各个地区陆续出现部分网络无法解析 leancloud.cn 以及 ***.***.lncld.net 域名的问题。我们正在全力和域名提供商沟通该问题的解决方案。在问题彻底解决之前,我们建议开发者更换域名作为临时解决方案。

开发者如何访问 LeanCloud 控制台等服务

将原域名 leancloud.cn 切换成 avoscloud.com 即可:

官网:https://avoscloud.com/
博客:https://blog.avoscloud.com/
健康状态:https://status.avoscloud.com
论坛:https://forum.avoscloud.com

华北节点控制台:https://avoscloud.com/dashboard/
华东节点控制台:https://tab.avoscloud.com
美国节点控制台:https://us.avoscloud.com

华北节点

云引擎

云引擎本身不受影响(因为云引擎内部运行的代码访问 API 走的是内网),但是命令行工具部署代码可能有问题,需要进行如下配置后才能正常使用:

  1. 升级命令行工具到最新版 0.20.1

  2. 根据具体的环境,执行下列命令:

Shell 环境

export LEANCLOUD_DASHBOARD=https://avoscloud.com
export LEANCLOUD_API_SERVER=https://avoscloud.com

Windows 环境

set LEANCLOUD_DASHBOARD=https://avoscloud.com
set LEANCLOUD_API_SERVER=https://avoscloud.com
  1. 使用 lean login 重新登录

当然,如果在云引擎托管网站,其中的客户端 JavaScript 访问 LeanCloud API,
仍然需要按照下面 JavaScript SDK 一节中的方法切换域名。

服务端应用

如果是在自己的服务器上跑的应用(包括通过 REST API 和 SDK),
最简单快捷的方法是修改服务器的 /etc/hosts ,加入以下行:

117.50.12.165        leancloud.cn
123.59.50.132        app-router.leancloud.cn
123.59.58.149        router-g0-push.leancloud.cn

此外,还需要加上 {{appid 前八位}}.api.lncld.netapi.leancloud.cn 这两项记录。

这两项记录的 IP 值通过在命令行 dig avoscloud.com 获取(在 ANSWER SECTION 部分查看结果),
dig 命令可能返回多个 IP,任选其一即可。

如果需要访问云函数,还需加上 {{appid 前八位}}.engine.lncld.net 这条记录,IP 值同样通过 dig avoscloud.com 获取。

注意,如果需要在本地调试服务端应用,那么本地机器的 hosts 文件同样需要修改(不同操作系统的 hosts 文件路径不同,请自行搜索相关方法)。

REST API

注意:

  1. 在云引擎内访问 REST API,同样走的是内网,不受影响,无需修改代码。
  2. 服务端访问 REST API 的话,请优先尝试上面提到的修改 /etc/hosts 的方法,不用修改代码。

客户端访问 REST API,需要在代码中将 api.leancloud.cn{{appid 前八位}}.api.lncld.net 域名替换为 avoscloud.com

客户端通过 REST API 访问云函数,需要将 {{appid 前八位}}.engine.lncld.net 替换为 avoscloud.com

SDK

注意:

  1. 云引擎 SDK 不受影响,无需修改代码。
  2. 服务端 SDK,请优先尝试上面提到的修改 /etc/hosts 的方法,不用修改代码。

客户端 SDK 需要进行如下修改:(注意,只有较新版本的 SDK 才支持设定 API 服务器地址)

JavaScript SDK

存储 SDK(3.0.0 以上支持,建议升级到 3.11.1 以上,详情见下)

AV.init({
  // appId, appKey,
  serverURLs: 'https://avoscloud.com',
});

>= 3.5.5, < 3.11.1 的应用可能会碰到仍然使用缓存默认配置的 bug,
更新后应用打开的第一次请求可能失败。

>= 3.0.0, < 3.5.5 的应用 不能按上述方法设置,需要使用如下的写法:

AV.init({
  // appId, appKey,
  serverURLs: {
    push: 'https://avoscloud.com',
    stats: 'https://avoscloud.com',
    engine: 'https://avoscloud.com',
    api: 'https://avoscloud.com',
  },
});

如果你使用了 LiveQuery 功能,还需要在初始化的时候额外指定 LiveQuery 模块的域名配置(需要版本 >= 3.5.0):

AV.init({
  // appId, appKey,
  // serverURLs,
  realtime: new AV._sharedConfig.liveQueryRealtime({
    appId,
    appKey,
    server: 'example.com',
  }),
});

即时通讯 SDK(4.0.0 以上支持)

new Realtime({
  // appId, appKey,
  server: {
    api: 'avoscloud.com',
    RTMRouter: 'router-g0-push.avoscloud.com',
  },
};

多人在线对战 SDK

new Client({
      appId: '',
      appKey: '',
      userId: 'tar1',
      playServer: 'https://game-router-cn-n1.avoscloud.com/v1',
});
微信小程序

微信小程序白名单增加:

存储:
request:https://avoscloud.com

即时通讯:
request:https://router-g0-push.avoscloud.com/
Socket:
wss://cn-n1-cell1.avoscloud.com,
wss://cn-n1-cell2.avoscloud.com,
wss://cn-n1-cell5.avoscloud.com,
wss://cn-n1-cell7.avoscloud.com

多人在线对战:
Request:https://game-router-cn-n1.avoscloud.com/
Socket:
wss://cn-n1-wechat-mesos-cell-1.avoscloud.com
wss://cn-n1-wechat-mesos-cell-2.avoscloud.com
wss://cn-n1-wechat-mesos-cell-3.avoscloud.com
wss://cn-n1-wechat-mesos-cell-4.avoscloud.com

iOS SDK

Objective-C SDK

// 配置 SDK 储存
[AVOSCloud setServerURLString:@"https://avoscloud.com" forServiceModule:AVServiceModuleAPI];
// 配置 SDK 推送
[AVOSCloud setServerURLString:@"https://avoscloud.com" forServiceModule:AVServiceModulePush];
// 配置 SDK 云引擎
[AVOSCloud setServerURLString:@"https://avoscloud.com" forServiceModule:AVServiceModuleEngine];
// 配置 SDK 即时通讯
[AVOSCloud setServerURLString:@"https://router-g0-push.avoscloud.com" forServiceModule:AVServiceModuleRTM];
// 配置 SDK 统计
[AVOSCloud setServerURLString:@"https://avoscloud.com" forServiceModule:AVServiceModuleStatistics];
// 初始化
[AVOSCloud setApplicationId:APP_ID clientKey:APP_KEY];

Swift SDK (16.1.0 以上)

let configuration = LCApplication.Configuration(
    customizedServers: [
        .api("https://avoscloud.com"),
        .engine("https://avoscloud.com"),
        .push("https://avoscloud.com"),
        .rtm("https://router-g0-push.avoscloud.com")
    ]
)
try LCApplication.default.set(
    id: "APP_ID",
    key: "APP_KEY",
    configuration: configuration
)

Android SDK

// 配置 SDK 储存
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.API, "https://avoscloud.com");
// 配置 SDK 云引擎
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.ENGINE, "https://avoscloud.com");
// 配置 SDK 推送
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.PUSH, "https://avoscloud.com");
// 配置 SDK 即时通讯
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.RTM, "https://router-g0-push.avoscloud.com");
// 初始化
AVOSCloud.initialize(this,APP_ID,APP_KEY);

Java Unified SDK

import cn.leancloud.core.AVOSService;

// 配置 SDK 储存
AVOSCloud.setServer(AVOSService.API, "https://avoscloud.com");
// 配置 SDK 云引擎
AVOSCloud.setServer(AVOSService.ENGINE, "https://avoscloud.com");
// 配置 SDK 推送
AVOSCloud.setServer(AVOSService.PUSH, "https://avoscloud.com");
// 配置 SDK 即时通讯
AVOSCloud.setServer(AVOSService.RTM, "https://router-g0-push.avoscloud.com");
// 初始化
AVOSCloud.initialize(this,APP_ID,APP_KEY);

.NET SDK

AVClient.Initialize(new AVClient.Configuration {
                ApplicationId = appId,
                ApplicationKey = appKey,
                ApiServer = new Uri("https://avoscloud.com"),
                EngineServer = new Uri("https://avoscloud.com")
            });
// 通过 RTM Router 配置即时通讯
var realtime = new AVRealtime(new AVRealtime.Configuration
           {
                ApplicationId = "app-id",
                ApplicationKey = "app-key",
                RTMRouter = new Uri("https://router-g0-push.avoscloud.com")
           });

多人在线对战,v0.5.0-alpha.0 及之后的版本

var client = new Client(appId, appKey, userId, playServer: "https://game-router-cn-n1.avoscloud.com/v1");
await client.Connect();

PHP SDK 和 Python SDK

这两个属于服务端 SDK,请使用上面「服务端应用」一节提到的修改 /etc/hosts 的方法,不用修改代码。

华东节点

华东节点的大部分服务不受此次事件的影响。

云引擎命令行工具

  1. 升级命令行工具到最新版 0.20.1

  2. 根据具体的环境,执行下列命令:

Shell 环境

export LEANCLOUD_DASHBOARD=https://tab.avoscloud.com
export LEANCLOUD_API_SERVER=https://avoscloud.com

Windows 环境

set LEANCLOUD_DASHBOARD=https://tab.avoscloud.com
set LEANCLOUD_API_SERVER=https://avoscloud.com
  1. 使用 lean login 重新登录

JavaScript

即时通讯 SDK

const appId = 'YOUR_APP_ID';
new Realtime({
  // appId, appKey,
  server: {
    api: 'APPID 前八位.api.lncldapi.com',
    RTMRouter: 'APPID 前八位.rtm.lncldapi.com',
  },
};

多人在线对战 SDK

new Client({
      appId: '',
      appKey: '',
      userId: 'tar1',
      playServer: 'https://{{APPID 前八位}}.play.lncldapi.com/1/multiplayer/router',
});

如果在小程序中使用,还需要将 APPID 前八位.api.lncldapi.comAPPID 前八位.rtm.lncldapi.comAPPID 前八位.play.lncldapi.com 添加到域名白名单列表中。

iOS SDK

Objective-C SDK

// 配置 SDK 储存
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.api.lncldapi.com" forServiceModule:AVServiceModuleAPI];
// 配置 SDK 推送
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.push.lncldapi.com" forServiceModule:AVServiceModulePush];
// 配置 SDK 云引擎
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.engine.lncldapi.com" forServiceModule:AVServiceModuleEngine];
// 配置 SDK 即时通讯
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.rtm.lncldapi.com" forServiceModule:AVServiceModuleRTM];
// 配置 SDK 统计
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.stats.lncldapi.com" forServiceModule:AVServiceModuleStatistics];
// 初始化
[AVOSCloud setApplicationId:APP_ID clientKey:APP_KEY];

Swift SDK 升级到最新版即可。

Android SDK

// 配置 SDK 储存
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.API, "https://{{APPID 前八位}}.api.lncldapi.com");
// 配置 SDK 云引擎
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.ENGINE, "https://{{APPID 前八位}}.engine.lncldapi.com");
// 配置 SDK 推送
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.PUSH, "https://{{APPID 前八位}}.push.lncldapi.com");
// 配置 SDK 即时通讯
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.RTM, "https://{{APPID 前八位}}.rtm.lncldapi.com");
// 初始化
AVOSCloud.initialize(this,APP_ID,APP_KEY);

Java Unified SDK

import cn.leancloud.core.AVOSService;

// 配置 SDK 储存
AVOSCloud.setServer(AVOSService.API, "https://{{APPID 前八位}}.api.lncldapi.com");
// 配置 SDK 云引擎
AVOSCloud.setServer(AVOSService.ENGINE, "https://{{APPID 前八位}}.engine.lncldapi.com");
// 配置 SDK 推送
AVOSCloud.setServer(AVOSService.PUSH, "https://{{APPID 前八位}}.push.lncldapi.com");
// 配置 SDK 即时通讯
AVOSCloud.setServer(AVOSService.RTM, "https://{{APPID 前八位}}.rtm.lncldapi.com");
// 初始化
AVOSCloud.initialize(this,APP_ID,APP_KEY);

.NET SDK

// 配置存储和云引擎
AVClient.Initialize(new AVClient.Configuration {
                ApplicationId = appId,
                ApplicationKey = appKey,
                ApiServer = new Uri("https://{{APPID 前八位}}.api.lncldapi.com"),
                EngineServer = new Uri("https://{{APPID 前八位}}.engine.lncldapi.com")
            });
// 通过 RTM Router 配置即时通讯
var realtime = new AVRealtime(new AVRealtime.Configuration
           {
                ApplicationId = "app-id",
                ApplicationKey = "app-key",
                RTMRouter = new Uri("https://{{APPID 前八位}}.rtm.lncldapi.com")
           });

多人在线对战,v0.5.0-alpha.0 及之后的版本

var client = new Client(appId, appKey, userId, playServer: "https://{{APPID 前八位}}.play.lncldapi.com/1/multiplayer/router");
await client.Connect();

美国节点

美国节点的大部分服务不受此次事件的影响。

云引擎命令行工具

  1. 升级命令行工具到最新版 0.20.1

  2. 根据具体的环境,执行下列命令:

Shell 环境

export LEANCLOUD_DASHBOARD=https://us.avoscloud.com
export LEANCLOUD_API_SERVER=https://us.avoscloud.com

Windows 环境

set LEANCLOUD_DASHBOARD=https://us.avoscloud.com
set LEANCLOUD_API_SERVER=https://us.avoscloud.com
  1. 使用 lean login 重新登录

在 Shell 中执行 export LEANCLOUD_DASHBOARD=; export LEANCLOUD_API_SERVER= 后再运行命令行工具(需要用 lean login 重新登录)

JavaScript

即时通讯 SDK

const appId = 'YOUR_APP_ID';
new Realtime({
  // appId, appKey,
  server: {
    api: 'APPID 前八位.api.lncldglobal.com',
    RTMRouter: 'APPID 前八位.rtm.lncldglobal.com',
  },
};

多人在线对战 SDK

new Client({
      appId: '',
      appKey: '',
      userId: 'tar1',
      playServer: 'https://{{APPID 前八位}}.play.lncldglobal.com/1/multiplayer/router',
});

如果在小程序中使用,还需要将 APPID 前八位.api.lncldglobal.comAPPID 前八位.rtm.lncldglobal.comAPPID 前八位.play.lncldglobal.com 添加到域名白名单列表中。

iOS SDK

Objective-C SDK

// 配置 SDK 储存
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.api.lncldglobal.com" forServiceModule:AVServiceModuleAPI];
// 配置 SDK 推送
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.push.lncldglobal.com" forServiceModule:AVServiceModulePush];
// 配置 SDK 云引擎
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.engine.lncldglobal.com" forServiceModule:AVServiceModuleEngine];
// 配置 SDK 即时通讯
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.rtm.lncldglobal.com" forServiceModule:AVServiceModuleRTM];
// 配置 SDK 统计
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.stats.lncldglobal.com" forServiceModule:AVServiceModuleStatistics];
// 初始化
[AVOSCloud setApplicationId:APP_ID clientKey:APP_KEY];

Swift SDK 升级到最新版即可。

Android SDK

// 配置 SDK 储存
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.API, "https://{{APPID 前八位}}.api.lncldglobal.com");
// 配置 SDK 云引擎
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.ENGINE, "https://{{APPID 前八位}}.engine.lncldglobal.com");
// 配置 SDK 推送
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.PUSH, "https://{{APPID 前八位}}.push.lncldglobal.com");
// 配置 SDK 即时通讯
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.RTM, "https://{{APPID 前八位}}.rtm.lncldglobal.com");
// 初始化
AVOSCloud.initialize(this,APP_ID,APP_KEY);

Java Unified SDK

import cn.leancloud.core.AVOSService;

// 配置 SDK 储存
AVOSCloud.setServer(AVOSService.API, "https://{{APPID 前八位}}.api.lncldglobal.com");
// 配置 SDK 云引擎
AVOSCloud.setServer(AVOSService.ENGINE, "https://{{APPID 前八位}}.engine.lncldglobal.com");
// 配置 SDK 推送
AVOSCloud.setServer(AVOSService.PUSH, "https://{{APPID 前八位}}.push.lncldglobal.com");
// 配置 SDK 即时通讯
AVOSCloud.setServer(AVOSService.RTM, "https://{{APPID 前八位}}.rtm.lncldglobal.com");
// 初始化
AVOSCloud.initialize(this,APP_ID,APP_KEY);

.Net 即时通讯 SDK

// 配置存储和云引擎
AVClient.Initialize(new AVClient.Configuration {
                ApplicationId = appId,
                ApplicationKey = appKey,
                ApiServer = new Uri("https://{{APPID 前八位}}.api.lncldglobal.com"),
                EngineServer = new Uri("https://{{APPID 前八位}}.engine.lncldglobal.com")
            });
// 通过 RTM Router 配置即时通讯
var realtime = new AVRealtime(new AVRealtime.Configuration
           {
                ApplicationId = "app-id",
                ApplicationKey = "app-key",
                RTMRouter = new Uri("https://{{APPID 前八位}}.rtm.lncldglobal.com")
           });

多人在线对战,v0.5.0-alpha.0 及之后的版本

var client = new Client(appId, appKey, userId, playServer: "https://{{APPID 前八位}}.play.lncldglobal.com/1/multiplayer/router");
await client.Connect();

评论

Loading comments ...