まとめ
このコミット時点で、Discourseのデフォルトのnginx設定には、「アウトレット」と呼ばれるものが含まれています。これは、nginx設定に適切な場所に追加入力を行うためのサポートされている方法です。
この変更により、以前は比較的壊れやすい検索/置換コマンドに依存していたWebサーバーの設定と動作を管理するための、より堅牢なアプローチが可能になります。
今後、独自の構成テンプレートをアウトレットを使用するように適応させていきます。
使用方法
サポートされているアウトレットセクションは3つあります。
before-server:httpコンテキスト設定ステートメントserver:serverコンテキスト設定ステートメントdiscourse:locationコンテキスト設定ステートメント - これらはDiscourseに転送されるリクエストに適用されます。
例
app.yml設定ファイルでこれらのアウトレットを使用して目標を達成する方法の例をいくつか紹介します。
これらは、runまたはfileコマンドを使用できる場所であればどこでも追加できます。構文に問題がある場合にすぐに再構築が失敗するように、after_codeフック内で行うことをお勧めします。
レスポンスヘッダーの追加
この例では、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";
結果:
○ → curl -I https://example.contoso.com/
HTTP/2 200
…
x-clacks-overhead: GNU Terry Pratchett
単一パスへの静的ファイルの追加
この例では、通常のDiscourseツリーの外にある単一パスでnginxによって提供される静的ファイルを追加します。
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}
結果:
○ → 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}