防火墙与数据驻留.
DXPR Builder 把您的页面存放在您自己的 Drupal 数据库中。它为许可证检查、编辑器资源和 AI 请求联系 DXPR 服务。本页列出每个连接、各自传输内容、DXAI Kavya 模型运行位置、产品密钥存储方式,以及出站访问受限时什么可用。
连接一览
| 主机 | 发起方 | 用途 | 必需于 |
|---|---|---|---|
dxpr.com |
Drupal 服务器 | 许可证状态、域名检查、授权用户同步 | 编辑 |
cdn2.dxpr.com |
编辑器浏览器 | 编辑器 JavaScript 和 CSS(主) | 编辑 |
cdn.dxpr.com |
编辑器浏览器 | 编辑器 JavaScript 和 CSS(备用) | 编辑 |
kavya.dxpr.com |
Drupal 服务器 | AI 请求和 AI 积分余额 | AI 功能 |
html-extract.dxpr.com |
编辑器浏览器 | AI“从 URL 克隆” | AI 功能 |
r.jina.ai (third party) |
编辑器浏览器 | 读取提示中 URL 的网页 | AI 功能 |
tuur.dxpr.com |
编辑器浏览器 | 编辑器使用分析 | 可选 |
全部连接使用 443 端口 HTTPS。站点访客不从 DXPR 服务器加载任何东西:发布页由数据库中的 HTML 渲染,前端脚本(dxpr_builder/dxpr_frontend.min.js)随模块附带。app.dxpr.com 只出现在展示给管理员的链接中。
许可证检查(dxpr.com)
Drupal 服务器调用 src/Service/DxprBuilderLicenseServiceInterface.php 定义的四个端点,每个都以产品密钥为 Authorization: Bearer 头。
| 端点 | 何时 | 发送数据 |
|---|---|---|
GET /api/user-license |
已授权时每 24 小时,未授权时每 30 分钟 | gba 和 users_tier(有 edit with dxpr builder 权限的账户数及其档位)、values_count(使用构建器字段的内容项数)、site_base_url、site(站点哈希盐的 HMAC;盐本身不发送)、site_mail(来自 system.site)、project、version |
GET /api/domain-blacklist/{hostname} |
每小时 | 仅主机名;无授权头 |
POST /api/central-user-storage/{add,remove,sync} |
账户、权限或产品密钥变更时;后续在队列中随 cron 运行 | 主机名加每个有编辑权限账户的邮箱和角色名。无有效邮箱的账户跳过 |
GET /api/user-license/users |
打开 User Licenses 页面时 | 除密钥外无其他 |
页面内容从不是许可证请求的一部分。模块还在首页打印隐藏 <div>,含固定标记字符串、许可证档位、编辑数和保存数(dxpr_builder.module 中的 dxpr_builder_page_bottom())。可在页面源码中读到。
编辑器资源(cdn2.dxpr.com、cdn.dxpr.com)
当 Editor Assets 为 Cloud(默认)时,编辑器浏览器从 https://cdn2.dxpr.com/<version>/ 加载构建器 JavaScript 和 CSS,/health 探测失败后回退到 https://cdn.dxpr.com/<version>/。产品密钥以 jwt 查询参数追加到每个资源 URL(dxpr_builder_library_info_build())。CDN 校验该密钥:401 响应让 js/editor_validation.js 显示 "Your product key is not valid"。
当 Local (minified) 和 Local (unminified) 选项只在模块 dxpr_builder/ 目录有编辑器构建副本时出现在设置表单;即使选了 Cloud 也自动用该副本。git 仓库不跟踪这些构建文件,因此从 drupal.org 下载的版本从 CDN 加载编辑器。
AI 请求(kavya.dxpr.com)
浏览器从不联系 kavya.dxpr.com。编辑器发到您自己站点的路由(/dxpr_builder/ajax/ai/chat、/dxpr_builder/ajax/ai/image、/dxpr_builder/ajax/ai/image/edit;都需要 edit with dxpr builder 权限、CSRF 令牌和授权账户)。站点经 Drupal AI 模块的 DXPR 服务商(ai_provider_dxpr)中继每个请求到 https://kavya.dxpr.com/v1/chat/completions、/v1/images/generations 或 /v1/images/edits,以 Key 模块中的 DXPR API 密钥认证。服务商的 host 设置(ai_provider_dxpr.settings)可指向其他主机。另外,AI 设置页用产品密钥调用 GET https://kavya.dxpr.com/v1/account/balance 显示您的积分余额。
AI 请求包含什么
只有 AI 功能把页面内容发到站外,且只在编辑触发时(dxpr_builder/build/dxpr-global/ai-service.js)。
| 请求 | 发送内容 |
|---|---|
| 文本和页面生成 | 系统提示、编辑的提示、聊天记录 |
| 选中元素时 | 元素 outer HTML:500 字符及以下发整体,否则发首尾各 200 字符 |
| 页面级操作 | 现有页面 HTML,最多 50000 字符;整页替换时发完整页面 |
| 可选字段 | 模型名、启用的服务商顺序、预测的 HTML 结果、允许的标签和类、web_search 标志、响应格式 |
| 图像生成 | 提示词、尺寸、质量、背景 |
| 图像编辑 | 同上加源图像,base64 编码 |
两个便利功能从编辑器浏览器取网页(ai-service-url-fetch.js):提示中的 URL 先加 .md 请求,失败则经 https://r.jina.ai/<url>(DXPR 未运营的第三方阅读服务);要求克隆页面的提示把 URL 发到 https://html-extract.dxpr.com/?url=...。两种情况都只发送 URL。
返回途中过滤 AI 输出。允许的域名、阻止的标签和允许的标签在 /admin/dxpr_studio/dxpr_builder/ai_settings 的 AI Output Filtering 下设置。
DXAI Kavya 模型运行位置
DXPR Builder 提供三个模型(src/Constants/AiModelConstants.php):
| 模型 | API 名称 | 设置表单显示的描述 |
|---|---|---|
| DXAI Kavya M1 | kavya-m1 |
最佳性能(OpenAI、Google Gemini、Anthropic) |
| DXAI Kavya M1 EU | kavya-m1-eu |
隐私优先(MistralAI) |
| DXAI Kavya M1 Fast | kavya-m1-fast |
响应最快,质量较低 |
两个模块都没有区域设置。数据驻留由模型和启用的上游服务商决定:
kavya-m1在五个服务商之间故障转移,DXPR AI 服务商设置表单按国家列出:Anthropic(美国)、Google Gemini(美国)、MistralAI(法国)、OpenAI(美国)、XAI(美国)。Manual priority 模式下把服务商在 Enabled 和 Disabled 之间拖拽并排序。kavya-m1-eu只用 MistralAI。DXPR AI 服务商 README 称其 "keeps data within European boundaries (servers in Netherlands)";其文档称 Kavya 服务器在荷兰运行、德国备份,请求经法国 MistralAI 服务器,且从不回退到非欧盟服务商。这些位置由 DXPR 记录,Drupal 代码不强制。
安装 ai_provider_dxpr 后在 /admin/config/ai/providers/dxpr 选择模型,其 allowed_models 设置控制编辑可选的模型。未安装则在 /admin/dxpr_studio/dxpr_builder/ai_settings 设置模型和服务商顺序。
产品密钥如何存储
设置页的 License 分区(/admin/dxpr_studio/dxpr_builder/settings)提供两种 Storage method(src/Form/DxprBuilderSettingsForm.php、src/Service/DxprBuilderKeyService.php):
- Key module:从 Key 下选择的 Key 实体读取密钥。
dxpr_builder_update_9020()把dxpr_builder.settings中的密钥移入 Key 实体dxpr_builder_jwt,其 Configuration 提供者仍导出它。只有 File 或 Environment 提供者让密钥不进入配置导出。 - Configuration storage:密钥以明文存为
dxpr_builder.settings.json_web_token,包含在配置导出中。
产品密钥是认证许可证调用、积分余额调用和 CDN 资源 URL 的 JSON Web Token;请作凭据保管。
防火墙配置
| 来自 | 允许出站 HTTPS 到 | 备注 |
|---|---|---|
| Drupal 服务器 | dxpr.com |
许可证 |
| Drupal 服务器 | kavya.dxpr.com |
仅 AI |
| 编辑工作站 | cdn2.dxpr.com, cdn.dxpr.com |
编辑器资源 |
| 编辑工作站 | html-extract.dxpr.com, r.jina.ai |
仅 AI;阻止只禁用 URL 研究和克隆 |
| 编辑工作站 | tuur.dxpr.com |
分析;阻止不影响编辑 |
分析(dxpr_builder/build/dxpr-analytics/、PostHog)以编辑邮箱和站点主机名标识事件。用 drush config:set dxpr_builder.settings record_analytics 0 关闭;该键无表单字段。从 dxpr_builder.settings 读取的另两个无表单字段键:cloud_url 替换 CDN 基 URL(VERSION 替换为模块版本),license_endpoint 替换中央用户存储端点。用 settings.php 中的配置覆盖设置它们。
代理配置
许可证和 AI 调用使用 Drupal HTTP 客户端,因此在 settings.php 配置代理:
$settings['http_client_config']['proxy'] = [
'http' => 'http://proxy.example.com:8080',
'https' => 'http://proxy.example.com:8080',
'no' => ['localhost', '127.0.0.1'],
];
编辑器浏览器直接加载 CDN 资源并调用分析和阅读服务,因此这些请求走工作站的代理设置。
隔离与本地部署
DXPR Builder 运行在您自己的服务器上;内容不经过托管组件。服务器和编辑都连不上 DXPR 时:
| 能力 | 无任何 DXPR 访问时 |
|---|---|
| 发布页服务 | 可用;不从 DXPR 加载任何东西 |
| 内容存储 | 可用;页面是数据库中的字段值 |
| 加载编辑器 | 无本地构建则失败,见 dxpr_builder/ |
| 许可证验证 | 失败。模块记录错误,向管理员显示 "We are having trouble connecting to the DXPR servers",每 30 分钟重试。配置产品密钥期间编辑不受阻止 |
| User Licenses 页面 | 空白;它需要 dxpr.com |
| AI 功能 | 不可用;每个请求都经 kavya.dxpr.com |
| 分析、URL 研究、从 URL 克隆 | 静默跳过 |
完全没有产品密钥时,模块在代码中应用免费版限制:一位编辑和 100 个内容项。
全本地部署因此可用于内容服务和存储;编辑需要 CDN 访问或编辑器本地构建,许可证验证需要 dxpr.com。需要内部托管的编辑器构建请联系 DXPR。