如果您希望在生产环境中通过固定域名访问云沙箱,或者希望使用自有证书访问沙箱中的 Web 服务,可以为云沙箱绑定自定义域名。
绑定自定义域名后,您可以使用:
-
控制链路域名:访问云沙箱 API,例如
https://api.example.com。 -
数据链路域名:访问沙箱内服务,例如
https://{port}-{sandboxId}.example.com。
以 example.com 为例:
|
用途 |
示例 |
说明 |
|
控制链路域名 |
|
用于创建、查询、删除云沙箱等 API 请求。 |
|
数据链路域名 |
|
用于访问沙箱内指定端口的服务。 |
|
SDK |
|
SDK 访问云沙箱 API 的地址。 |
|
SDK |
|
SDK 拼接沙箱服务访问地址时使用的基础域名。 |
使用限制
-
为云沙箱绑定自定义域名时,必须选择云沙箱所在的地域。
-
当前控制链路域名仅支持
api.开头的单域名,例如api.example.com。 -
数据链路域名为控制链路域名去掉
api.前缀后的泛域名,例如*.example.com。 -
必须使用 HTTPS 协议。
-
必须上传可覆盖数据链路泛域名的证书,例如
*.example.com。仅覆盖api.example.com的单域名证书不满足要求。 -
私钥必须为未加密的 RSA PEM 格式。如果您的私钥是
-----BEGIN PRIVATE KEY-----格式,可先转换为-----BEGIN RSA PRIVATE KEY-----格式。 -
不支持中文域名。
-
同一个主账号默认最多可绑定 5 个云沙箱自定义域名。如需提高上限,请联系服务支持人员。
-
自定义域名需要完成备案或接入备案,具体要求以控制台校验结果为准。
私钥格式转换示例:
openssl rsa -in pkcs8.key -out pkcs1.key
1. 添加自定义域名
-
登录函数计算云沙箱控制台。
-
在左侧导航栏选择 。
-
选择云沙箱所在地域。
-
单击 添加自定义域名。
-
在 添加自定义域名 页面填写控制链路域名,例如
api.example.com。 -
按页面提示获取控制链路 CNAME 和数据链路 CNAME,用于下一步配置域名解析。
重要:自定义域名必须选择与云沙箱相同的地域,否则域名解析和证书校验可能无法生效。
2. 配置域名解析
登录云解析 DNS 控制台,将自定义域名解析到云沙箱提供的 CNAME。
|
CNAME 类型 |
主机记录 |
记录类型 |
记录值示例 |
|
控制链路 CNAME |
|
CNAME |
|
|
数据链路 CNAME |
|
CNAME |
|
示例:如果您的主账号 ID 为 119085698835****,云沙箱所在地域为华北 2(北京),数据链路 CNAME 可配置为:
119085698835****.cn-beijing.e2b.fc.aliyuncs.com
配置完成后,建议等待 DNS 生效再提交或验证。您可以使用以下命令检查解析结果:
dig +short CNAME api.example.com
dig +short CNAME test.example.com
其中 test.example.com 用于验证 *.example.com 泛域名解析是否生效。
3. 配置 HTTPS 证书
云沙箱自定义域名强制使用 HTTPS。请在添加域名时上传证书和私钥。
|
配置项 |
说明 |
|
证书名称 |
用于标识本次上传的证书。 |
|
PEM 证书内容 |
填写完整证书链,需包含 |
|
PEM 证书密钥 |
填写未加密的 RSA 私钥,需包含 |
|
TLS 协议版本 |
建议选择 TLS 1.2 或更高版本。 |
证书要求:
-
证书必须在有效期内。
-
证书和私钥必须匹配。
-
证书必须覆盖数据链路泛域名。例如控制链路域名为
api.example.com时,证书应覆盖*.example.com。
4. 在 SDK 中使用自定义域名
域名添加成功后,将 SDK 中的 API 地址和数据链路基础域名替换为您绑定的自定义域名。
TypeScript 示例:
import { Sandbox } from "e2b";
const sandbox = await Sandbox.create("code-interpreter-v1", {
apiKey: process.env.E2B_API_KEY,
apiUrl: "https://api.example.com",
domain: "example.com",
});
const host = sandbox.getHost(8000);
console.log(`https://${host}`);
Python 示例:
from e2b import Sandbox
sandbox = Sandbox.create(
template="code-interpreter-v1",
api_key=os.environ["E2B_API_KEY"],
api_url="https://api.example.com",
domain="example.com",
)
host = sandbox.get_host(8000)
print(f"https://{host}")
如果沙箱 ID 为 sandbox-id,访问端口为 8000,SDK 返回的访问地址形如:
https://8000-sandbox-id.example.com
5. 验证自定义域名
完成配置后,可按以下步骤验证:
-
使用 SDK 或 OpenAPI 创建一个云沙箱。
-
在沙箱中启动一个 HTTP 服务,例如监听
8000端口。 -
调用
sandbox.getHost(8000)获取访问域名。 -
使用浏览器或
curl访问https://{port}-{sandboxId}.example.com。
示例:
curl -v https://8000-sandbox-id.example.com
如果返回沙箱内服务响应,说明数据链路域名已生效。
常见问题
|
问题 |
可能原因 |
处理方式 |
|
添加域名时提示 CNAME 校验失败 |
DNS 未配置、记录值错误,或解析尚未生效 |
检查控制链路 CNAME 是否指向控制台提示的目标地址,等待 DNS 生效后重试。 |
|
HTTPS 访问时证书不匹配 |
证书未覆盖数据链路泛域名 |
上传覆盖 |
|
提示私钥格式错误 |
私钥不是未加密 RSA PEM 格式 |
使用 |
|
SDK 仍返回默认访问域名 |
SDK 未配置 |
将 |
|
数据链路地址无法访问 |
泛域名 CNAME 未生效,或沙箱内服务未监听对应端口 |
检查 |
|
达到域名数量上限 |
当前主账号已绑定多个自定义域名 |
删除不再使用的域名,或联系服务支持人员提高上限。 |
注意事项
-
sandbox.getHost(port)返回的是 host,访问时通常需要拼接https://。 -
自定义域名适合生产或长期访问场景;临时调试也可以继续使用云沙箱默认访问域名。
-
不要在未鉴权的端口服务中暴露敏感数据、内部调试接口或长期有效凭证。