NGinx を設定しようとして、かなり興味深い問題に遭遇しました。私は、NGinx 1.13.8 を使用して、すべてを HTTPS 経由で提供する小さな Web サーバーを実行しています。このような構成ではよくあることですが、ポート 80 もリッスンし、そこにあるすべてのリクエストを同じ URI でポート 443 に一括リダイレクトします。これを実現するには、次の構成フラグメントを使用します。
location / {
return 301 https://$server_name$request_uri;
}
これ自体は、私の目的には十分機能していました。しかし、明らかに偽物で簡単に識別できるトラフィック (ランダムな IP から 1,000 件の新規接続が最大で発生する約 5 分間のランダムな期間。すべて User-Agent ヘッダーに共通のプレフィックスがあり、すべてまったく同じリクエスト ( HEAD / HTTP/1.1
) を行い、タイムアウトするまで接続を開いたままにし、リダイレクトにはまったく従いません) が発生し始めました。
理想的には、これらの接続が識別されるとすぐに閉じて、無駄になるリソースの量を最小限に抑えたいと考えています。現在、これを実現するために、次の変更された構成フラグメントを思いつきました。
location / {
return 301 https://$server_name$request_uri;
}
location = / {
if ($method = "HEAD") {
set $drop M;
}
if ($http_user_agent ~* "Dalvik/2.1.0 (Linux U ") {
set $drop "U${drop}";
}
if ($drop = "UM") {
return 444;
}
}
ただし、これは機能していないようです (ログには、トラフィックの急増がすべて 301 を返すことがまだ示されています)。また、最初のロケーション ブロック内で、あまり具体的でない一致 (User-Agent ヘッダーまたはメソッドの包括的な一致のみ) も試しましたが、これも機能していないようです。
そこで、2つの質問があります。
- なぜこれが機能しないのでしょうか?
- ファイアウォールでのディープ パケット インスペクションを必要としない、このトラフィックを処理するより良い方法はありますか?