Riepilogo
A partire da questo commit la configurazione nginx predefinita per Discourse include quelli che sono noti come “outlets” - un modo supportato per iniettare istruzioni aggiuntive nella configurazione nginx in punti appropriati.
Questa modifica abilita un approccio più robusto alla gestione della configurazione e del comportamento di un web server, dove in precedenza ci affidavamo a comandi di ricerca/sostituzione relativamente fragili.
Nel tempo adatteremo i nostri modelli di configurazione per utilizzare gli outlets.
Utilizzo
Sono disponibili tre sezioni di outlet supportate:
before-server: istruzioni di configurazione del contestohttpserver: istruzioni di configurazione del contestoserverdiscourse: istruzioni di configurazione del contestolocation- queste vengono applicate alle richieste inoltrate a Discourse
Esempi
Ecco alcuni esempi di come utilizzare questi outlets nel tuo file di configurazione app.yml per raggiungere determinati obiettivi.
Questi possono essere aggiunti ovunque tu possa utilizzare un comando run o file; la mia raccomandazione è di farlo nell’hook after_code in modo che la ricostruzione possa fallire rapidamente se c’è qualcosa di sbagliato nella sintassi.
Aggiunta di un header di risposta
Questo esempio aggiunge un header a ogni risposta inoltrata a 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";
Risultato:
○ → curl -I https://example.contoso.com/
HTTP/2 200
...
x-clacks-overhead: GNU Terry Pratchett
Aggiunta di un file statico su un singolo percorso
Questo esempio aggiunge un file statico servito da nginx su un singolo percorso, al di fuori del normale albero di 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}
Risultato:
○ → 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}