これを見た瞬間、冷や汗や動悸が止まらなかったことを思い出します。
「早くブログにアクセスできるようにならないとPV数が…」
「検索順位に影響は無いか?」
「いつ治るんだよこれ!!!」
メンタル不調になりながらも必死で検索して調べまくるんですが、中々改善方法が見つからない。
というか、原因が様々考えられるため解決策が1つではないのが正確です。
今回は、自分の実体験を元に原因と解決策をまとめました。
この記事を書いた人
✅ブログ歴:6年
✅月間30万PV(記事数8000)のブログを運営中
「504 gateway timeout」が出た時の環境
サーバーはエックスサーバーです。
事象として、昨日までは何事もなかったけど今日になって「504 gateway timeout」が発生しました。
昨日~今日にかけて特別なことは何もしていません。
通常通り記事の更新をしている中で発生しました。(一番困るやつ)
そもそも「504 gateway timeout」とは
エラーコードを詳しく書くとこんな感じです。
- 504(HTTPのエラーコード)
- gateway(サーバーの入口)
- timeout(時間切れ)
要はブログへのアクセスがあったけどサーバー側で処理しきれず一時的に落ちてる状態のことです。
「504 gateway timeout」の原因
主な原因は以下の2つ。
- サーバーが過負荷の状態
- タイムアウトの時間が短い
自分の場合、「サーバーが過負荷の状態」であることが当てはまりました。
理由として、「504 gateway timeout」が発生した時点でエックスサーバーが落ちている等の事象は無し。
となると、タイムアウトの時間が怪しいところですが、こちらもデフォルトより高い値なので違う、
タイムアウトの時間は、「php.ini」から確認できます。
サーバーパネル > PHP > php.ini設定
※デフォルトは「30」
「サーバーの過負荷状態」の原因として、記事のリビジョンが挙げられます。
記事を更新すると、前回更新分がリビジョン(前回更新分のバックアップ)が蓄積されていきます。
例えば、1つの記事を100回更新するとリビジョンが100個蓄積されることに…。
単体で見ると大したことないんですが、これが増えるとサーバーの容量を圧迫し応答時間に影響が出ます。
自分の場合、記事数が8000程ある状態で毎日数百~数千記事を更新していたため膨大なリビジョンが生成されていました。
そりゃサーバーの容量を圧迫するよね…。
数千記事で構成された特化ブログでない限りはこの事象は起こりにくいと思いますが、これが一番の原因でした。
「504 gateway timeout」の解決策
記事の古いリビジョンを削除することで解決します。
記事のリビジョンは、「Optimize Database after Deleting Revisions」のプラグインを使用することで削除できます。
設定方法については、【処理速度改善】Optimize Database after Deleting Revisionsのオススメ設定の記事で詳しく解説しています。
頻繫に特定の記事を更新するのであれば、周期的にリビジョンを削除することをオススメします。
基本的に古いリビジョンは見ないことがほとんどだと思うので、3~5つ分残っていれば十分かと思います。
「504 gateway timeout」のまとめ
見るべきポイント
- 記事のリビジョンは多くない?
- タイムアウトの時間は短くない?
自分的にですが、まずは記事のリビジョンを疑ってみましょう。
ブログ運営歴が長くなると、記事数が増えたりリライトしたりでリビジョンは増え続けます。
この数が多い程、「504 gateway timeout」への道は近くなります。
古いリビジョンの削除でも解決しない場合、「php.ini」の「max_execution_time」を見てみましょう。
デフォルト「30」の値を増やすことで解決できる場合があります。
※max_execution_timeは30区切りでの調整を推奨
自分の場合は8000記事あり、かつ更新頻度が激高だったので膨大なリビジョンが生成されていたのが原因でした。
このケースは稀だと思いますが、「504 gateway timeout」でお悩みの場合は上に書いたことを試してみてください。