---
url: 'https://dxpr.com/nl/hc/documentatie/dxpr-builder-leren/aan-de-slag/achter-een-firewall'
title: 'Firewall en dataresidentie | DXPR'
author:
  name: Jurriaan
  url: 'https://dxpr.com/users/jurriaan'
date: '2023-11-06T05:34:28+00:00'
updated: '2026-10-24T17:19:22+00:00'
copyright: 'Copyright DXPR. All rights reserved.'
type: article
summary: "DXPR Builder slaat je pagina's op in je eigen Drupal-database. Hij neemt contact op met DXPR-diensten voor licentiechecks, editorbestanden en AI-verzoeken. Deze pagina somt elke verbinding op, wat elk vervoert, waar de DXAI Kavya-modellen draaien, hoe de productsleutel wordt bewaard, en wat werkt als uitgaande toegang is beperkt."
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: 'Firewall en dataresidentie'
      description: "DXPR Builder slaat je pagina's op in je eigen Drupal-database. Hij neemt contact op met DXPR-diensten voor licentiechecks, editorbestanden en AI-verzoeken. Deze pagina somt elke verbinding op, wat elk vervoert, waar de DXAI Kavya-modellen draaien, hoe de productsleutel wordt bewaard, en wat werkt als uitgaande toegang is beperkt."
      image:
        '@type': ImageObject
        url: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
        width: '1200'
        height: '630'
      datePublished: '2023-11-06T05:34:28+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/nl/hc/documentatie/dxpr-builder-leren/aan-de-slag/achter-een-firewall'
      articleSection: 'Voldoen aan compliance-eisen'
    -
      '@type': WebPage
      '@id': 'https://dxpr.com/nl/hc/documentatie/dxpr-builder-leren/aan-de-slag/achter-een-firewall'
      description: "DXPR Builder slaat je pagina's op in je eigen Drupal-database. Hij neemt contact op met DXPR-diensten voor licentiechecks, editorbestanden en AI-verzoeken. Deze pagina somt elke verbinding op, wat elk vervoert, waar de DXAI Kavya-modellen draaien, hoe de productsleutel wordt bewaard, en wat werkt als uitgaande toegang is beperkt."
      breadcrumb:
        '@type': BreadcrumbList
        itemListElement:
          -
            '@type': ListItem
            position: 1
            name: Home
            item: 'https://dxpr.com/nl'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
      inLanguage: nl
---
[Helpcentrum](/nl/hc)/[Documentatie](/nl/hc/documentatie) /[DXPR Builder leren](/nl/hc/documentation/learn-dxpr-builder) /[De site beheren](/nl/hc/documentation/learn-dxpr-builder/manage) /[Voldoen aan compliance-eisen](/nl/hc/documentation/learn-dxpr-builder/manage/compliance) # Firewall en dataresidentie.

 DXPR Builder lerenDe site beherenVoldoen aan compliance-eisen

   ## In deze gids

 Gerelateerde gidsen

- [DXPR Builder installeren op je Drupal-site](/nl/hc/documentatie/dxpr-builder-leren/aan-de-slag/installatie)
- [Beveiliging](/nl/hc/documentatie/dxpr-builder-leren/geavanceerd/beveiliging)
- [Licentie- en productsleutelfouten](/nl/hc/documentatie/dxpr-builder-leren/probleemoplossing/licentie-en-productsleutel)

DXPR Builder slaat je pagina's op in je eigen Drupal-database. Hij neemt contact op met DXPR-diensten voor licentiechecks, editorbestanden en AI-verzoeken. Deze pagina somt elke verbinding op, wat elk vervoert, waar de DXAI Kavya-modellen draaien, hoe de productsleutel wordt bewaard, en wat werkt als uitgaande toegang is beperkt.

## Verbindingen in één oogopslag

| Host | Tot stand gebracht door | Doel | Nodig voor |
|---|---|---|---|
| `dxpr.com` | Drupal-server | Licentiestatus, domeincheck, synchronisatie van gelicentieerde gebruikers | Bewerken |
| `cdn2.dxpr.com` | Browser van de editor | JavaScript en CSS van de editor (primair) | Bewerken |
| `cdn.dxpr.com` | Browser van de editor | JavaScript en CSS van de editor (reserve) | Bewerken |
| `kavya.dxpr.com` | Drupal-server | AI-verzoeken en AI-creditsaldo | AI-functies |
| `html-extract.dxpr.com` | Browser van de editor | AI “klonen vanaf URL” | AI-functies |
| `r.jina.ai` (derde partij) | Browser van de editor | Leest webpagina's waarvan de URL in een prompt staat | AI-functies |
| `tuur.dxpr.com` | Browser van de editor | Gebruiksanalyse van de editor | Optioneel |

Alle verbindingen gebruiken HTTPS op poort 443. Bezoekers van de site laden nooit iets van DXPR-servers: gepubliceerde pagina's worden gerenderd uit HTML opgeslagen in de database, en het frontend-script (`dxpr_builder/dxpr_frontend.min.js`) zit in de module. `app.dxpr.com` verschijnt alleen in links getoond aan beheerders.

## Licentiechecks (`dxpr.com`)

De Drupal-server roept vier endpoints aan gedefinieerd in `src/Service/DxprBuilderLicenseServiceInterface.php`, elk met de productsleutel als een `Authorization: Bearer`-header.

| Endpoint | Wanneer | Verzonden gegevens |
|---|---|---|
| `GET /api/user-license` | Elke 24 uur als geautoriseerd, elke 30 minuten als dat niet zo is | `gba` en `users_tier` (aantal accounts met de toestemming `edit with dxpr builder` en de laag waarin het valt), `values_count` (inhoudsitems met een builderveld), `site_base_url`, `site` (een HMAC van de hash salt van de site; de salt zelf wordt niet verzonden), `site_mail` (uit `system.site`), `project`, `version` |
| `GET /api/domain-blacklist/{hostname}` | Elk uur | Alleen de hostnaam; geen autorisatieheader |
| `POST /api/central-user-storage/{add,remove,sync}` | Als accounts, toestemmingen of de productsleutel wijzigen; vervolgacties worden in de wachtrij gezet en draaien op cron | Hostnaam plus, voor elk account met de bewerkingstoestemming, zijn e-mailadres en rolnamen. Accounts zonder geldig e-mailadres worden overgeslagen |
| `GET /api/user-license/users` | Als de pagina Gebruikerslicenties wordt geopend | Niets behalve de sleutel |

Paginainhoud zit nooit in een licentieverzoek. De module print ook een verborgen `<div>` op de voorpagina met een vaste markeerstring, de licentielaag, het aantal editors en het aantal keer opslaan (`dxpr_builder_page_bottom()` in `dxpr_builder.module`). Hij is leesbaar in de paginabron.

## Editorbestanden (`cdn2.dxpr.com`, `cdn.dxpr.com`)

Als **Editorbestanden** op **Cloud** staat (de standaard), laadt de browser van de editor de builder-JavaScript en CSS van `https://cdn2.dxpr.com/<version>/`, met een terugval op `https://cdn.dxpr.com/<version>/` na een mislukte `/health`-probe. De productsleutel wordt aan elke bestands-URL gehangen als een `jwt`-queryparameter (`dxpr_builder_library_info_build()`). Het CDN controleert die sleutel: een 401-reactie laat `js/editor_validation.js` “Your product key is not valid” tonen.

De **Local (minified)** en **Local (unminified)** verschijnen alleen op het instellingenformulier als er een gebouwde kopie van de editor in de map `dxpr_builder/` van de module staat, en zo'n kopie wordt automatisch gebruikt ook als Cloud is geselecteerd. Het git-repository volgt deze gebouwde bestanden niet, dus een release gedownload van drupal.org laadt de editor van het CDN.

## AI-verzoeken (`kavya.dxpr.com`)

De browser neemt nooit contact op met `kavya.dxpr.com`. De editor post naar routes op je eigen site (`/dxpr_builder/ajax/ai/chat`, `/dxpr_builder/ajax/ai/image`, `/dxpr_builder/ajax/ai/image/edit`; alle vereisen de toestemming `edit with dxpr builder`, een CSRF-token en een gelicentieerd account). De site geeft elk verzoek door via de DXPR-provider van de Drupal AI-module (`ai_provider_dxpr`) naar `https://kavya.dxpr.com/v1/chat/completions`, `/v1/images/generations` of `/v1/images/edits`, geauthenticeerd met de DXPR API-sleutel bewaard in de Key-module. De `host`-instelling van de provider (`ai_provider_dxpr.settings`) kan verzoeken naar een andere host wijzen. Apart roept de AI-instellingenpagina `GET https://kavya.dxpr.com/v1/account/balance` aan met de productsleutel om je creditsaldo te tonen.

### Wat een AI-verzoek bevat

Alleen AI-functies sturen paginainhoud de site af, en alleen als een editor ze activeert (`dxpr_builder/build/dxpr-global/ai-service.js`).

| Verzoek | Verzonden inhoud |
|---|---|
| Tekst- en paginageneratie | Systeemprompt, de prompt van de editor, chatgeschiedenis |
| Met een element geselecteerd | De buitenste HTML van het element: geheel als het 500 tekens of minder is, anders zijn eerste en laatste 200 tekens |
| Bewerkingen op paginaniveau | De bestaande pagina-HTML, tot 50.000 tekens; de volledige pagina als de hele pagina wordt vervangen |
| Optionele velden | Modelnaam, ingeschakelde provider-volgorde, een voorspeld HTML-resultaat, toegestane tags en klassen, een `web_search`-vlag, een reactiformaat |
| Afbeeldingsgeneratie | Prompt, grootte, kwaliteit, achtergrond |
| Afbeeldingsbewerking | Hetzelfde plus de bronafbeelding, base64-gecodeerd |

Twee gemakken halen webpagina's op uit de browser van de editor (`ai-service-url-fetch.js`): een URL in een prompt wordt opgevraagd met `.md` erachter en, als dat mislukt, via `https://r.jina.ai/<url>`, een lezersdienst van een derde partij die niet door DXPR wordt beheerd; een prompt die vraagt een pagina te klonen stuurt de URL naar `https://html-extract.dxpr.com/?url=...`. In beide gevallen wordt alleen de URL verzonden.

AI-uitvoer wordt op de terugweg gefilterd. Toegestane domeinen, geblokkeerde tags en toegestane tags worden ingesteld op `/admin/dxpr_studio/dxpr_builder/ai_settings` onder **AI Output Filtering**.

## Waar de DXAI Kavya-modellen draaien

DXPR Builder biedt drie modellen (`src/Constants/AiModelConstants.php`):

| Model | API-naam | Beschrijving in het instellingenformulier |
|---|---|---|
| DXAI Kavya M1 | `kavya-m1` | Beste prestaties (OpenAI, Google Gemini, Anthropic) |
| DXAI Kavya M1 EU | `kavya-m1-eu` | Privacygericht (MistralAI) |
| DXAI Kavya M1 Fast | `kavya-m1-fast` | Snelste reacties, lagere kwaliteit |

Er is in geen van beide modules een regio-instelling. Dataresidentie wordt gekozen per model en per welke upstream-providers je inschakelt:

- `kavya-m1` valt terug over vijf providers, opgesomd met hun land in het instellingenformulier van de DXPR AI-provider: Anthropic (Verenigde Staten), Google Gemini (Verenigde Staten), MistralAI (Frankrijk), OpenAI (Verenigde Staten), XAI (Verenigde Staten). In de modus **Handmatige prioriteit** sleep je providers tussen **Ingeschakeld** en **Uitgeschakeld** en stel je hun volgorde in.
- `kavya-m1-eu` gebruikt alleen MistralAI. De README van de DXPR AI-provider stelt dat het “data binnen Europese grenzen houdt (servers in Nederland)”; zijn documentatie stelt dat de Kavya-server in Nederland draait met een backup in Duitsland, dat verzoeken via MistralAI-servers in Frankrijk gaan, en dat hij nooit terugvalt op een niet-EU-provider. Deze locaties zijn gedocumenteerd door DXPR, niet afgedwongen door iets in de Drupal-code.

Met `ai_provider_dxpr` geïnstalleerd wordt het model gekozen op `/admin/config/ai/providers/dxpr`, en zijn `allowed_models`-instelling bepaalt welke modellen editors mogen kiezen. Zonder dat worden model- en providervolgorde ingesteld op `/admin/dxpr_studio/dxpr_builder/ai_settings`.

## Hoe de productsleutel wordt bewaard

De sectie **Licentie** van `/admin/dxpr_studio/dxpr_builder/settings` biedt twee opties voor **Opslagmethode** (`src/Form/DxprBuilderSettingsForm.php`, `src/Service/DxprBuilderKeyService.php`):

- **Key-module**: de sleutel wordt gelezen uit de Key-entiteit gekozen onder **Sleutel**. `dxpr_builder_update_9020()` verplaatst een sleutel gevonden in `dxpr_builder.settings` naar de Key-entiteit `dxpr_builder_jwt`, waarvan de **Instellingen**-provider hem nog steeds exporteert. Alleen de provider **Bestand** of **Omgeving** houdt de sleutel uit configuratie-exports.
- **Instellingenopslag**: de sleutel wordt als platte tekst bewaard als `dxpr_builder.settings.json_web_token` en zit in configuratie-exports.

De productsleutel is een JSON Web Token dat licentieaanroepen, de creditsaldo-aanroep en de CDN-bestands-URL's authenticeert; behandel hem als een inloggegeven.

## Firewallconfiguratie

| Van | Uitgaande HTTPS toestaan naar | Opmerkingen |
|---|---|---|
| Drupal-server | `dxpr.com` | Licentie |
| Drupal-server | `kavya.dxpr.com` | Alleen AI |
| Werkstations van editors | `cdn2.dxpr.com`, `cdn.dxpr.com` | Editorbestanden |
| Werkstations van editors | `html-extract.dxpr.com`, `r.jina.ai` | Alleen AI; blokkeren schakelt alleen URL-onderzoek en klonen uit |
| Werkstations van editors | `tuur.dxpr.com` | Analyse; blokkeren heeft geen effect op bewerken |

Analyse (`dxpr_builder/build/dxpr-analytics/`, PostHog) herkent gebeurtenissen aan het e-mailadres van de editor en de hostnaam van de site. Zet ze uit met `drush config:set dxpr_builder.settings record_analytics 0`; de sleutel heeft geen formulierveld. Twee verdere sleutels zonder formulierveld worden gelezen uit `dxpr_builder.settings`: `cloud_url` vervangt de CDN-basis-URL (`VERSION` wordt vervangen door de moduleversie) en `license_endpoint` vervangt het centrale gebruikersopslag-endpoint. Stel ze in met een configuratieoverschrijving in `settings.php`.

## Proxyconfiguratie

Licentie- en AI-aanroepen gebruiken de HTTP-client van Drupal, dus een proxy wordt geconfigureerd in `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'],
];

```

Browsers van editors laden de CDN-bestanden en roepen de analyse- en lezersdiensten direct aan, dus die verzoeken volgen de proxy-instellingen van het werkstation.

## Air-gapped en on-premise implementaties

DXPR Builder draait op je eigen server; geen inhoud gaat via een gehost onderdeel. Als noch de server noch de editors DXPR kunnen bereiken:

| Mogelijkheid | Zonder enige DXPR-toegang |
|---|---|
| Gepubliceerde pagina's serveren | Werkt; er wordt niets van DXPR geladen |
| Inhoudsopslag | Werkt; pagina's zijn veldwaarden in je database |
| De editor laden | Mislukt zonder lokale editorbuild in `dxpr_builder/` |
| Licentievalidatie | Mislukt. De module logt de fout, toont “We are having trouble connecting to the DXPR servers” aan beheerders en probeert elke 30 minuten opnieuw. Bewerken wordt niet geblokkeerd zolang er een productsleutel is geconfigureerd |
| Pagina Gebruikerslicenties | Leeg; vereist `dxpr.com` |
| AI-functies | Niet beschikbaar; elk verzoek gaat via `kavya.dxpr.com` |
| Analyse, URL-onderzoek, klonen vanaf URL | Worden stilzwijgend overgeslagen |

Zonder productsleutel past de module de gratis-laaglimieten toe in code: één editor en 100 inhoudsitems.

Een volledig on-premise implementatie werkt dus voor serveren en opslaan van inhoud; bewerken heeft CDN-toegang of een lokale editorbuild nodig, en licentievalidatie heeft `dxpr.com` nodig. Neem contact op met DXPR als je een editorbuild nodig hebt om intern te hosten.

## Wat nu?

- [Installatie](/nl/hc/documentation/learn-dxpr-builder/getting-started/installation): configureer de productsleutel en opslagmethode
- [AI-functies](/hc/documentation/learn-dxpr-builder/ai): schakel AI in en kies een model
- [Beveiliging](/nl/hc/documentatie/dxpr-builder-leren/geavanceerd/beveiliging): toestemmingen en uitvoerfiltering
- [Licentie en productsleutel](/nl/hc/documentatie/dxpr-builder-leren/probleemoplossing/licentie-en-productsleutel): problemen met licentiefouten oplossen