---
url: 'https://dxpr.com/zh-hans/hc/documentation/learn-dxpr-builder/getting-started/behind-a-firewall'
title: '防火墙与数据驻留 | DXPR'
author:
  name: Jurriaan
  url: 'https://dxpr.com/users/jurriaan'
date: '2026-10-24T13:49:54+00:00'
updated: '2026-10-24T17:19:22+00:00'
copyright: 'Copyright DXPR. All rights reserved.'
type: article
summary: 'DXPR Builder 把您的页面存放在您自己的 Drupal 数据库中。它为许可证检查、编辑器资源和 AI 请求联系 DXPR 服务。本页列出每个连接、各自传输内容、DXAI Kavya 模型运行位置、产品密钥存储方式，以及出站访问受限时什么可用。'
tags:
  - 'Meet compliance requirements'
image: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
published: true
og:
  site_name: DXPR
  updated_time: '2026-10-24T17:19:22+0000'
  'image:alt': 'DXPR, powered by Drupal: AI-powered Drupal for marketers.'
schema:
  '@context': 'https://schema.org'
  '@graph':
    -
      mainEntity: {  }
    -
      '@type': TechArticle
      headline: 防火墙与数据驻留
      description: 'DXPR Builder 把您的页面存放在您自己的 Drupal 数据库中。它为许可证检查、编辑器资源和 AI 请求联系 DXPR 服务。本页列出每个连接、各自传输内容、DXAI Kavya 模型运行位置、产品密钥存储方式，以及出站访问受限时什么可用。'
      image:
        '@type': ImageObject
        url: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
        width: '1200'
        height: '630'
      datePublished: '2026-10-24T13:49:54+0000'
      dateModified: '2026-10-24T17:19:22+0000'
      author:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
        url: 'https://dxpr.com/'
        logo:
          '@type': ImageObject
          url: 'https://dxpr.com/themes/custom/dxpr_com/dxpr-logo-dark.svg'
          width: '1348'
          height: '501'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
        url: 'https://dxpr.com/'
        logo:
          '@type': ImageObject
          url: 'https://dxpr.com/themes/custom/dxpr_com/dxpr-logo-dark.svg'
          width: '1348'
          height: '501'
      mainEntityOfPage: 'https://dxpr.com/zh-hans/hc/documentation/learn-dxpr-builder/getting-started/behind-a-firewall'
      articleSection: 满足合规要求
    -
      '@type': WebPage
      '@id': 'https://dxpr.com/zh-hans/hc/documentation/learn-dxpr-builder/getting-started/behind-a-firewall'
      description: 'DXPR Builder 把您的页面存放在您自己的 Drupal 数据库中。它为许可证检查、编辑器资源和 AI 请求联系 DXPR 服务。本页列出每个连接、各自传输内容、DXAI Kavya 模型运行位置、产品密钥存储方式，以及出站访问受限时什么可用。'
      breadcrumb:
        '@type': BreadcrumbList
        itemListElement:
          -
            '@type': ListItem
            position: 1
            name: 首页
            item: 'https://dxpr.com/zh-hans'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
      inLanguage: zh-hans
---
[帮助中心](/zh-hans/node/75)/[文档](/zh-hans/hc/documentation) /[学习 DXPR Builder](/zh-hans/hc/documentation/learn-dxpr-builder) /[管理网站](/zh-hans/hc/documentation/learn-dxpr-builder/manage) /[满足合规要求](/zh-hans/hc/documentation/learn-dxpr-builder/manage/compliance) # 防火墙与数据驻留.

 学习 DXPR Builder管理网站满足合规要求

   ## 本指南内容

 相关指南

- [在 Drupal 站点安装 DXPR Builder](/zh-hans/hc/documentation/learn-dxpr-builder/getting-started/installation)
- [安全](/zh-hans/hc/documentation/learn-dxpr-builder/advanced/security)
- [许可和产品密钥错误](/zh-hans/hc/documentation/learn-dxpr-builder/troubleshooting/licence-and-product-key)

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` 配置代理：

```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。

## What's next?

- [安装](/zh-hans/hc/documentation/learn-dxpr-builder/getting-started/installation)：配置产品密钥和存储方式
- [AI 功能](/hc/documentation/learn-dxpr-builder/ai)：启用 AI 并选择模型
- [安全](/zh-hans/hc/documentation/learn-dxpr-builder/advanced/security)：权限和输出过滤
- [许可证和产品密钥](/zh-hans/hc/documentation/learn-dxpr-builder/troubleshooting/licence-and-product-key)：许可证报错排查