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


15

現在、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で応答させるだけですか?


404.httpファイルの内容は何ですか?
ジェイソンフロイド14

3
@JasonFloydのHTTP/1.0 404 Not Found後に、他のヘッダー、空白行、<html>コンテンツが続きます。
ジョシュスミートン14

回答:


4

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

2

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.