自分のWordPressウェブサイトをブラウジングするとき、ホワイトスクリーンエラーが発生するほど恐ろしいことないでしょう。例えば「502 Bad Gateway Error」、「データベース接続の確立中にエラーが発生」と「死の白いスクリーン」があります。ブログ、電子商取引サイトの多くには、上記が発生すると収益が落ちてしまいます。今回は、504 Gateway Timeout Errorについてご説明し、解決方法をいくつかご紹介します。本エラーの原因と今後の回避策については、下記をご参照ください。

504 Gateway Timeout Errorとは?

本エラーについて説明する前にその生成方法について説明します。ウェブサイトにアクセスするときには、ブラウザはウェブサイトがホスティングされているサーバーにリクエストを送信します。サーバーはそのリクエストを受け取り、処理し、リクエストされたリソース(PHP、HTML、CSSなど)をHTTPヘッダーと共に返信します。HTTPには、HTTPステータスコードというものも含まれます。ステータスコードは、リクエストの状態(ステータス)を通知するものです。ステータスコードは必ずしも悪い意味であるわけではありません。例えば、ステータスコード200の意味は「OK」です。

ステータスエラーコード500には意味がそれぞれ異なる種類(501502503504520など)が多いですが、すべての意味は「リクエストが受け入れられたが、サーバーはそのリクエストが実行できない」ことです。

今回の「504 Gateway Timeout Error」 (内部サーバーエラー)の意味は、「ゲートウェイとしてのサーバーは相手側のサーバーからの適切なレスポンスがなくタイムアウトした」ことです。(RFC 7231、第6.6.5条)

Chromeの「504 Gateway Timeout Error」エラー

Chromeの「504 Gateway Timeout Error」エラー

504 Gateway Timeout Errorの種類

同じ504 Gateway Timeout Errorでも、Webサーバー、オペレーティングシステム、およびブラウザーがそれぞれ異なる為、言い方が少し変わってしまう場合があります。意味はもちろん変わりません。ウェブ上で見かけることのできる種類の例をいくつか挙げます:

    • “504 Gateway Timeout”
    • “504 Gateway Timeout NGINX”
    • “NGINX 504 Gateway Timeout”
    • “Gateway Timeout Error”
    • “Error 504”
    • “HTTP Error 504”
    • “HTTP Error 504 – Gateway Timeout”
    • “HTTP 504”
    • “504 Error”
    • “Gateway Timeout (504)
    • “This page isn’t working – Domain took too long to respond”
    • “504 Gateway Time-out – The server didn’t respond in time”
    • 白いスクリーン

カスタムの504 Gateway Timeoutメッセージの会社もあります。

Githubの504 error timeout

Githubの504 Error Eimeout

504 ErrorのSEOへの影響

WordPressのメンテナンスモードの際に使用され、メンテナンスが終わったらもう一度確認するようにGoogleに指示する503エラーとは異なり、すぐにでも修正されないと、504エラーがSEOに悪影響を及ぼす可能性があります。ウェブサイトが例えば10分間だけダウンしていて、その間にクロールされていても、ページが単にキャッシュからクロールされます。あるいは、Googleは再クロールする時間さえないかもしれません。この場合には、何も問題ありません。

しかし、ウェブサイトが長期間(たとえば6時間以上も)ダウンしている場合には、Googleがその504エラーをサイトレベルの問題として扱うことがあります。これはランキングに影響を与える恐れがあります。504エラーが繰り返されることを心配している方は、まず原因を特定し、下記の解決方法を実施してみてください。

Suffering from 504 gateway timeout errors? Follow these steps to resolve them. 👍 Click to Tweet

504 Gateway Timeout Errorの解決方法について

504 Gateway Timeout Errorをどの手順で直せばいいでしょうか。経験者のない方なら迷ってしまうでしょう。本エラーは通常ネットワーク側またはウェブサイトがホスティングされるサーバー側の異常ですが、お客様側で発生する場合、またはサードパーティ製プラグインのせいで発生する場合さえあります。今回は両方についてご説明します。504 Gateway Timeout Errorの一般的な原因と解決方法を是非ご確認ください。

1. ページを再読み込みする

これは当たり前のことかもしれませんが、504 Gateway Timeout Errorが発生したときに試しておくべき最も簡単な対策の1つは、1分ほど待ち、ページを再読み込みすることです(F5またはCtrl + F5)。ホストまたはサーバーが過負荷になっているだけで、ウェブサイトがすぐに戻ってくる可能性があります。待っている間に、別のブラウザでもアクセスしてみて、ブラウザ異常を考慮から外すことができます。

もう一つのできることは、downforeveryoneorjustme.comにあなたのウェブサイトを貼り付けることです。このウェブサイトでは、あなたのウェブサイトが本当にダウンしているのか、あなたの側の問題なのか確認できます。このツールはサーバーから返されるHTTPステータスコードを確認します。「OK」を意味する200以外のステータスコードの場合は、それを表示します。

downforeveryoneorjustme

downforeveryoneorjustme

2. プロキシ設定を無効にする

プロキシサービスをご利用の場合は、504エラーが発生することがあります。特にクライエント側だと珍しいことですが、お客様が知らずにプロクシサーバーが設定されることがあります。プロキシを無効にするよう、または無効に設定されていないかを確認するように、下記の手順に従ってください。

Chromeプロキシ設定を無効にする

Chromeプロキシ設定を無効にする

3. DNS異常

504 Gateway Timeout Errorは、DNS異常を原因に発生こともあります。これも2種類あります。1種類はメインの正しいIPへの解決ができないなど、サーバー側の異常です。WordPressウェブサイトを移行したばかりの場合は、完全に伝播するまでに待つしかありません。(場合により最大24時間もかかることがあります。)DNSレコードのTTL値によります。DNSMapなどの無料のツールでDNSが伝播しているかを確認できます。

DNS伝播を確認する

DNS伝播を確認する

2種類目はクライエント側のDNS異常です。ローカルDNSキャッシュをフラッシュすることも試してみる価値があります。ブラウザのキャッシュをクリアするのと同様です。

Windowsでは、Command Promptを開き、次のように入力します:

ipconfig /flushdns

Command promptでDNSをフラッシュする

Command promptでDNSをフラッシュする

成功した場合は、「Successfully flushed the DNS resolver Cache」(DNS解決キャッシュが正常にフラッシュされました」と表示されます。

macOSご利用の方は、ターミナルに次のように入力してください:

dscacheutil -flushcache

注:Macには成功した場合のメッセージはありません。

最後に、一時的にDNSサーバーを変更することもできます。DNSサーバーはISPにより自動的に割り当てられますが、これらを一時的にGoogleなどのパブリックなDNSサーバーに変更してみることができます。実は、GoogleのパブリックなDNSを長期間使用する方もいます。

4. CDNを一時的に無効にする

また、コンテンツ配信ネットワーク(CDN)の異常の可能性もあります。サードパーティ製のCDNプロバイダをご利用の場合は、CDNを一時的に無効にすることにより、対応しやすいです。たとえば、当社のメンバーが無料のCDN enablerプラグインが大好きです。本プラグインをご利用の場合は、単にプラグインを無効にしウェブサイトを確認するだけです。ウェブサイトのダッシュボードにアクセスできない場合は、SFTP経由でウェブサイトにログインし、プラグインのフォルダの名前をcdn-enabler_oldに変更します。これにより、一時的にCDN接続が無効になります。WP Rocket及びその他のプラグインも同様です。

プラグインのフォルダの名前を一時的に変更する

プラグインのフォルダの名前を一時的に変更する

CloudflareあるいはSucuriなどの会社でも、追加のファイアウォールがあるため、同じエラーが発生することがあります。オリジンサーバーから返されたときに500のステータスコードをキャッシュしてしまう場合があります。Cloudflareの無料のプランでたまに発生することがわかりました。残念ながら、Cloudflareは完全なプロキシサービスであるため、単に無効にする簡単な方法はありません。

しかし、Cloudflareに問い合わせをする前に、Cloudflare関係の504 Gateway Timeout Errorが以下に示すように2種類もあることを覚えておいてください。

Cloudflareの504 Gateway Timeoutエラー(種類その1)

次の画面が表示された場合、Cloudflare側の異常に違いありません。顧客サポートに問い合わせをしてください。またはステータスページを確認してください。ほとんどの場合、Cloudflareはすでに課題を認識しており解決に取り組んでいます。

Cloudflareの504 Gateway Timeout

Cloudflareの504 Gateway Timeout

Cloudflareの504 Gateway Timeoutエラー(種類その2)

次の画面が表示された場合、ホスティング会社(オリジンサーバー)側に発生した異常です。その場合は、下記の5番の推奨事項に従ってください。

ホスティング会社側のCloudflareの504 gateway timeout error

ホスティング会社側のCloudflareの504 gateway timeout error

アップロード関係のCloudflareの504 Gateway Timeoutエラー

アップロードのサイズもタイムアウトの原因になることがあります。Cloudflareでは無料プランの投稿(アップロード)の最大サイズは100MBに制限されておりますが、100MB未満のファイルでも本エラーが発生する場合があります。場合により、ホスト側でもCloudflare側でも発生することがあります。DNSホストファイルでCloudflareをバイパスし再度アップロードしてみることにより、発生カ所を簡単に特定できます。または単にCloudflareを一時的に無効にすることもできます。

WordPressでCloudflareをご利用の場合は、Cloudflareの無料のプラグインを使用し、重要なURL(WordPressの管理画面など)をキャッシュから除外することをおすすめします。

5. サーバー異常(ホスティング会社に問い合わせ)

WordPressウェブサイトで504 Gateway Timeout Errorが発生する最も一般的な原因の一るは、サーバー異常です。簡単に言いますと、NginxまたはApacheがどこかからの応答を待っているが、時間がかかりすぎたということです。Kinsta以外のWordPressホスティング会社を利用したが常時本エラーが発生したことを理由に当社に切り替わったお客様が多いです。例えば、下記のような連絡をよくいただいております:

僕らは月当たり約100,000名の訪問者と200,000件以上のページビューのウェブサイトを持っています。 現在〇〇社を利用しており、最近はサーバーの過負荷のために504エラーが数多く発生しました。そこで〇〇社の対応が悪く、僕らのサイトを専用プランに移行するように推進されましたが、僕がそれが不要だと判断しています。

504エラーは、サーバーの過負荷を起こす為、キャッシュ不可能なリクエストかつトラフィックの多いウェブサイト、特にWooCommerceなどの電子商取引サイトで頻繁に発生していますが、どのウェブサイトでも、例えばシンプルなブログでも発生することがあります。そこで、ホスティング会社の多くが、問題を解決するために高いプランにアップグレードする必要があると言っているだけです。なお、ほとんどの場合はアップグレードをすると問題が解決するし、本当に必要な場合もありますが、不要な場合もあります

Kinstaは、各サイトに対して、LXDで管理されたホストと、LXCソフトウェアコンテナを利用しています。つまり、すべてのWordPressサイトが、それを運営するのに必要なすべてのソフトウェアリソース(Linux、Nginx、PHP、MySQL)を持つ、独自の独立したコンテナに格納されています。 リソースは100%プライベートであり、他の誰かと(それどころか自サイト内でも)共有されることはありません。WordPressの共有ホストなら、このような機能がないため、同じサーバーのトラフィックの多いウェブサイトで504エラーが発生したときに、あなたのウェブサイトも影響を受ける場合があります。

ウェブサイトが隔離されているだけでなく、当社のインフラストラクチャーが同時の接続を数千も簡単に処理できるように構築されています。MySQLデータベースは、リモートサーバーではなく、ローカルホストにてホスティングされます。これにより、マシン間の待ち時間がなくなり、クエリが高速化し、ページの読み込み時間が短縮されます。

サーバーの負荷によるタイムアウトのほかに、504エラーが発生する理由がいくつかあります:

  • 遅いサーバー:WordPressウェブサイトがホスティングされるサーバーが単に遅く、リクエストに応答するのに時間がかかるため、ゲートウェイエラーが発生する可能性があります。
  • PHPワーカーが足りない:PHPワーカーはWordPressサイトのコードを実行するものです。リクエストの多いウェブサイトだと、PHPワーカーが忙しくキューを構築する場合があります。キューとバックログがいっぱいになると、古いリクエストが無視されます。そこで、PHPワーカーの数を増やすようにホスティング会社に申請することができます。PHPワーカーが追加されると複数のリクエストが同時に実行できるようになります。
  • ファイアウォールの異常:サーバー上のファイアウォールに、エラー、不適切なコンフィギュレーション、または正常の接続を防ぐルールがある可能性があります。
  • ネットワーク接続:プロキシサーバーとWebサーバー間のネットワーク接続に異常がある場合、HTTPリクエストの応答が遅れることがあります。または、ロードバランサが使用されている場合は、ロードバランサとのネットワーク接続の異常も発生することがあります。
  • HTTPタイムアウト:ブラウザとWebサーバー間の接続が長時間開いている場合にHTTPタイムアウトが発生することがあります。WordPressのインポートを実行するときによく発生します。そこで解決方法の1つは、より高速なインターネット接続に切り替えることです。または、WordPress ImporterプラグインなどのWP-CLIをサポートするツールを使用することにより、HTTP接続を完全にバイパスしてサーバー上で直接インポートを実行することもできます。注:Kinstaでは、これができるために、SSHアクセス付きのプラン(Business 1以上)が必要です。

なお、504エラーは、503 service unavailable errorまたは502 bad gateway errorに似ていますが、本質が異なるものです。Kinstaのお客様で504エラーが発生した場合には、単にサポートチケットを開いていただき、お任せください。当社はNew Relicでこのようなエラーを常時監視している為、すでに調査中である可能性が高いです。

WordPressのサポートチケット

WordPressのサポートチケット

このエラーの再発をご心配の方は、updown.ioなどツールを利用することにより、ウェブサイトを監視し、再発のときに直ちに通知してもうこともできます。ツールが定期的にHTTP HEADリクエストをあなたの選択したURLに送信します。単にホームページを選択した方がよいでしょう。確認頻度は以下のどちらかを設定できます:

  • 15秒
  • 30秒
  • 1分
  • 2分
  • 5分
  • 10分

ウェブサイトがダウンしたときに、メール通知します。以下はその例です。

504エラーのメール通信

504エラーのメール通信

不具合のあるプラグインをデバッグしようとしている場合、またはサーバーを混雑させる傾向のある共有ホスティング会社をご利用の場合には特に便利です。例え夜中でもウェブサイトがダウンしている頻度の証拠にもなります。これこそは、必ずマネージドWordPressホスティング会社のご利用をお勧めする理由です。マネージドWordPressホスティングを選ぶ9つの理由についての当社の記事も是非ご確認ください。

6. スパム、ボット、DDoS攻撃

ウェブサイトがボットによりスパムされているあるいはDDoS攻撃を受けている可能性もあります。スパムとDDoS攻撃によりキャッシュ不可能リクエストが発生し、サーバーの過負荷が起こり、504 Gateway Timeout Errorが発生することがあります。サーバー分析データを見て、疑わしいパターンがないか確認できます。Kinstaでは、分析データがMyKinstaの分析ツールでご確認いただけます。また、あなたのホストからもこのデータを申請することができるはずです。最初に確認する価値のあるレポートは、トップクライアントのIPリストです。ウェブサイトが突然多くのバンドウィズを生成しているとき、またはボットの攻撃を受けているときに便利です。

Geo & IP - top client IPs

ジオとIP:クライアントIPのトップリスト

2番目に確認した方がいいレポートは、キャッシュ分析です。ここでは、キャッシュをバイパスしているリクエストの数、キャッシュのないリクエストの数、およびサイトのトップのロケーションが確認できます。パフォーマンスと安定性の理由から、できるだけ多くのリクエストがキャッシュされた方がいいです。なお、ショッピングカートまたはチェックアウト機能のあるWooCommerceなどのキャッシュ不可能なリクエストの多いウェブサイトもあるため、上記ができない場合もあります。

キャッシュ分析

キャッシュ分析

ブロックすべきトラフィック及び IPを特定した場合には、WordPressセキュリティプラグインを使用した方が良いでしょう。なお、Kinstaではセキュリティプラグインのご利用を許可していないことをご了承ください。理由はいくつかあります。まず、パフォーマンス、特にスキャン機能に大きく影響してしまうことです。それに、当社がGoogle Cloud Platform上のロードバランサを採用しており、IPブロッキングが機能しない可能性もあります。

もちろん、IPはKinstaのサポートチームによりブロックされることが可能ですが、攻撃の長さ及び規模によってはIPのブラックリスト化は終わりのない作業で、十分な解決策にはならない場合があります。1つの場所からブロックされた攻撃またはスパムは、単に別の場所から再度攻撃を仕掛ける、またはIPアドレス及びプロキシアドレスを変更する場合が多いです。この場合、CloudflareまたはSucuriなどのセキュリティソリューションをお勧めします。

WordPressウェブサイトへのCloudflareのインストール方法についての記事と、当社のお客様がSucuriを使ってDDoS攻撃を止めたケーススタディも是非ご確認ください。

7. プラグインとテーマを確認する

サードパーティ製プラグインまたはテーマでは、504 Gateway Timeout Errorを起こさないという方が多いです。ほとんどの場合、起こさないことに違いありません。しかし、当社の経験では、プラグインからの遅いキャッシュされていないリクエストがPHPワーカーを使ってしまい、遅れが発生する可能性があります。PHPワーカーの制限を超えてしまうときに、キューは古いリクエストを削除しはじめ、504エラーが発生する場合があります。これは、キューで60秒のタイムアウト後に発生する502 Bad Gateway Errorとは違うエラーですので、ご注意ください。

トラブルシューティングするには、すべてのプラグインを無効にすることができます。プラグインを無効にするだけでは、データを失うことはありません。管理画面にアクセスできる場合は、「プラグイン」をアクセスし、「一括操作」メニューの「無効にする」を選択するだけです。これにより、すべてのプラグインが無効になります。

すべてのプラグインを無効にす

すべてのプラグインを無効にす

これで問題が解決した場合は、原因を特定する必要があります。プラグインを1つずつ起動し、起動し始めた度にウェブサイトを再読み込みします。504 Gateway Timeout Errorが再発すると、原因となるプラグインを特定できました。そこで、プラグインの開発者に問い合わせするか、WordPressリポジトリでサポートチケットを作成することができます。

管理画面にアクセスできない場合は、FTP経由でサーバーにログインし、プラグインフォルダの名前を「plugins_old」などに変更する必要があります。その後、ウェブサイトを再度確認してください。これでエラーが回復した場合には、各プラグインを1つずつテストする必要があります。プラグインフォルダの名前を「plugins」に戻し、その中の各プラグインのフォルダ名を順番に変更します。最初のステージングサイトで実施してみてもかまいません。

プラグインのフォルダ名を変更する

プラグインのフォルダ名を変更する

プラグイン、テーマ、WordPressのコアが常に最新版であるようにしてください。または、ご利用のPHPバージョンがサポートされていることもご確認ください。不明点がございましたらホスティング会社にお問い合わせください。Kinstaでは、New Relicなどのトラブルシューティング方法を採用し、お客様の制限異常を引き起こすプラグイン、クエリ、またはスクリプトを特定します。独自のカスタムのNew Relicキーを使用することも可能です。

時間のかかるデータベースへのクエリ

時間のかかるデータベースへのクエリ

プラグインのクエリまたはコードの異常が本エラーの原因である場合は、対応はWordPressの開発者に任せる必要があります。

8. ログを確認する

また、エラーログを活用することもできます。Kinstaのお客様は、MyKinstaダッシュボードのログビューアを使用し、簡単にエラーが確認できます。特にウェブサイトのプラグインに起因するエラーの場合には、非常に便利です。

502 Bad Gateway Errorの発生時にサーバーエラーを確認する

502 Bad Gateway Errorの発生時にサーバーエラーを確認する

あなたのホストにはロギングツールがない場合は、次のコードをwp-config.phpファイルに追加することによりロギングを有効にすることもできます。

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
wordpress error logs folder sftp

WordPress error logs folder SFTP

また、ApacheとNGINXのログファイルも確認できます。これらのふぁいつの一般的な場所は:

  • Apache: /var/log/apache2/error.log
  • Nginx: /var/log/nginx/error.log

Kinstaのお客様には、504エラーの合計数と頻度を把握するに当社の分析ツールもご利用いただけます。トラブルシューティングすべき発生中の異常なのか、解決済みの異常なのか確認できます。

レスポンス分析500エラーの内訳

レスポンス分析500エラーの内訳

9. Nginxの設定

Nginx + FastCGI (php-fpm) またはApacheのプロキシとしてのNginxを使用し、独自のサーバーとWordPressウェブサイトをご管理の方なら、以下の設定変更を実施し504 Gateway Timeout Errorを防止してください。

Nginx + FastCGI (php-fpm)での504 Gateway Timeout Error

Nginx + FastCGI (php-fpm)をご利用の方は、まずPHP-FPMファイルを変更してください。/etc/php5/fpm/pool.d/www.conf にアクセスしてください。(注:場所はPHPバージョンにより異なる場合があります。)次のディレクティブを設定します:

request_terminate_timeout = 300

次に、通常は/etc/php.iniにあるphp.iniファイルを変更します。max_execution_timeディレクティブを検索し、ディレクティブが存在している場合は、その値を300に増やします。存在していない場合は、追加します:

max_execution_time = 300

最後に、nginx.confファイルを変更します。Nginxの仮想ホスト設定に次を追加します:

location ~ .php$ {
...
fastcgi_read_timeout 300;
}

その後、NginxとPHP-FPMを再読み込みします。

service nginx reload
service php5-fpm reload

Nginxプロキシの504 Gateway Timeout Error

ApacheのプロキシとしてのNginxをご利用の場合は、nginx.confファイルに次を追加します:

proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;

その後単に、Nginxを再読み込みします。

service nginx reload

まとめ

ご覧の通り、WordPressウェブサイトの504 Gateway Timeout Errorのトラブルシューティングの手順が、さまざまな方法があります。 ほとんどの場合はサーバーの異常で、直ちにホストに連絡して解決してもらった方がいいでしょう。しかし、サードパーティ製のプラグインまたはPHPワーカーのキュー及びバックログの過負荷により発生する場合もありますので、ご注意ください。

PHPワーカーが足りない場合は、Kinstaのサポートチームにお問い合わせいただくか、Webパフォーマンスの最適化を専門とするWordPressの開発者を雇うことをお勧めします。ウェブサイトを確認し、プラグイン、テーマ、クエリなどが正常に機能していることだと、プランをアップグレードしたり、PHPワーカーの数を増やす必要があるかもしれません。

見逃したことはありますか。504 Gateway Timeout Error のいい解決方法をご存じでしたら、是非コメントを書いて教えてください。


この記事が面白いと思った方は、KinstaのWordPressホスティングプラットフォームも大好きでしょう。ウェブサイトをスピードアップし、当社のベテランのWordPressチームからの24時間365日のサポートを是非ご利用ください。Google Cloudを使用したインフラストラクチャは、自動スケーリング、パフォーマンス、およびセキュリティに重点を置いています。Kinstaの魅力をご案内させてください。当社のプランをご確認ください。