Sucuriはこのほど、「What is HTTP Error 429: Too Many Requests」において、HTTPサーバーが応答するエラーコード「429」の原因とその修正方法について伝えた。
エラーコード「429」とは
HTTPのエラーコードとは、「HTTPステータスコード」の400番台および500番台にて定義されるコードのこと。エラー発生時にサーバから応答される。400番台はクライアント側の要求に問題があり、500番台はサーバ側に問題があることを意味する(参考:「RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content」)。
HTTPステータスコードの429は「RFC 6585 - Additional HTTP Status Codes」にて定義された追加コードの一つ。「Too Many Requests(多すぎる要求)」と定義され、ユーザーが「単位時間あたりのリクエスト上限回数」を超えてリクエストを送信した場合などに応答される。
「429」が発生する5つの原因
Sucuriによると、HTTPのエラーコード「429」が発生する原因は複数あり、その代表的なものとして次の5つを挙げている。
1.多すぎるトラフィック
通信トラフィックが多すぎる場合、サーバーが要求を処理しきれなくなり429を応答することがある。これは一時的に多くのユーザーがサイトを訪れた場合などに発生する可能性がある。
2.ボットと分散型サービス拒否攻撃(DDoS)
ボット、クローラー、自動スクリプトはWebサイトに繰り返しリクエストを送信することがある。検索エンジンなどの悪意のないものから、分散型サービス拒否攻撃(DDoS: Distributed Denial of Service attack)を実行する悪意のあるものなどが存在し、これらはリクエスト上限回数を超えてもなおアクセスしてくる可能性がある。
3.設定ミス
リクエスト上限回数を低く設定した場合、通常のアクセスにおいて429を発生させる可能性がある。
4.リソースの大量消費
クライアントからのリクエストによりリソースを大量に消費した場合、そのリクエストまたは他のリクエストに429が応答される可能性がある。
5.共有ホスティング
共有ホスティングプラットフォームでは、リソースが複数のWebサイト間で共有される。一部のWebサイトでリソースを大量に消費すると、他のWebサイトで429が応答される可能性がある。
「429」を解決するための10の対策
SucuriはHTTPのエラーコード「429」を解決するために打つべき策として、以下を挙げている。
1.待ってから再試行
最も単純な解決策は、十分な時間を空けてからリクエストを送信する。リクエスト上限回数に到達している場合は、この対策で解決できる。リソースの大量消費などが原因の場合は他の対策が必要となる可能性がある。
2.応答ヘッダーの確認
HTTPのエラーコード「429」には「Retry-After」ヘッダーが併記される場合がある。このヘッダーは次のリクエストまでの推奨待ち時間を示しており、指定された時間が経過してからアクセスすることでエラーを回避できる場合がある。
3.ブラウザキャッシュの削除
ブラウザのキャッシュが原因でリクエストを自動的に繰り返すことがある。この場合はブラウザの設定からキャッシュをクリアすることで改善することがある。
4.WAFの導入
サーバ側にWebアプリケーションファイアウォール(WAF: Web Application Firewall)を導入し、悪意のあるリクエストを防止する。
5.制限を増やす
サーバリソースまたはリクエスト上限回数の設定を増やす。リソース不足や多すぎるトラフィックに対応する場合は、サーバリソースを増やすことで改善できる可能性がある。
6.指数バックオフの実装
指数バックオフ(Exponential Backoff)はエラー発生時にアクセス間隔を指数的に増加させながらアクセスする手法。ボットなどを使用してアクセスする場合はこの処理を実装し、429エラーの発生を軽減することが望まれている。
7.コードの最適化
Webサイトのコードを最適化し、負荷を軽減する。複数のJavaScriptやCSSが存在する場合はそれらを結合し、読み込み回数を減らすことで負荷を軽減できる場合がある。他にも複数の小さなJPEGファイルを1つのSVGファイルに結合して利用する方法がある。
8.WordPress固有の対策
WordPressは上記とは異なる対策が有効とされる。ログインページはブルートフォース攻撃を受けることがあるため、デフォルトのログインページのアドレスを変更することで負荷を軽減できる。他にも不要なプラグインの削除、負荷の大きいプラグインやテーマの変更などが有効とされる。
9.CDNの導入
コンテンツデリバリーネットワーク(CDN: Content Delivery Network)を導入し、コンテンツをキャッシュすることで負荷を軽減する。
まとめ
Webサイトを運営しており、HTTPエラーコード「429」に悩まされている場合は、上記の対策を実施することで改善する可能性がある。また、分散型サービス拒否(DDoS)攻撃が懸念される場合は、WAFを導入することで被害を軽減できる可能性があり、導入の検討が推奨されている。