Discourse公式ステートメント:サブフォルダ設定について
エンタープライズレベル以上のお客様には、ホストされている環境でのサブフォルダ設定をサポートしています。技術的な設定の複雑さが大きいため、カスタムサブフォルダ設定に非常に精通している場合を除き、この設定の使用は強く推奨しません。
以下の点について深く理解していることが不可欠です。
- Discourse Dockerコンテナ内のNGINX設定
- プロキシチェーンにおけるカスタムヘッダーを使用した安全な元のIP転送
- フロントプロキシサーバーでのレート制限
これらすべてが奇妙に聞こえる場合は、この設定を避けることを強く推奨します。
ドメイン上のサブフォルダ(別名:パスプレフィックス)からDiscourseを提供する場合は、例:https://www.example.com/=SUBFOLDER=、次の手順に従ってください!
Docker設定
DockerコンテナYAMLファイルの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;
}
- replace:
filename: /etc/nginx/conf.d/discourse.conf
from: $proxy_add_x_forwarded_for
to: $http_your_original_ip_header
global: true
$http_your_original_ip_headerはYour-Original-Ip-Headerを指し、これはオリジンで設定する信頼できるヘッダーであり、実際のクライアントIPを含みます。
これは、トラフィックが中央プロキシを通過するため必要です。DiscourseがパブリックIPを持っている場合、それをスプーフィングできる可能性があります。Discourseがプライベートな場合は、X-Forwarded-Forで済むかもしれません。
これらの変更を行った後、通常通りDockerコンテナをブートストラップするか、既存のコンテナを変更している場合は再ビルドします。
./launcher bootstrap app
または
./launcher rebuild app
アタッチされているのは、スタンドアロンコンテナの完全なYAMLファイルの例です。
subfolder-sample.yml (3.1 KB)
レート制限に関する懸念
このセットアップを選択する場合、コンテナ内のNGINXに到達する前にリクエストをレート制限したい可能性が高く、その場合、レート制限テンプレートの使用を避けることになるでしょう。コンテナ内のNGINXを再マッピングされたIPで制限するように設定するのは非常に困難であり、テンプレートに複雑な変更を加える必要があります。
既存の投稿
サブドメインで運用されていた既存のサイトに対してこれを行った場合、アップロードが壊れていることに気づくでしょう。サブフォルダをパスに含めるためにすべてを修正するのに役立つツールがあります。まず、Dockerコンテナに入り、Discourseディレクトリに移動します。
cd /var/discourse
./launcher enter app
cd /var/www/discourse
次に、バックアップを取得した後、リマップコマンドを実行します。
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がサブフォルダで実行されているため、どのルートをウェブクローラーがクロールするかを制御するためのrobots.txtファイルをサービス提供できなくなります。クローラーはメインサイトのrobots.txtファイル(https://www.example.com/robots.txt)を参照します。Discourseのrobots.txtファイル(https://www.example.com/=SUBFOLDER=/robots.txtで見つかります)の内容をコピーして、メインサイトのrobots.txtファイルに配置する必要があります。
Please discuss the merits of subfolder vs non-subfolder on separate topics.


