Discourse 公式によるサブフォルダー設定に関する声明
当社は、エンタープライズレベル以上のホスティング顧客に対してサブフォルダー設定をサポートしています。技術的な設定が非常に複雑になるため、カスタムサブフォルダー設定に非常に精通している場合を除き、この設定の使用は強くお勧めしません。
以下の事項について深い理解を持っていることが不可欠です。
- Discourse Docker コンテナ内での NGINX の設定
- プロキシチェーン内でのカスタムヘッダーを使用した元の IP アドレスの安全な転送
- フロントエンドプロキシサーバーでのレート制限
これらがすべて奇妙で難しければ、強くお勧めしますが、この設定は避けてください。
ドメイン上のサブフォルダー(パスプレフィックスとも呼ばれます)から Discourse を提供するには、例えば https://www.example.com/=SUBFOLDER= のように設定します。以下にその手順を示します。
Docker 設定
Docker コンテナの yml ファイルの env セクションに、使用したいサブフォルダーを指定して DISCOURSE_RELATIVE_URL_ROOT 設定を追加します。末尾に / が付いていないことを確認してください。
これを編集すると、ガイド全体が更新されます。
env:
...
DISCOURSE_RELATIVE_URL_ROOT: /=SUBFOLDER=
run セクションでは、すべての Discourse ルートを正しい場所へ送るためにいくつかの変更が必要です。以下はサブフォルダー対応の完全な run セクションの例です。
run:
- exec:
cd: $home
cmd:
- mkdir -p public/=SUBFOLDER=
- cd public/=SUBFOLDER= && ln -s ../uploads && ln -s ../backups
- replace:
global: true
filename: /etc/nginx/conf.d/discourse.conf
from: proxy_pass http://discourse;
to: |
rewrite ^/(.*)$ /=SUBFOLDER=/$1 break;
proxy_pass http://discourse;
- replace:
filename: /etc/nginx/conf.d/discourse.conf
from: etag off;
to: |
etag off;
location /=SUBFOLDER= {
rewrite ^/=SUBFOLDER=/?(.*)$ /$1;
}
- file:
path: /etc/nginx/conf.d/outlets/server/set-real-ip-from-webroot.conf
chmod: 644
contents: |
set_real_ip_from 123.456.789.ABC; # アップストリームプロキシの IP アドレス
- file:
path: /etc/nginx/conf.d/outlets/server/real-ip-header.conf
chmod: 644
contents: |
real_ip_header x-forwarded-for;
エンドユーザーの IP アドレスを保持する詳細については、Handling the "chain of trust" of the end user's real IP を参照してください。
これらの変更を行った後、通常通り Docker コンテナをブートストラップするか、既存のコンテナを変更している場合は再構築してください。
./launcher bootstrap app
または
./launcher rebuild app
スタンドアロンコンテナの完全な例 yml ファイルを添付します。
subfolder-sample.yml (3.1 KB)
レート制限に関する懸念事項
この設定を行う場合、リクエストがコンテナ内の NGINX に到達する前にレート制限をかけたいはずです。つまり、おそらく当社のレート制限テンプレートは使用しないでしょう。コンテナ内の NGINX で再マッピングされた IP に対して制限をかける設定は非常に難しく、テンプレートに複雑な変更が必要になります。
既存の投稿
サブドメインで稼働していた既存のサイトに対してこの設定を行った場合、アップロードが壊れていることに気づくでしょう。すべてのパスにサブフォルダーを含めるように修正できるツールがあります。まず、Docker コンテナに入り、Discourse ディレクトリに移動します。
cd /var/discourse
./launcher enter app
cd /var/www/discourse
次に、バックアップを取った後に remap コマンドを実行します。
RAILS_ENV=production bundle exec script/discourse remap '/uploads' '/=SUBFOLDER=/uploads'
さらに特殊な設定については、Use a subfolder (path prefix) to serve Discourse with multiple servers sharing a domain を参照してください。
robots.txt
Discourse がサブフォルダーで稼働するようになったため、Web クローラーがどのルートをクロールするかを制御するための robots.txt ファイルを提供できなくなりました。クローラーはメインサイトの robots.txt ファイル(https://www.example.com/robots.txt)を参照します。Discourse の robots.txt ファイルの内容(https://www.example.com/=SUBFOLDER=/robots.txt にあります)をコピーして、メインサイトの robots.txt ファイルに貼り付ける必要があります。