Résumé
Depuis ce commit, la configuration nginx par défaut pour Discourse inclut ce que l’on appelle des « outlets » (points de sortie) - une manière prise en charge d’injecter des instructions supplémentaires dans la configuration nginx aux endroits appropriés.
Ce changement permet une approche plus robuste de la gestion de la configuration et du comportement d’un serveur web, alors que nous nous appuyions auparavant sur des commandes de recherche/remplacement relativement fragiles.
Au fil du temps, nous adapterons nos propres modèles de configuration pour utiliser les points de sortie.
Utilisation
Il existe trois sections de points de sortie prises en charge :
before-server: instructions de configuration du contextehttpserver: instructions de configuration du contexteserverdiscourse: instructions de configuration du contextelocation- celles-ci sont appliquées aux requêtes transmises à Discourse
Exemples
Voici quelques exemples d’utilisation de ces points de sortie dans votre fichier de configuration app.yml pour atteindre certains objectifs.
Ils peuvent être ajoutés n’importe où vous pouvez utiliser une commande run ou file ; ma recommandation est de le faire dans le hook after_code afin que la reconstruction puisse échouer rapidement si la syntaxe est incorrecte.
Ajout d’un en-tête de réponse
Cet exemple ajoute un en-tête à chaque réponse transmise à Discourse :
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";
Résultat :
○ → curl -I https://example.contoso.com/
HTTP/2 200
…
x-clacks-overhead: GNU Terry Pratchett
Ajout d’un fichier statique sur un seul chemin
Cet exemple ajoute un fichier statique servi par nginx sur un seul chemin, en dehors de l’arborescence normale de Discourse.
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}
Résultat :
○ → 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}