Eviepayne
(vladtheimplier)
1
最近、フォーラムをより高性能なホストに移行し、高可用性の実現に取り組んでいます。
リバースプロキシで Forward Proto ヘッダーと For ヘッダーを追加しましたが、Discourse 側の nginx 設定では Proto しか反映されませんでした。
そのため、server 節の下に以下を追加する必要がありました。
set_real_ip_from loadbalancerip;
real_ip_header X-Forwarded-For;
これらを追加する Discourse の環境変数はありますか?
あるいは、app.yml に追加できる引数はありますか?
Eviepayne
(vladtheimplier)
3
いいえ、このガイドはコンテナとホスト間で共有される nginx ソケットのセットアップ方法について説明しています。
コンテナの再構築後に nginx 設定に以下を宣言的に含める方法を探しています。
set_real_ip_from loadbalancerip;
real_ip_header X-Forwarded-For;
コンテナ内の nginx にこれを追加しようとしているのですか?デフォルトで追加されているため、不要だと考えられます:
Eviepayne
(vladtheimplier)
5
これを動作させるにはこの行が必要です。
これがなければ、すべてのリクエストは依然としてロードバランサーの IP として表示されます。
私の Discourse が 429 エラーでダウンしたため、これは確信しています。
不明な点があれば、私のインフラは以下の通りです:
ユーザー > haproxy > discourse
もちろん、Discourse には nginx のリバースプロキシが含まれています。
haproxy で転送ヘッダーを含めましたが、Discourse 内部の nginx が「転送元(forwarded for)」を無視していました。OP で 2 行を追加し、コンテナを再起動することで動作するようにしました。
Lilly
(Lillian )
6
2 コンテナ構成を使っていますか?
カスタムロードバランサの IP 用の組み込み環境変数はないと思います。nginx はサーバーブロックに対してこれらの変数をネイティブに読み取らないためです。
また、実行中のコンテナ内で nginx 設定を手動で編集した場合、次回ビルド時に上書きされてしまいます。
永続化し、ビルドの再実行後も維持するには、app.yml(2 コンテナ構成の場合は web_only.yml)の run: セクション(.yml ファイルの最も下部)に以下のブロックを追加する必要があります。これにより、Discourse ビルダーが server { ブロックが開いた後に、実際の IP 設定を自動的に注入します。
run:
- replace:
filename: /etc/nginx/conf.d/discourse.conf
from: /server.+{/
to: |
server {
set_real_ip_from 192.168.1.100; ## 実際のロードバランサの IP/サブネットに置き換えてください
real_ip_header X-Forwarded-For;
real_ip_recursive on;