ユーザーエージェントが空のリクエストをドロップする方法

Dockerインストールの方法ではNginxの設定にアクセスできないため、通常はNginxの設定を編集して対応しますが、今回はそれができません。可能であれば、この目的のためだけに別のリバースプロキシを追加したくありません。

「いいね!」 1

コンテナ内のnginx設定を変更する方法の例として、discourse_docker/templates/web.ratelimited.template.yml at main · discourse/discourse_docker · GitHub を参照してください。

「いいね!」 5

これを具体的に行いたい他の人のために、以下の内容で /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 を持つすべてのリクエストを拒否するようになります。

編集:一致/置換をより良い場所に変更しました。

「いいね!」 4

Dockerを知らないので、念のため、どこかにreplaceという言葉を見るたびに不安になるので…

これはdiscourse.confの内容を完全に置き換えるのではなく、追加するということですよね?

それはファイル内の行を置き換えます。まず、以下のインスタンスを見つけます。

listen 443 ssl http2;

そして、これを置き換えます。

listen 443 ssl http2;
if ($http_user_agent = "") { return 403; }

これにより、ファイルに正しい場所に新しい行が追加されます。ファイルの他の部分は変更されません。ファイルを安全にパッチするために、公式テンプレートと同じメカニズムを使用しています。

「いいね!」 2

前にも言ったように、私はDockerを知りません。私はコピー&ペーストで博士号を取得した、ただの貧しいエンドユーザーです。

そのため、将来検索する方への注意点です。

web.blockemptyua.yml は、宣言されたテンプレートの中で最初に置くことはできません。より正確には、web.template.yml の後(あるいは、おそらくすべての web.* テンプレートの後)に来る必要があります。

ここでは順序が重要だと思います。もし私が/私たちがそれを最初に扱おうとすると、その時点では /etc/nginx/conf.d/discourse.conf が存在しないため、再構築/ブートストラップがエラーで停止します。

まあ、毎日新しいことがあります :wink:

「いいね!」 1

はい、確かに最後に移動する必要があります。投稿を編集して追加しました :+1:

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.