Zusammenfassung
Seit diesem Commit enthält die Standard-Nginx-Konfiguration für Discourse sogenannte „Outlets“ – eine unterstützte Methode, um zusätzliche Anweisungen an geeigneten Stellen in die Nginx-Konfiguration einzufügen.
Diese Änderung ermöglicht einen robusteren Ansatz zur Verwaltung der Konfiguration und des Verhaltens eines Webservers, bei dem wir uns zuvor auf relativ brüchige Such-/Ersetzungsbefehle verlassen haben.
Im Laufe der Zeit werden wir unsere eigenen Konfigurationstemplates an die Verwendung von Outlets anpassen.
Verwendung
Es gibt drei unterstützte Outlet-Abschnitte:
before-server: Konfigurationsanweisungen imhttp-Kontextserver: Konfigurationsanweisungen imserver-Kontextdiscourse: Konfigurationsanweisungen imlocation-Kontext – diese werden auf Anfragen angewendet, die an Discourse weitergeleitet werden.
Beispiele
Hier sind einige Beispiele, wie Sie diese Outlets in Ihrer app.yml-Konfigurationsdatei verwenden können, um Ziele zu erreichen.
Diese können überall dort hinzugefügt werden, wo Sie einen run- oder file-Befehl verwenden können. Meine Empfehlung ist, dies im after_code-Hook zu tun, damit der Neuaufbau schnell fehlschlagen kann, wenn die Syntax falsch ist.
Hinzufügen eines Antwort-Headers
Dieses Beispiel fügt jedem Antwort-Header hinzu, der an Discourse weitergeleitet wird:
hooks:
after_code:
- file:
path: /etc/nginx/conf.d/outlets/discourse/clacks-overhead.conf
chmod: 444
contents: |
add_header x-clacks-overhead "GNU Terry Pratchett";
Ergebnis:
○ → curl -I https://example.contoso.com/
HTTP/2 200
…
x-clacks-overhead: GNU Terry Pratchett
Hinzufügen einer statischen Datei unter einem einzelnen Pfad
Dieses Beispiel fügt eine statische Datei hinzu, die von Nginx unter einem einzelnen Pfad außerhalb des normalen Discourse-Baums bereitgestellt wird.
hooks:
after_code:
- file:
path: /etc/nginx/conf.d/outlets/server/well-known-important-file.conf
chmod: 444
contents: |
location = /.well-known/important-file {
default_type application/json;
root /var/www/static/;
}
- file:
path: /var/www/static/.well-known/important-file
chmod: 444
contents: |
{"content-free":true}
Ergebnis:
○ → curl -i https://example.contoso.com/.well-known/important-file
HTTP/2 200
server: nginx
date: Fri, 07 Mar 2025 23:22:38 GMT
content-type: application/json
content-length: 22
last-modified: Fri, 07 Mar 2025 23:12:08 GMT
strict-transport-security: max-age=63072000
accept-ranges: bytes
{"content-free":true}