Resumo
A partir do commit a configuração padrão do nginx para Discourse inclui o que são conhecidos como “outlets” - uma maneira suportada de injetar declarações adicionais na configuração do nginx em locais apropriados.
Essa alteração permite uma abordagem mais robusta para gerenciar a configuração e o comportamento de um servidor web, onde anteriormente dependíamos de comandos de busca/substituição relativamente frágeis.
Com o tempo, adaptaremos nossos próprios modelos de configuração para usar outlets.
Uso
Existem três seções de outlet suportadas:
before-server: declarações de configuração no contextohttpserver: declarações de configuração no contextoserverdiscourse: declarações de configuração no contextolocation- estas são aplicadas a requisições encaminhadas para o Discourse
Exemplos
Aqui estão alguns exemplos de como usar esses outlets em seu arquivo de configuração app.yml para atingir objetivos.
Estes podem ser adicionados em qualquer lugar onde você possa usar um comando run ou file; minha recomendação é fazê-lo no hook after_code para que a reconstrução possa falhar rapidamente se houver algo errado com a sintaxe.
Adicionando um cabeçalho de resposta
Este exemplo adiciona um cabeçalho a cada resposta que é encaminhada para o 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";
Resultado:
○ → curl -I https://example.contoso.com/
HTTP/2 200
…
x-clacks-overhead: GNU Terry Pratchett
Adicionando um arquivo estático em um único caminho
Este exemplo adiciona um arquivo estático servido pelo nginx em um único caminho, fora da árvore normal do 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}
Resultado:
○ → 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}