Web Server¶
Web-Inhalte (HTML-Dateien, Bilder, Downloads) werden in der GBD WebSuite von dem integrierten NGINX, einem schnellen und zuverlässigen Web-Server, verarbeitet.
Sie können mehrere Sites (“virtuelle Hosts”) in einer einzigen GBD WebSuite Installation konfigurieren, jeder mit seinem eigenen Hostnamen und Dokumentenstamm.
Statische Dateien und Assets¶
Es gibt zwei Arten von Webinhalten: statische Ressourcen und Vermögenswerte. Statische Ressourcen werden in einem Web-Root-Ordner abgelegt und ohne jegliche Bearbeitung bereitgestellt. Assets sind Ressourcen, die serverseitig verarbeitet werden müssen, bevor sie dem GBD WebSuite Client zur Verfügung gestellt werden können.
Anwendungsfälle für statische Dateien sind:
- einfache, öffentliche html-Seiten
- Javascript- und CSS-Dateien (einschließlich des GBD WebSuite Client Materials)
- statische Bilder
Anwendungsfälle für Vermögenswerte sind:
- jede Ressource, die einer Autorisierung bedarf
- Template-basierte HTML-Seiten (Die GBD WebSuite verwendet mako für das Templating)
- projektspezifische Ressourcen
Die GBD WebSuite bedient nur Ressourcen mit bekannten Mime-Typen (bestimmt durch die Dateiendung), die Voreinstellung ist
.css .csv .gif .html .jpeg .jpg .js .json .pdf .png .svg .ttf .xml .zip
Sie können diese Liste pro Seite oder pro Projekt neu definieren
Rewrite-Regeln¶
Assets werden vom Serverbefehl assetHttpGetPath
behandelt, der den Parameter path
akzeptiert, und optional eine eindeutige Projekt-ID, so dass die endgültige URL wie folgt lautet:
http://example.org/_?cmd=assetHttpGetPath&path=somepage.mako
Die folgende Rewrite-Regel
{
"match": "^/([a-z]+)/([a-z]+)$",
"target": "_?cmd=assetHttpGetPath&projectUid=$1&path=$2.mako"
}
wird diese URL in einfach umwandeln:
http://example.org/myproject/somepage
Das match
ist ein erforderlicher Ausdruck und das target
ist die endgültige URL mit {$n}
Platzhaltern, die den Capture-Gruppen im RegEx entsprechen. Wenn das Ziel mit einem Schema beginnt (z. B. http://
), führt der Server einen Redirect statt eines Rewritings durch.
Website-Konfiguration¶
Eine Website-Konfiguration muss einen Hostnamen (Hostname *
markiert die Standard-Site), eine Root- und Asset-Konfiguration sowie optional eine Reihe von URL-Rewriting-Regeln enthalten
{
## Hostname
"host": "example.org",
## statisches document root
"root": {
## absoluter Pfad zur root directory
"dir": "/example/www-root",
## erlaubte Dateierweiterungen (zusätzlich zur Standardliste)
"allowMime": [".xls", ".doc"],
## deaktivierte Dateierweiterungen (aus der Standardliste)
"denyMime": [".xml", ".json"],
},
## assets root
"assets": {
## absoluter Pfad zum Site-Asset-Verzeichnis
"dir": "/example/www-assets",
},
## rewrite rules
"rewrite": [
{
"match": "^/$",
"target": "_?cmd=assetHttpGetPath&path=root-page.mako"
},
{
"match": "^/hello/([a-z]+)$",
"target": "_?cmd=assetHttpGetPath&projectUid=hello_project&path=$1.mako"
}
]
Projektressourcen¶
Jedes GBD WebSuite Projekt kann seine eigene Asset-Root-Konfiguration haben. Wenn der Client ein Asset ohne Projekt-UID anfordert, z. B.
http://example.org/_?cmd=assetHttpGetPath&path=somepage.mako
dann wird das Asset im Site-Asset-Verzeichnis gesucht. Wenn ein Auftrag mit einem Projekt uid
http://example.org/_?cmd=assetHttpGetPath&projectUid=myproject&path=somepage.mako
dann wird das Asset zuerst in den Projekt-Assets gesucht, wenn es nicht gefunden wird, wird das Site-Asset-Verzeichnis als Fallback verwendet.
HTML Vorlagen¶
Die GWS verwendet ein eigenes Vorlagenkonstrukt (Template-Engine), die die folgenden grundlegenden Befehle unterstützt:
`` @if <condition> … @ end`` | Überprüfen Sie eine Bedingung |
`` @each <object> as <key>, <value> … @ end`` | Definiere ein Schlüsselwertobjekt |
`` @include <path> `` | Füge eine weitere Vorlage hinzu |
Die Werte der Eigenschaften können mit einem Konstrukt `` {object.property} `` mit optionalen Filtern, z. `` {{object.property | html}} `` eingepflegt werden.
Hier ist ein Beispiel für eine Formatierungsvorlage für Features
@if feature.category
<p class="head">{feature.category | html}</p>
@end
@if feature.title
<p class="head2">{feature.title | html}</p>
@end
<table><tbody>
@each feature.attributes as name, value
<tr>
<th>{name | html}</th>
<td>{value | html | nl2br | linkify(target="_blank", cut=30)}</td>
</tr>
@end
</tbody></table>
Fehlerseitenvorlage¶
Eine Fehlerseitenvorlage hat Zugriff auf den Fehlercode in der Variablen `` error``. Sie können den Befehl `` @ if`` verwenden, um je nach Fehler unterschiedliche Inhalte bereitzustellen
<h1>Error!</h1>
@if error == 404
Resource not found
@elif error == 403
Access denied
@else
Error {error} has occured
@end
SSL Konfiguration¶
SSL kann unter web.ssl
konfiguriert werden. Sie müssen Pfade (wie im Container sichtbar) zu Ihrem Zertifikatspaket und dem privaten Schlüssel angeben. Die SSL-Konfiguration wird auf den gesamten Server angewendet, nicht nur auf einzeln konfigurierten Seiten. Mit SSL würde Ihre “Web” -Konfiguration so aussehen
"web": {
"sites": [
{
"host": "..."
// site configuration as described above
},
{
"host": "..."
// another site configuration
}
...
],
"ssl": {
"crt": "/path/to/your-certificate-bundle.crt",
"key": "/path/to/your-private-key.crt"
}
}
Wenn Ihr Zertifikat aus separaten Dateien besteht (z. B. Domainzertifikat, Zwischenzertifikat und Stammzertifikat), können Sie das Bundle erstellen, indem Sie sie zusammenfügen
cat domain.crt intermediate.crt root.crt > bundle.crt