2026年8月6日

2026年8月6日

さくらのウェブアクセラレータ導入後のトラブル事例と切り分け方(WordPress)

さくらのウェブアクセラレータを WordPress に導入した後のトラブルは、「キャッシュされない」「更新が反映されない」「リダイレクトが止まらない」「ログイン状態の表示が他人に見える」など、いくつかの型に分けられます。この記事では、起きやすい順にそれぞれの症状、確認方法、直し方を説明します。費用を抑えるための設定は別記事で扱う内容なので、ここではトラブルの切り分けに絞ります。

管理画面の項目名や対応機能は更新されることがあります。以下は(2026年10月現在)の一般的な仕様を前提にしているため、細かな設定名は公式マニュアルで確認してください。

前提:ウェブアクセラレータの動き方

ウェブアクセラレータは、オリジンサーバーが返すレスポンスヘッダー(主に Cache-Control や Expires)を見てキャッシュするかどうかを決めるタイプの CDN です。CDN 側で「この拡張子は何時間キャッシュ」と細かく決めるのではなく、オリジンの返し方が結果を左右します。したがって、多くのトラブルは「オリジンが何を返しているか」を見れば原因に近づけます。

切り分けでは、CDN 経由とオリジン直の応答を比べます。オリジン直へは、DNS を変えずに --resolve でオリジンの IP を指定して確認すると便利です。

# CDN 経由
curl -sI https://www.example.com/

# オリジン直(203.0.113.10 はオリジンの IP の例)
curl -sI --resolve www.example.com:443:203.0.113.10 https://www.example.com/

Cache-Control、Set-Cookie、Location、Age の4つを中心に見比べます。Age が付いて増えていけば、CDN のキャッシュから返っていると判断できます。

事例1:キャッシュがほとんど効かない

導入したのに表示速度が変わらない、オリジンのアクセス数が減らない、というケースです。原因として多い順に挙げます。

  1. **オリジンが Cache-Control を返していない**:ヘッダーがないとキャッシュされない仕様の場合、静的ファイルも毎回オリジンへ問い合わせます。Web サーバーの設定で、画像・CSS・JS に Cache-Control: public, max-age=... を付けます。
  2. **Set-Cookie が付いている**:セッションを開始するプラグインやアクセス解析の仕組みが、すべてのページで Cookie を発行していることがあります。Cookie を発行するレスポンスはキャッシュされにくいため、どのプラグインが発行しているかを切り分けます。
  3. **private や no-cache が付いている**:キャッシュ系プラグインやサーバー側の設定で、意図せずキャッシュを禁止していることがあります。

オリジン直の応答で上記を確認し、修正後に CDN 経由で Age が付くかを確かめます。

事例2:記事やCSSを更新しても反映されない

キャッシュが効くようになると、今度は更新が反映されない問題が出ます。HTML に長い max-age を付けると、記事の修正が利用者に届くまで時間がかかります。

  • CSS・JS:WordPress が出力する ?ver= のバージョンを更新時に変えれば、新しい URL として取得されます。子テーマの CSS は filemtime() をバージョンに使う方法が手軽です。
  • HTML:max-age を短めにするか、公開・更新のたびにキャッシュを削除する運用にします。ウェブアクセラレータにはキャッシュ削除の機能(コントロールパネルや API)があるので、手動で消すか、更新フックから API を呼ぶ仕組みを用意します。API の仕様と認証方法は公式ドキュメントを確認してください。

事例3:リダイレクトループになる

ページを開くと「リダイレクトが繰り返し行われました」と表示される場合、HTTPS の判定がずれています。利用者とウェブアクセラレータの間は HTTPS でも、ウェブアクセラレータとオリジンの間が HTTP だと、WordPress は HTTP でアクセスされたと判断して HTTPS へリダイレクトし、それが繰り返されます。

確認と対処

  • オリジン直で curl -sI を実行し、Location が同じ URL を指していないか確認する
  • ウェブアクセラレータからオリジンへの接続を HTTPS にできるなら、それが最も単純な解決策
  • オリジンへ HTTP で接続する構成のままにする場合は、CDN が付ける転送ヘッダー(X-Forwarded-Proto など。付与の有無はサービス仕様を確認)を見て、wp-config.php で $_SERVER['HTTPS'] = 'on'; を設定する。このとき、オリジンへの直接アクセスでヘッダーを偽装されないよう、アクセス元の制限もあわせて行う

.htaccess やサーバー設定の HTTPS リダイレクトと、プラグイン(Really Simple Security など)のリダイレクトが二重になっていることもあるので、どちらか一方に寄せます。

事例4:ログイン中の表示や個人情報が他の人に見える

最も深刻なトラブルです。管理バーが表示されたページや、会員の名前が入ったページがキャッシュされ、他の訪問者に配信される状態です。気づいた時点で、該当ページのキャッシュを削除し、HTML を CDN 経由にするのを一時的にやめることを優先してください。

WordPress はログイン中のリクエストに対してキャッシュを抑止するヘッダーを送る実装になっていますが、キャッシュ系プラグインやサーバー設定で Cache-Control を一律に上書きしていると、この指定が消えます。

  • ログインした状態とログアウトした状態の両方で、オリジン直の Cache-Control を確認する
  • サーバー設定で HTML に一律の max-age を付けていないか確認する
  • EC や会員サイトなど個人ごとの表示が多いサイトは、HTML を CDN に載せず、静的ファイルだけを配信する構成を検討する

事例5:アクセス元IPがすべて同じになる・セキュリティ機能が誤作動する

CDN を経由すると、オリジンから見た接続元はウェブアクセラレータのサーバーになります。その結果、次のような問題が起きます。

  • アクセス解析やログで、利用者の IP が記録されない
  • Wordfence などのセキュリティプラグインや、サーバーのレート制限が CDN の IP を遮断し、サイト全体が表示されなくなる
  • コメントスパム対策が、全員を同じ人物として扱う

対処として、Web サーバーで CDN から届く転送ヘッダーを信頼する設定(Nginx の set_real_ip_from と real_ip_header、Apache の mod_remoteip など)を入れ、信頼する送信元を CDN のアドレス範囲に限定します。セキュリティプラグイン側にも、クライアント IP の取得方法を選ぶ設定がある場合が多いので、あわせて確認します。

事例6:独自ドメインで証明書エラーが出る

独自ドメインで配信する構成では、ウェブアクセラレータ側に証明書を設定する必要があります。

  • DNS の CNAME がウェブアクセラレータの指定先を向いているかを dig +short www.example.com CNAME で確認する
  • 証明書をアップロードした場合は、有効期限と中間証明書を openssl s_client -connect www.example.com:443 -servername www.example.com -showcerts で確認する
  • 証明書の更新を手作業で行っている場合、期限切れが典型的な原因になるため、外部の監視サービスで期限を見張る

作業時の注意

設定を変える前に、サーバー設定ファイルと WordPress のバックアップを取ります。DNS を切り替える作業は、TTL を短くしておくと、問題があったときに早く戻せます。

まとめ

  • ウェブアクセラレータはオリジンのレスポンスヘッダーに従うため、オリジン直の応答確認が切り分けの出発点
  • キャッシュが効かない原因は、Cache-Control の欠如、Set-Cookie、private 指定の順に多い
  • リダイレクトループは CDN とオリジン間のプロトコルのずれ。HTTPS 接続か転送ヘッダーで解決する
  • ログイン中ページの配信事故は最優先で止め、HTML を載せる範囲を見直す
  • 接続元 IP の扱いと証明書の期限も、導入後に見落としやすい点

お気軽にご相談ください

お見積りへ お問い合わせへ
▲