[2025/04/22更新] XServer 記事投稿時501 Not Implementedが出る(助けて)

おはこんち、冬優子ぱっちんです。いつもはOpenVPNの構築やWordPressカスタマイズなどの技術ネタを中心に書いていますが、先日ちょっとしたトラブルに遭遇しまして、備忘録も兼ねて詳細をまとめました。

題して「WordPress記事が更新できず真っ白501エラー!原因はXserverのWAFコマンド対策だった件」。同じようにハマる人が少しでも減るよう、解決までの試行錯誤を出来るだけ細かく書いておきます。

何が起きたのか?(症状の詳細)

自分用の備忘録として書いていた「[2025/04/22更新] OpenVPN サーバー構築トラブルシューティング備忘録 (Proxmox LXC)」を、少し内容を追記しようとWordPress管理画面を開き、テキストモードで編集後に「更新」ボタンをポチッ。

すると、画面が真っ白になり、タイトルバーには「501 Not Implemented」。記事の更新がまったく反映されず、本文を書き直すたびに同じエラーが出続ける状況に陥りました。

HTTP 501とは?

HTTPステータスコード501は「Not Implemented(実装されていない・対応していない)」を意味し、サーバーがリクエストされた機能をサポートしていない場合に返されます。WordPressで普段はめったに見かけないエラーなので、最初はテーマやプラグインのバグかな?と思い込みやすいです。

真犯人はXserverのWAFだった

結論から言うと、Xserverが標準搭載するWAF(Web Application Firewall)の「コマンド対策」機能が、記事内の proto udpdev tunifconfig-poolclient-config-dir といった “コマンドっぽい文言” を検知し、不正リクエストとして遮断していたのが原因でした。

WAFは外部からの攻撃を防ぐため、特定の文字列やHTTPメソッド(MOVE/COPYなど)をブロックしますが、WordPressの投稿画面は内部でREST APIを使い、MOVE/COPYメソッドを呼び出して記事更新処理を行う仕組みがあります。この動きを「未対応メソッド」と誤検知してしまったようです。

トラブル切り分け手順

  1. 本文を空にして更新 → 問題なく保存→本文に原因ありと判明
  2. 段落ごとに再挿入→特定のキーワードで再度501発生
  3. ローカル環境や他サーバー(WAF無効)で同一操作 → 問題再現せず

以上から、WP側ではなくXserverのWAF設定がトラブル元と断定しました。

具体的な対処法

  1. Xserverサーバーパネルにログイン
  2. 対象ドメインの「セキュリティ」→「WAF設定」を開く
  3. リストから「コマンド対策」の項目を探し、OFF(無効化)に切り替え
  4. WordPress管理画面に戻り、記事をテキストモードで再更新 → 成功を確認
  5. すぐにWAF設定画面へ戻り、ON(有効化)に復帰

※WAFを無効化したまま放置すると本来防げる攻撃を受けやすくなるため、必ず更新後は再有効化を忘れずに。

裏技:WP-CLIでの更新回避

サーバーSSH接続が可能であれば、WP-CLIを使って記事を更新する方法もあります。WAFはCLI経由の処理を検知しない場合が多いため、以下のコマンドで本文を差し替え可能です:

wp post update 123 --post_content="$(cat new-content.txt)"

ただし、SSH鍵の管理やCLI操作に慣れていないと別のリスクがあるので、自己責任でどうぞ。

運用時の注意点

  • テキストモードで貼り付ける前に、一度エスケープが必要な文字(<>)が混入していないか確認する。
  • 長いコードブロックはGistやGitHubに置き、記事内では埋め込みIframeなどで参照する運用も検討。
  • 定期的にWAFログをチェックし、誤検知ルールがないか運用監視を行う。

まとめ・教訓

  • WordPressの記事更新時に501エラーが出たら、テーマ・プラグイン以外にWAF設定の影響を疑う。
  • Xserverの「コマンド対策」はコマンド風文字列を遮断するため、技術系記事では一時オフが有効。
  • 更新後は必ずWAFを再有効化し、セキュリティを保つこと。
  • どうしても避けられない場合は、WP-CLIによる更新も選択肢。

同じような状況で時間を浪費しないよう、この記事がお役に立てれば幸いです。ご一読ありがとうございました!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です