ブログ

Xserverでサイトが丸ごと501になった話 ― WAF誤検知と広告自動テストの落とし穴

はじめに

2025年8月、WordPressサイトが突然 「501 Not Implemented」 を返す事象が発生しました。
トップページや記事ページだけでなく、静的ファイル(health.html / health.php)もすべて 501。
エラーログも空で、通常のWordPress障害と異なる挙動でした。

本記事では、発生状況から切り分け、最終的に特定した原因と教訓を記録します。


発生状況

  • WordPressの全ページ → 501
  • 静的ファイル(health.html / health.php) → 501
  • サブディレクトリの別WordPress(/sub/) → 501
  • エラーログ → 記録なし
  • アクセスログ → 501 の記録あり

アプリ層ではなく、サーバー層でリクエストがブロックされていると推測しました。


調査過程

パーミッション確認

ディレクトリ 755 / ファイル 644 に是正 → 変化なし。

.htaccess最小化

WordPress標準の最小構成へ変更。一時的に表示されたが、ブラウザキャッシュを参照していただけでリロード後は再び 501。
同じページだけで検証するとキャッシュにだまされる典型例。

静的ファイル検証

health.html / health.php も 501。WordPress経由ではないため、アプリ起因は除外。

WAF設定切り分け

Xserverの WAF(ファイル対策/コマンド対策/PHP対策)を順にOFF。
コマンド対策OFF時のみ正常化 → 原因は WAF コマンド対策に確定。

注意点

  • 設定反映に 最大1時間かかる
  • ブラウザキャッシュをクリアしないと確認不可
    → これが切り分けを遅延させる要因となった。

調査を難しくした要素

  • ログ空白:エラーログには残らず、アクセスログのみ 501。
  • キャッシュ:一時的に直ったように見え、誤認を招いた。
  • 海外アクセス:国外アクセス制限をOFFにしていたため、影響を疑った。
  • FTP不具合:同時期にディレクトリ一覧エラーもあり、関連を疑った。
  • WAF反映遅延+キャッシュクリア:仕様を理解していないと検証が混乱する。

真因の特定

AdSense管理画面を確認したところ、**自動最適化テスト(フラスコマーク実験)**が有効化されていました。
自動広告を無効化しても、Google側で最大90日間テストが継続し、リクエストが送信される仕様です。

このリクエストが Xserver WAF コマンド対策に誤検知され、全リクエストが 501 でブロックされていました。

実験を終了させた後、WAFコマンド対策ONでも安定稼働を確認。


解決策と教訓

解決策

  • AdSense管理画面から自動最適化テストを終了
  • 現在は WAFコマンド対策OFFで安定運用(他のWAFはON)
  • 必要に応じて Xserver サポートに URI 除外設定を依頼

教訓

  • 501はアプリ層ではなくWAF層が原因の可能性
  • Xserver WAFは反映に1時間+キャッシュクリア必須
  • エラーログが空でもアクセスログを確認
  • 切り分けは複数ページで検証
  • Google広告の自動最適化テストはユーザーが止めても勝手に走る

まとめ

今回の 501 は WordPress起因ではなく、Xserver WAFコマンド対策 × Google広告自動最適化テストの組み合わせによる誤検知でした。

「ログ空白」「キャッシュ参照」「海外アクセス設定」「FTP不具合」「WAF反映遅延」など、迷宮化要因が重なり、原因特定に時間を要しました。

監視用の health.html と外部監視サービス(UptimeRobot+LINE通知)を導入し、再発時には迅速に検知できる体制を構築しました。

同様の501エラーに遭遇した際は、WordPressやプラグインではなく、サーバーWAFと外部サービス(広告・計測タグ)の相性を疑うことが重要です。

関連記事

TOP