web-dev-qa-db-ja.com

ACLが一致しない場合にHAProxyから404を提供する

現在、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で応答を処理するだけにする必要がありますか?

15
Josh Smeaton

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
4
rbjorklin

似たようなものが欲しくて、これは私が思いついたのと同じことです。それは間違っていると感じましたが、実際には非常にうまく機能し、特定のURLをブラックリストに登録するよりもはるかにクリーンです。コメントを残すことを忘れないでください。そうすれば、誰もそれが間違っていると思ってそれに出くわすことはありません。

2