Konfiguration
Jeder Server ist eine JSON-Datei (sein Manifest) in config\servers\. Sie wird von foxserver init erzeugt und vom Hook beim Kompilieren aktualisiert; Sie können sie auch von Hand bearbeiten, und FoxForge bearbeitet sie mit Formularen aus der VFP-IDE.
Speicherort der Konfigurationsdatei
Jedes Projekt hat seine eigene Datei unter:
C:\Program Files\FoxServer\config\servers\{projectname}.jsonVollständiges Beispiel
{
"name": "almacen",
"description": "API de almacen",
"type": "api",
"active": true,
"host": "127.0.0.1",
"port": 8099,
"prefix": "",
"issecure": false,
"certificatename": "",
"certificatepassword": "",
"dllpath": "C:\\proyectos\\almacen\\build\\almacen.dll",
"allowedorigins": "https://miapp.com",
"allowedmethods": "GET,POST,PUT,DELETE,OPTIONS",
"allowedheaders": "Content-Type,Authorization",
"lifecycle": {
"enabled": true,
"classname": "MiErpLifecycleClass"
},
"hotreload": {
"enabled": false,
"debouncems": 1500,
"maxretries": 3
},
"server": {
"checkstatusenabled": true,
"endpoint": "server/status"
},
"middleware": {
"auth": {
"enabled": true,
"type": "jwt",
"secret": "",
"tokenexpirationseconds": 3600,
"loginendpoint": "auth/login"
},
"logging": {
"enabled": true,
"path": "C:\\proyectos\\almacen\\logs\\",
"fileprefix": "almacen",
"format": "Detailed",
"options": {
"requests": true,
"responses": true,
"errors": true,
"debug": false,
"performance": true
}
}
}
}Server-Eigenschaften
| Eigenschaft | Typ | Standard | Beschreibung |
|---|---|---|---|
name | String | — | Eindeutiger Projekt-/Server-Bezeichner |
description | String | "" | Für Menschen lesbare Beschreibung |
type | String | api | "api" fur REST-APIs, "web" fur statische Dateien |
active | Boolean | false | Ob der Server beim FoxServer-Start geladen wird |
host | String | 127.0.0.1 | Bindungsadresse. 0.0.0.0 akzeptiert alle Schnittstellen |
port | Number | 8080 | HTTP-Lauschport |
prefix | String | "" | URL-Pfad-Prafix (z.B. "/api/v1") |
issecure | Boolean | false | HTTPS/SSL aktivieren |
dllpath | String | — | Pfad zur kompilierten MTDLL des Projekts (erforderlich). Seit 0.9 aktiviert die Engine per ProgID, dieser Pfad zeigt also auf die native VFP-DLL, nicht auf ein .NET-Assembly |
publicdir | String | "" | Verzeichnis für statische Dateien (nur type: web) |
CORS
Erlaubte Ursprünge, Methoden und Header für domainubergreifende Anfragen konfigurieren:
{
"allowedorigins": "https://app.example.com,https://admin.example.com",
"allowedmethods": "GET,POST,PUT,DELETE,OPTIONS",
"allowedheaders": "Content-Type,Authorization,X-Requested-With"
}| Eigenschaft | Typ | Standardwert | Beschreibung |
|---|---|---|---|
allowedorigins | String | * | Erlaubte Domains kommagetrennt, oder "*" für beliebige |
allowedmethods | String | GET,POST,PUT,DELETE,OPTIONS | Vom Browser erlaubte HTTP-Methoden |
allowedheaders | String | Content-Type,Authorization | Header, die der Client senden darf |
HTTPS / SSL
Um HTTPS zu aktivieren, benötigen Sie ein Zertifikat im .pfx- oder .p12-Format:
{
"issecure": true,
"certificatename": "mycert.pfx",
"certificatepassword": "your-cert-password"
}Weiterleitungen (Websites)
Seit 0.9.36 kann eine Website vom Typ web antworten, dass etwas unter einer anderen URL liegt. Die Regeln stehen in der Liste redirects des Manifests, und der Server prüft sie, bevor er die Datei auf der Festplatte sucht. Eine Regel hat Vorrang vor dem Inhalt von publicdir. Damit lässt sich auch die URL einer Datei stilllegen, die noch dort liegt, etwa der Installer einer alten Version.
{
"type": "web",
"redirects": [
{
"from": "/kit/FoxAgent-Setup-1.63.2.exe",
"to": "/kit/retired/",
"status": 302
},
{
"from": "/old-docs/",
"to": "/docs/",
"status": 301,
"match": "prefix"
}
],
"trailingslashredirect": true
}| Eigenschaft | Typ | Standard | Beschreibung |
|---|---|---|---|
from | String | (erforderlich) | Pfad, den der Client anfragt, beginnend mit /. Verglichen wird der ganze Pfad (inklusive Präfix des Servers), dekodiert und ohne Unterscheidung von Groß- und Kleinschreibung. |
to | String | (erforderlich) | Ziel: ein Pfad derselben Website oder eine absolute URL (https://...). |
status | Number | 302 | 301 und 308 sind dauerhaft, der Browser merkt sie sich. 302 und 307 sind vorübergehend und gehen mit Cache-Control: no-store hinaus. |
match | String | exact | exact trifft den ganzen Pfad. prefix trifft alles, was mit from beginnt, und hängt den Rest an to an: aus /old-docs/a/b wird /docs/a/b. |
- Es gewinnt die erste passende Regel, in der Reihenfolge der Datei.
- Der Query-String der Anfrage geht an das Ziel mit, außer to bringt einen eigenen mit.
- Die Antwort enthält Location und eine minimale HTML-Seite mit dem Link, für Clients, die Weiterleitungen nicht folgen. Eine HEAD-Anfrage bekommt nur die Header.
- Eine fehlerhafte Regel wird beim Start verworfen, mit einer Warnung im Log, die sagt, welche und warum: from ohne führenden Schrägstrich, leeres to, ein Statuscode außerhalb der Liste, ein unbekanntes match oder eine offensichtliche Schleife (eine prefix-Regel, deren to mit ihrem eigenen from beginnt). Der Server startet trotzdem, und die übrigen Regeln funktionieren.
- Nur eine Website vom Typ web wendet sie an. Ein Server, der REST bedient, verteilt über die API und beachtet sie nicht; foxserver validate weist darauf hin.
- Der Server liest die Regeln beim Start. Nach einer Änderung muss er neu gestartet werden.
Der abschließende Schrägstrich bei Ordnern
Mit "trailingslashredirect": true antwortet ein Ordner, der ohne abschließenden Schrägstrich angefragt wird (/docs/anleitung), mit 301 auf denselben Pfad mit Schrägstrich (/docs/anleitung/) und behält den Query-String, wie nginx, Apache oder IIS. So hat jede Seite eine einzige URL, und ihre relativen Links zeigen auf den richtigen Ordner. Die Option ist standardmäßig aus, weil sie ändert, was eine bereits veröffentlichte Website antwortet. Das entscheidet, wer sie veröffentlicht.
Über die Befehlszeile
foxserver redirect-add --project C:\proyectos\web --from /kit/FoxAgent-Setup-1.63.2.exe --to /kit/retired/
foxserver redirect-add --project C:\proyectos\web --from /old-docs/ --to /docs/ --status 301 --match prefix
foxserver redirect-list --project C:\proyectos\web
foxserver redirect-remove --project C:\proyectos\web --from /old-docs/
foxserver redirect-trailing-slash --project C:\proyectos\web onDie Befehle bearbeiten das Manifest des Projekts (build\) und kommen mit foxserver deploy auf den Server, wie die übrige Konfiguration. Ein redirect-add mit einem from, das es schon gibt, ersetzt diese Regel an ihrer Stelle. Speichern des Projekts aus FoxForge oder über die CLI behält von Hand geschriebene Regeln, auch Felder, die das Werkzeug nicht kennt.
Protokollierung
Das Server-Protokollierungssystem konfigurieren:
| Eigenschaft | Typ | Standard | Beschreibung |
|---|---|---|---|
enabled | Boolean | false | Protokollierung aktivieren / deaktivieren |
path | String | — | Verzeichnis für Protokolldateien (muss existieren) |
fileprefix | String | foxserver | Dateinamenprafix. Ergebnis: "{prefix}_2026-04-11.log" |
format | String | Simple | "Simple" (eine Zeile), "Detailed" (volle Info), "JSON" |
options.requests | Boolean | true | Eingehende Anfragen protokollieren |
options.responses | Boolean | true | Ausgehende Antworten protokollieren |
options.errors | Boolean | true | Fehler protokollieren |
options.debug | Boolean | false | Debug-Nachrichten protokollieren (ausfuhrlicher) |
options.performance | Boolean | false | Antwortzeiten pro Endpunkt protokollieren |
Weiter: Routing →