Dockerインストールの方法ではNginxの設定にアクセスできないため、通常はNginxの設定を編集して対応しますが、今回はそれができません。可能であれば、この目的のためだけに別のリバースプロキシを追加したくありません。
コンテナ内のnginx設定を変更する方法の例として、discourse_docker/templates/web.ratelimited.template.yml at main · discourse/discourse_docker · GitHub を参照してください。
これを具体的に行いたい他の人のために、以下の内容で /var/discourse/templates/web.blockemptyua.yml を作成しました。
run:
- replace:
filename: "/etc/nginx/conf.d/discourse.conf"
from: /listen 443 ssl http2;/
to: |
listen 443 ssl http2;
if ($http_user_agent = "") { return 403; }
次に、/var/discourse/containers/app.yml で、この新しいテンプレートファイルをファイル先頭のテンプレートリストの末尾に追加し、./launcher rebuild app を実行しました。
これで Nginx は空の UA を持つすべてのリクエストを拒否するようになります。
編集:一致/置換をより良い場所に変更しました。
Dockerを知らないので、念のため、どこかにreplaceという言葉を見るたびに不安になるので…
これはdiscourse.confの内容を完全に置き換えるのではなく、追加するということですよね?
それはファイル内の行を置き換えます。まず、以下のインスタンスを見つけます。
listen 443 ssl http2;
そして、これを置き換えます。
listen 443 ssl http2;
if ($http_user_agent = "") { return 403; }
これにより、ファイルに正しい場所に新しい行が追加されます。ファイルの他の部分は変更されません。ファイルを安全にパッチするために、公式テンプレートと同じメカニズムを使用しています。
前にも言ったように、私はDockerを知りません。私はコピー&ペーストで博士号を取得した、ただの貧しいエンドユーザーです。
そのため、将来検索する方への注意点です。
web.blockemptyua.yml は、宣言されたテンプレートの中で最初に置くことはできません。より正確には、web.template.yml の後(あるいは、おそらくすべての web.* テンプレートの後)に来る必要があります。
ここでは順序が重要だと思います。もし私が/私たちがそれを最初に扱おうとすると、その時点では /etc/nginx/conf.d/discourse.conf が存在しないため、再構築/ブートストラップがエラーで停止します。
まあ、毎日新しいことがあります ![]()
はい、確かに最後に移動する必要があります。投稿を編集して追加しました ![]()
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.