IR
irwinrodriguez.dev
Zurück zur Dokumentation

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}.json

Vollständiges Beispiel

Vollständiges Manifest eines Servers
{
  "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
      }
    }
  }
}
Das JWT-Geheimnis ist in diesem Beispiel absichtlich LEER, und das Zertifikat ebenso: ein Beispielmanifest mit etwas, das nach einem Schlüssel aussieht, landet wortlich in der Produktion. Das Manifest liegt in config\servers\ neben der Lizenz (config\foxserver.lic): behandeln Sie diesen Ordner als das, was er ist: Geheimnisse.

Server-Eigenschaften

EigenschaftTypStandardBeschreibung
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"
}
EigenschaftTypStandardwertBeschreibung
allowedoriginsString*Erlaubte Domains kommagetrennt, oder "*" für beliebige
allowedmethodsStringGET,POST,PUT,DELETE,OPTIONSVom Browser erlaubte HTTP-Methoden
allowedheadersStringContent-Type,AuthorizationHeader, die der Client senden darf
Geben Sie in der Produktion immer genaue Domains statt "*" an für mehr Sicherheit.

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"
}
Fügen Sie Zertifikatskennworter niemals in die Versionskontrolle ein. Verwenden Sie Umgebungsvariablen oder einen Secret-Manager.

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
}
EigenschaftTypStandardBeschreibung
fromString(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.
toString(erforderlich)Ziel: ein Pfad derselben Website oder eine absolute URL (https://...).
statusNumber302301 und 308 sind dauerhaft, der Browser merkt sie sich. 302 und 307 sind vorübergehend und gehen mit Cache-Control: no-store hinaus.
matchStringexactexact 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 on

Die 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:

EigenschaftTypStandardBeschreibung
enabledBooleanfalseProtokollierung aktivieren / deaktivieren
pathString—Verzeichnis für Protokolldateien (muss existieren)
fileprefixStringfoxserverDateinamenprafix. Ergebnis: "{prefix}_2026-04-11.log"
formatStringSimple"Simple" (eine Zeile), "Detailed" (volle Info), "JSON"
options.requestsBooleantrueEingehende Anfragen protokollieren
options.responsesBooleantrueAusgehende Antworten protokollieren
options.errorsBooleantrueFehler protokollieren
options.debugBooleanfalseDebug-Nachrichten protokollieren (ausfuhrlicher)
options.performanceBooleanfalseAntwortzeiten pro Endpunkt protokollieren

Weiter: Routing →