新規で立ち上げたウェブサイトのGoogleサーチコンソールから「サーバーエラー(5xx)」が検出されたというメールが届いた時の、原因究明と解決までの備忘録です。
結論から言うと、ある特定のページが「501 Not Implementedエラー」になっており、その原因はページ自体の問題ではなくXserverのWAF機能に誤検知されてしまったことでした。
エラーが出た状況と解決方法を順を追ってみていきます。
Googleサーチコンソール「カバレッジ」関連の問題が検出されました

カバレッジhttps://www.example.com/で問題が検出されました
サーバーエラー(5xx)
なぜサーバーエラー?
このウェブサイトは静的HTMLで構成されているサイトで、全く思い当たることがなく「カバレッジの問題を解決する」をクリックしてSearch Consoleの画面を確認すると。。。

下段にある例を見てみると、アップロードしているPDFファイルが一覧に表示されています。
PDFがエラーの原因のようでした。
実際のページをブラウザから確認してみると、以下のような501エラーが表示されます。

501 Not Implemented
アクセスしようとしたページは表示できませんでした。
このエラーは、実装されていないメソッドでのアクセスがあったことを意味します。
対応していないメソッド(MOVE/COPYなど)を使用した。
501エラーの原因を特定する
エラーが発生しているページはPDFファイルで、PDFファイルの内容は業務のお知らせ的なテキストをWordで打ったものをPDFにした、ごく一般的なPDFファイルでした。
なのでPDFファイル自体に問題があるとは考えにくい。そうなるとサーバー側での問題が考えられます。
上記エラーメッセージでわかる人はわかるかと思いますが、利用しているサーバーはエックスサーバーです。
XserverにはWAF機能があります。
エラーは、XserverのWAF設定はいつくかある中の一つが原因のようでした。(一旦すべてOFFにしてみると、エラーは発生しなくなったため)
でもこのエラーのためにWAFを全てOFFにするのはもったいないというか、できればWAFは有効な状況にしておきたいところです。
なのでWAFのどの設定で引っかかっているのかを調べることにしました。
XserverのWAF機能

エックスサーバーのWAFの設定項目は以下の6つの機能からなります。
- XSS対策
- SQL対策
- ファイル対策
- メール対策
- コマンド対策
- PHP対策
WAFの設定を変更してから反映されるまでに1時間程度かかるようです。
今回の場合、疑われるのは「XSS対策」か「コマンド対策」かなとアタリをつけ、一つずつOFFにしてエラーが解消されるかどうかを確認してみました。
当たりをつけた「XSS対策」「コマンド対策」を一つずつOFFにして問題が解決するかどうか確認したところ、どちらでもエラーが出たままで解決しないことが判明。次に該当しそうなWAF「ファイル対策」をOFFにしてみました。
すると、エラーが表示されなくなりました。原因はWAFの「ファイル対策」だったのです。
XserverのWAF「ファイル対策」:
.htpasswd .htaccess httpd.conf等、サーバーに関連する設定ファイルが含まれたアクセスを検知します。
上記のような機能で、なぜ誤検知されてしまったのだろうと、さらに色々調べてみると、PDFファイルをアップしていたディレクトリ名を「etc」としていことが原因とわかりました。
このetcディレクトリの中にアップロードしたファイルは、PDFであれ画像であれ、すべて501エラーとなってしまうことがわかりました。
考えてみたらLinuxではルート直下にetcというディレクトリがあり、hostsファイルのような設定ファイルが置かれるところです。システム上重要なファイルが置かれるところであり、このような理由でWAFで弾かれてしまったようです。
こうしてPDFファイルがエラーにならず表示されるようになりました。
サーバーのWAF設定はWebアプリケーションの脆弱性対策として必ず有効にしておきたい機能ですが、意図せずエラーが発生してしまうので難しいところですね。
Xserver WAF設定 https://www.xserver.ne.jp/manual/man_server_waf.php

本記事以外でもWAFが原因によるトラブルがありました。。。
サイトが保存できない、更新されない原因がWAFかも!?という時の解決方法を解説しています