ウェブサイトを運営していれば、バグやエラーに遭遇することがあります。エラーの種類は様々で、エラーメッセージに特に明確な情報がないものは、解決の手かがりを見つけにくく、トラブルシューティングが厄介です。今回は、そんなエラーの1つである「429 Too Many Requests」(リクエストが多すぎます)エラーについて掘り下げます。
幸いこのエラーの原因は、ある程度まで絞り込むことができます。いくつかの原因を想定し、それに応じた解決策を講じていきます。
「429 Too Many Requests」エラーの解決方法について動画での解説もご用意しています。
今回は、「429 Too Many Requests」エラーの原因とその解決策をご紹介。トラブルシューティングを5種類取り上げます。
WordPressサイトでの「429 Too Many Requests」エラーの解決方法(要約)
「429 Too Many Requests」エラーは、ユーザー(プラグインやDDoSなど)が一定時間内に送信したリクエストの量が多すぎるために発生します。言い換えれば、「リクエスト送信の停止」をお願いするサーバーからのメッセージです。
このエラーをWordPressサイトで解決するには、次のいずれかのトラブルシューティングを実行してください。
- WordPressデフォルトのログインURLを変更する
- HTTPSの内部リンクがエラーの原因になっていないか確認する
- WordPressプラグインを一度すべて無効にする
- WordPressテーマをデフォルトのものに切り替える
- ホスティング会社に問い合わせる
「429 Too Many Requests」エラーとは
「429 Too Many Requests」エラー(HTTP 429エラー)は、ユーザーが短時間に大量のリクエストを送信した場合に発生するエラーです。ステータスコード429は、レート制限スキームでの使用を意図しています。
「429 Too Many Requests」エラーの原因
サーバーによって、ユーザーエージェントが特定のページに一定期間に頻繁にアクセスを試みていることを検出すると、レート制限機能がトリガーされることがあります。最も一般的な例としては、ユーザー(またはハッカー)がサイトに繰り返しログインしようとした場合が挙げられます。
サーバーは、ログインの認証情報ではなく、Cookieでユーザーを識別する場合もあります。リクエストはまた、サーバー上または複数のサーバー上でリクエストごとにカウントされることもあるため、このエラーが表示されるシナリオは複数あります。エラーメッセージにも以下のようなバリエーションがあります。
- 429 Too Many Requests
- 429 Error
- HTTP 429
- Error 429 (Too Many Requests)
また、エラーメッセージには、429ステータスコードが発生した原因、または再度ログインできるまでの待機時間などの追加情報も表示されることがあります。以下に例を示します。
HTTP/1.1 429 Too Many Requests
Content-type: text/html
Retry-After: 3600
<html>
<head>
<title>Too Many Requests</title>
</head>
<body>
<h1>Too Many Requests</h1>
<p>I only allow 50 requests per hour to this website per logged in user. Try again soon. </p>
</body>
</html>
エラーメッセージは様々ですが、すべてユーザーまたはコードがサーバーに過剰なリクエストを送信していていることを意味します。このエラーは時に自然に解決することもありますが、プラグインやサービス拒否(DDoS)攻撃などが原因で発生している場合は、早急にトラブルシューティングを行いたいところです。
429エラーは、ログインページに影響を及ぼす可能性が高いため、サイトの管理画面にアクセスできなくなることがあります。そのため、解決作業が少し複雑になりますが、だからこそ解決策を知っておくと便利です。
「429 Too Many Requests」エラーを解決するには(5つの方法)
なお、KinstaのWordPress専用マネージドホスティングでは、WordPressを知り尽くしたプロのエンジニアによるサポートを受けることができ、429エラーの解決も例に漏れません。Kinstaのお客様は、ぜひお気軽にカスタマーサポートをご利用ください。
それでは以下、WordPressサイトで「429 Too Many Requests」エラーが発生する主な原因を5つご紹介し、それぞれの解決策を取り上げます。
1. WordPressのデフォルトログインURLを変更する
429エラーの主な原因のひとつは、ブルートフォース攻撃。WordPressのログインページをサイバー攻撃から保護するには、URLをデフォルトのURLから変更して隠すのが手っ取り早い対策です。
WordPressデフォルトのログインページは「yourwebsite.com/wp-admin」になっています。覚えやすくて便利な一方で、誰でもログインページにアクセスできてしまうことを意味します。これは覚えやすいに違いありませんが、ウェブ上の誰もがアクセスできる場所を知っているため、まったく安全ではありません。
デフォルトのURLを変更するには、無料のWPS Hide Loginプラグインが便利です。
WordPress管理画面でこのプラグインをインストールして有効化したら、「設定」>「WPS Hide Login」タブに移動します。
この画面で簡単にログインURLを変更することができます。「login」や「wp-login」などの推測しやすい名前は避け、誰も予測できないような他にないURLにすると効果的です。
また、古いログインURLにアクセスするユーザーを別ページにリダイレクトすることも可能です。デフォルトの設定では、「/wp-admin」にアクセスしようとすると、404エラーページが表示されるようになっています。URLの設定を終えたら、変更を保存してください。
2. Really Simple SSLプラグインを無効にし、内部リンクを置き換える
セキュリティに妥協が許されない今日、サイトへのSSL(セキュアソケッツレイヤー)証明書の導入は欠かせません。同様に、サイト全体でHTTPSを使用することも重要です。HTTPSは、HTTPプロトコルよりも格段に安全であり、検索エンジン最適化(SEO)にもつながります。
HTTPSリダイレクトを設定するには、.htaccessリダイレクトを設定するかプラグインを使用します。プラグインであれば、Really Simple SSLがお勧めです。
このプラグインでは、たった数回のクリックでサイト全体にHTTPSリダイレクトを設定することができます。ただし、時折バグが発生することもあり、状況によっては429エラーが発生します。
プラグイン自体には何も問題はありませんが、HTTPSリダイレクトを設定するベストな方法というわけではありません。というのも、HTTPSを設定しても、内部リンクの処理が残ります。サイトには内部リンクが数多くあることが多く、プラグインを無効にしてから、その内部リンクすべてをHTTPSバージョンに置き換えなければなりません。
したがって、まずはこのReally Simple SSLを無効化してみます。WordPress管理画面にアクセスできる場合は、「プラグイン」画面でこのプラグインの「停止」をクリックするだけでOKです。
429エラーにより管理画面にアクセスできない場合には、FTPクライアントを使用してプラグインを手動で停止します。
Really Simple SSLを停止したら、429エラーが解消されます。管理画面にもアクセスできるようになり、プラグインを再設定して、Search and Replaceプラグインを使用して、内部リンクを一括で置き換えましょう。
プラグインを有効にし、「ツール」>「Search and Replace」に移動します。wp_postmetaテーブルを選択して、「Search」フィールドと「Replace」フィールドにそれぞれ次のパラメータを入力してください。
Search: http://yourwebsiteurl.com
Replace: https://yourwebsiteurl.com
次に、「dry run」をクリックすると、データベース内でHTTPSに置き換えられるURL(HTTP)の数がわかります。その後、実行するとすべてのリンクが置き換えられます。
なお、Really Simple SSLの停止後は、.htaccessファイルを使用してサイト全体のHTTPSリダイレクトも設定することをお忘れなく。これにより、429エラーの再発を防ぐことができます。
3. すべてのWordPressプラグインの一時停止
外部のリクエストが多すぎると、Really Simple SSL以外のプラグインもエラーの原因になることがあります。先の解決策でもエラーが修正されない場合は、すべてのプラグインを停止してみるのも効果的です。
例として、今回は管理画面にアクセスできない状況を想定します(アクセスできる場合は、「プラグイン」画面ですべてのプラグインを一括停止)。この場合は、Filezillaなどのクライアントを使用して、FTPでサイトにアクセスし、public_html/wp-content/ディレクトリに移動します。
複数格納されているフォルダの中から、pluginsフォルダを開きます。
pluginsフォルダを右クリックして、任意の名前(「plugins.deactivated」など)に変更すると、プラグインが無効になります。ただし、サイトに再度アクセスする際、空のpluginsフォルダを別途作成し、WordPressが正常に動作するようにしてください。
サイトにアクセスして、429エラーが消えている場合は、停止したプラグインのいずれかが原因であることがわかります。続いて、原因となっているプラグインを特定していきます。
- 先ほど作成した空のpluginsフォルダを削除して、以前のフォルダを元の名前(plugins)に戻す
- pluginsフォルダにアクセスする
- pluginsフォルダと同様の手順で各プラグインのフォルダのいずれかを別の名前に変更する(するとそのプラグインが停止する)
- サイトにアクセスし、429エラーが消えるかを確認する
- エラーが消えない場合は、先ほどのフォルダ名を元に戻す
- 無効にすることでエラーが消えるプラグインを見つけるまで3と4の手順を繰り返す
少し手間はかかりますが、このように利用しているプラグインを1つずつ確認することで、問題のあるプラグインを特定することができます。429エラーの原因となるプラグインを見つけたら、完全に削除してしまいましょう。
4. WordPressテーマをデフォルトのものに切り替える
429エラーの原因がプラグインでないことがわかったら、次にテーマを疑いましょう。現在使用しているテーマを無効にすると、自動的にWordPressデフォルトのテンプレートに切り替わります。
テーマを無効にする方法は、プラグインの手順とほぼ同じです。信頼できるFTPクライアントを起動して、public_html/wp-content/themes</emフォルダを開きます。現在使用しているテーマのフォルダを見つけて、名前を変更しましょう。
それからサイトにアクセスし、エラーが解消されている場合は、テーマが原因であることがわかります。また、当然ながらサイトの外観にも変化がありますが、使用していたテーマとそのカスタム設定は消えていないのでご安心を。
テーマのフォルダを元の名前(public_html/wp-content/themes</em)に戻して、再度有効にすれば元の外観に戻ります。テーマが429エラーの原因になっている場合は、テーマ開発者に報告するか、別のテーマに変更し、該当のテーマを完全に削除することを検討してください。
5. それでもエラーを解決できない場合は、ホスティング会社に問い合わせる
429エラーの原因は、サイトではなくサーバーにある可能性もあります。この場合、サイト運営者側にできることはありません。
お使いのホスティングサービスによっては、特定のサードパーティサービスやプラットフォームからのリクエストをブロックしている可能性があります。これには、サイトに多数のリクエストを行う検索エンジンやクローラーなどのアプリ(Google Search Consoleなど)が挙げられます。
ホスティング会社に問い合わせて、リクエストを許可するように依頼することで、エラーを解消できることがあります。また、ホスティング会社の制限が原因でなくても、通常解決策について助言を受けることもできます。
まとめ
WordPressサイトでエラーが発生すると、頭を抱えてしまうもの。しかし、エラーコードが表示されている場合は、そのコードから解決策を導き出すことができます。「429 Too Many Requests」エラーの場合は、リクエストが多すぎてサーバーに過負荷がかかっていることを意味するため、原因を効率的に特定することができます。
429エラーに遭遇したら、次の5つの解決策を講じてみてください。
- WordPressデフォルトのログインURLを変更する
- Really Simple SSLプラグインを停止する
- すべてのWordPressプラグインを一時的に無効にする
- WordPressテーマをデフォルトのものに切り替える
- それでもエラーが解決しない場合は、ホスティング会社に問い合わせる
WordPressの「429 Too Many Requests」エラーの解決方法についてご質問がありましたら、以下のコメント欄でお知らせください。