Nginxの背後にあるApacheサーバーに一括検索フォームがあります。その場所を保護して、10分間の2番目のリクエストが代わりに「APIを使用しますか」ページに301で送信されるようにしたいと思います。
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
location = /search/bulk {
limit_req zone=one burst=2;
... SOME CONFIG HERE...
}
}
}
Ngnixエラーページを表示する代わりに、エンドクライアントがlimit_reqに達したときに、どのように301しますか?また、第二に、http句全体にトラフィックを抑制したくありません。レートなしでlimit_req_zoneを設定できますが、ロケーションスタンザに設定できますか?
ありがとう、
M。
デフォルトでは、nginx
は503 service temporarily unavailable
エラーコードを返します。
limit_req_status
ディレクティブは、エラーコードがlimit_req
にヒットした場合にエラーコードを変更するために存在します。
location = /search/bulk {
limit_req zone=one burst=2;
limit_req_status 404;
}
問題は、このディレクティブでは400〜599の範囲しか許可されないため、301
を指定できないことです。
[emerg] 3130#0: value must be between 400 and 599 in /etc/nginx/nginx.conf:72
したがって、主な問題がデフォルトの503
メッセージの代わりにカスタムエラーメッセージを表示することである場合は、次のように進めることができます。
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
location = /search/bulk {
limit_req zone=one burst=2;
error_page 503 /503.html;
}
location /503.html {
internal;
}
}
}
次に、カスタム503.html
ファイル:
<html><body>Would you like to use our API ?</body></html>
rate
引数は必須です。 limit_req_zone
のレートを指定する必要があります