【wp-cron.php】コンテンツブースト等のCDN利用時にWordPressの自動更新がかからずセキュリティリスクが生じてしまう場合の対処方法

最近はさくらインターネットのコンテンツブーストなど、手軽にCDN機能が使えるようになってきました。しかし、CDNを利用していると、Wordpressの自動更新が効きにくく、Wordpress本体やプラグインの更新が遅れてしまい、セキュリティリスクが生じてしまう場合があります。その場合の対処方法です。

WordPressの自動更新機能について(ON・OFFが設定できる場所の確認)

WordPressには自動的にシステムをアップデートする機能が備わっています。アップデートのタイミングはアクセスがあった場合に一定確率で更新確認とアップデートが行われるようになっています。

WordPress本体については、特に何もしなければ自動更新されるようになっています。プラグインなどで自動更新をOFFにすることもできますが、個人的には自動更新ONの方が良いと思います。(更新して問題が起こるリスクよりも、更新しない場合のリスクの方が大きいという考えです。)

テーマについては、管理画面「外観→テーマ」で各テーマをクリックして拡大表示すると、「自動更新を有効化」または「自動更新を無効化」という文字が出てくるので切り替え可能です。

テーマの自動更新

プラグインについては、管理画面「プラグイン」の画面から自動更新を切り替え可能です。

個人的には、すべての自動更新をONにしておいた方が良いという考えです。時々「アップデートしたら表示が崩れるからアップデートしないほうが良い」というアドバイスを見聞しますが、古いタイプのエンジニアさんや、スキルの低い業者さんから聞くことが多いです。

CDNとは(この記事を見てる人は分かってると思うのでざっくり)

CDNは、元のサーバとは別の、配信専用サーバーからコンテンツを配信することで、Webページの読み込み速度を向上させる仕組みです。Webサイトの遅延を減らし、パフォーマンスを向上させることができます。

CDNを使うと自動更新が効きにくくなる理由

WordPressでは、Webサイトにアクセスするたびに、(たとえ各種キャッシュプラグインをインストールしていたとしても)複雑な処理が行われてからページが表示されるので、サーバに負荷がかかるし、サイトの表示も遅くなりがちです。

CDNを利用すると、配信専用サーバがWordpressへのアクセスを肩代わりしてくれるので、負荷の低減と表示の高速化が見込めます。

しかしこれは、言い換えればWordpress本体へのアクセスが激減するということです。Wordpressの自動更新はアクセスがあったタイミングで行われるので、結果的に自動更新のタイミングが遅くなる問題があります。

この現象は、ものすごくアクセス数が少ないWordpressで構築したサイトにおいて、全く更新が行われない・更新が遅くなる・セキュリティ被害に遭遇しやすいのと似ています。更新が行われないのでセキュリティホールが放置され、不正アクセスを招きやすいです。情報流出だけでなく、サイト書き換え・サイトの乗っ取り・他のサイトへの踏み台など様々な問題が発生します。

対処方法:「wp-cron.php」を定期的に実行すること

wp-cronは、Wordpressの機能でスケジュールに基づいた様々な処理を行うための仕組みです。定期的なアップデート確認などもこれで行うことが出来ます。

※一部「Wordpressのパフォーマンスに影響があるからwp-cronを止めろ」「dos攻撃されるから止めろ」という記事がありますが、代替えできるスキルが無い限りは安易に止めないほうが良いと思います。

具体的な対処方法は次の通りです。

方法1:CDNが効かないようにして定期的にアクセス(めんどい)

wp-cronを実行するには、[WordpressのURL]/wp-cron.php にアクセスします。 サイトのトップページのURLが https://example.com/ なら(標準的なインストールであれば) https://example.com/wp-cron.php にアクセスすることで、wp-cronを実行できます。CDNが設定されている場合には、CDNが効かないように設定しておく必要ががります。

方法2:定期的に管理画面にログイン(これもめんどい)

2つめの方法は、定期的(例えば数日に1回)に管理画面にログインすることです。専門的な説明は省きますが、通常管理画面にはCDNが効かないのでこのタイミングでwp-cronが自動実行されます。

方法3:cronで定期実行(技術的制約はあるが個人的にはオススメ)

利用中のサーバを選びますが、cronを設定できるレンタルサーバであれば、wp-cronを自動実行できるのでお勧めです。筆者の場合はこの方法が一番安定しているし更新もしっかりかかるので好きな方法です。以下、さくらインターネットのレンタルサーバでの設定方法を記載します。

さくらインターネットのレンタルサーバの場合

まず、さくらのレンタルサーバコントロールパネルにログインします。

さくらのレンタルサーバーコントロールパネル

次に「スクリプト設定→CRON設定」に進みます。

CRON設定

「スケジュール追加」ボタンをクリックすると、設定ウインドウが表示されるので各項目を埋めていきます。

桜のレンタルサーバCRON設定具体例

実行コマンドに、実行内容を書いていきます。初期ドメインが「xxxxxxxx.sakura.ne.jp」で、ドキュメントルート(www)にWordpressをインストールしている場合は以下のようになります。(「xxxxxxxx」の部分はユーザー名によって変わります。)

/usr/local/bin/php /usr/local/bin/php /home/xxxxxxxx/www/wp-cron.php 1> /dev/null

コメントは任意なので「メインサイトのwp-cron実行」とか何とか分かりやすいものを入れます。

実行日時で実行のタイミングを指定します。1時間に1回(毎時0分)にするときは、以下のように設定します。

  • 月:*
  • 日:*
  • 時:*
  • 分:0
  • 曜日:全部のチェックをON

画面の実行頻度は5分に1回にしてますが、実用上は1日1回とか1時間に1回くらいで十分だと思います。

その他の参考情報

その他、wp-cronについては、「wp-cron 代替」などで検索すると色々な記事が出てくると思います。Linuxサーバの場合は直接 cron に設定してしまう例も見つかると思います。

wp-cronに外部アクセスを許しているとサイト全体のパフォーマンスが悪くなる場合もあるのであえて止めて別の方法で実行する方法も紹介されていますね。

『WordPress WP-Cron を止めて OS層の Cron で実行する方法 | Fand.jp Blog』
https://fand.jp/wordpress/how-to-stop-word-press-wp-cron-and-run-it-with-system-cron/

『WP-Cronを無効化してWordPressサイトのパフォーマンスを改善する方法を解説|SEEDS knowledge』
https://blog.seeds.ne.jp/disable-wp-cron-improve-performance/

『WP-Cron(wp-cron.php)を無効にしてパフォーマンスを改善する方法| Kinsta®』
https://kinsta.com/jp/knowledgebase/disable-wp-cron/

なんか…セキュリティリスクの側面よりもむしろパフォーマンスからの視点の記事が多いんですね。参考になれば幸いです。

質問・コメントなどあると嬉しいです