現在、1.5dev-17を使用してHAProxyを再構成しています。特定のリクエストに使用するバックエンドがない場合、私がやりたいのは404エラーを返すことです。
現在の構成ではdefault_backendを使用してDjangoアプリサーバーにルーティングしますが、他の構成済みバックエンドのどれにも一致しないプローブ要求(ペンテストなど)が大量にある場合、 Djangoサーバーは、これらの無効な要求を処理しようとするために停止し、最終的に404を返します。
Djangoバックエンドに委任するのではなく、HAProxyから404を提供したいのです。現在、ハックでこれを実現しています:
frontend www
...
default_backend nomatch
backend nomatch
errorfile 503 /var/www/http/404.http
そして、404.httpファイル内で、ヘッダーに404ステータスコードを設定しました。これは機能しますが、非常に間違っていると感じています。 HAProxyでこれを実現するより良い方法はありますか?または、通常のバックエンドを使用して、404で応答を処理するだけにする必要がありますか?
200、400、403、405、408、429、500、502、503、または504のいずれかの応答コードで問題がない場合。
次に、このようなことをすることができます:
frontend www
...
default_backend no-match
backend no-match
http-request deny deny_status 400
http-request
: http://cbonte.github.io/haproxy-dconv/1.7/configuration.html#4-http-requesterrorfile
で説明されている受け入れ済みの応答コード: http://cbonte.github.io/haproxy-dconv/1.7/configuration.html#errorfile似たようなものが欲しくて、これは私が思いついたのと同じことです。それは間違っていると感じましたが、実際には非常にうまく機能し、特定のURLをブラックリストに登録するよりもはるかにクリーンです。コメントを残すことを忘れないでください。そうすれば、誰もそれが間違っていると思ってそれに出くわすことはありません。