我们监测到从今天(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 走的是内网),但是命令行工具部署代码可能有问题,需要进行如下配置后才能正常使用:
0) 升级命令行工具到最新版 0.20.1
1) 根据具体的环境,执行下列命令:
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
2) 使用 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.net
和 api.leancloud.cn
这两项记录。
这两项记录的 IP 值通过在命令行 dig avoscloud.com
获取(在 ANSWER SECTION
部分查看结果),
dig
命令可能返回多个 IP,任选其一即可。
如果需要访问云函数,还需加上 {{appid 前八位}}.engine.lncld.net
这条记录,IP 值同样通过 dig avoscloud.com
获取。
注意,如果需要在本地调试服务端应用,那么本地机器的 hosts 文件同样需要修改(不同操作系统的 hosts 文件路径不同,请自行搜索相关方法)。
REST API
注意:
- 在云引擎内访问 REST API,同样走的是内网,不受影响,无需修改代码。
- 服务端访问 REST API 的话,请优先尝试上面提到的修改
/etc/hosts
的方法,不用修改代码。
客户端访问 REST API,需要在代码中将 api.leancloud.cn
或 {{appid 前八位}}.api.lncld.net
域名替换为 avoscloud.com
。
客户端通过 REST API 访问云函数,需要将 {{appid 前八位}}.engine.lncld.net
替换为 avoscloud.com
。
SDK
注意:
- 云引擎 SDK 不受影响,无需修改代码。
- 服务端 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
的方法,不用修改代码。
华东节点
华东节点的大部分服务不受此次事件的影响。
云引擎命令行工具
0) 升级命令行工具到最新版 0.20.1
1) 根据具体的环境,执行下列命令:
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
2) 使用 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.com
,APPID 前八位.rtm.lncldapi.com
,APPID 前八位.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();
美国节点
美国节点的大部分服务不受此次事件的影响。
云引擎命令行工具
0) 升级命令行工具到最新版 0.20.1
1) 根据具体的环境,执行下列命令:
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
2) 使用 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.com
,APPID 前八位.rtm.lncldglobal.com
,APPID 前八位.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();