ホームページの実行環境を移行して、ホームページの表示が早くなったと喜んでいたのに、その2日後、ホームページにアクセスしてみると、「There Has Been a Critical Error on your website」と画面に表示され、自分のホームページが表示されなくなりました。
えっ。えーーー
と、プチパニックになりました。(笑)
気を取り直して、復旧させなくてはということで、復旧させたときの話をしたいと思います。
現象
ホームページにアクセスした際に、「There Has Been a Critical Error on your website」という画面が表示され、ホームページが表示されなくなった。
原因調査のため、使用しているPCからサーバーにsshで接続しようとしたら、接続できなくなっている。FTP接続も不可となっている。
この時表示されたエラーメッセージは、「ssh:connect to host XXXXX port XX:connection refused」でした。
最後の望みをかけ、契約しているサービスから操作をしてみる。
とりあえず、サーバーを再起動してみるも、現象は解決できない。
最後の手段として、コンソールからアクセスを試みるも、正しいパスワードを入れてもアクセスできない。
正直、積んだと思いました。
サーバーにアクセスするすべを失った。。。
と思いました。
OSから再インストールしかないのか。。。と思いました。
OSの再インストールの前で、再度サーバーを再起動して、サービスのコンソールからアクセスしてみると、、、。何と、サービスのコンソールからはアクセスはできました。
原因
僕の環境で発生したトラブルの原因は2つありました。
- ssh接続とFTP接続時、「ssh:connect to host XXXXX port XX:connection refused」と表示され、接続できなかった原因は、複数回パスワードを間違えたことによる、サーバーへのアクセスブロックが機能していた。
- 「There Has Been a Critical Error on your website」が表示され、自分のホームページが表示されなくなった原因は、Wordpressにインストールした「Redis Cache plugin」というキャッシュ系プラグインの誤動作でした。
「There Has Been a Critical Error on your website」が表示される原因は、メモリ不足、データベース破損、利用しているプラグインの誤動作などが、一般的のようでしたが、どの原因も解決するにしても、ssh接続やFTP接続できないと解決が難しかったので、まずは、ssh接続、FTP接続ができなくなった現認を特定して解決することから始めました。
※conoHa VPSのコンソールは、動作がもっさりしていて、キー入力がうまく入力できないケースなどがあり、使い勝手が悪かったり、誤操作の可能性があり、conoHa VPSのコンソールではなく、利用しているPCからのssh接続で操作をしたかったため。
ssh接続、FTP接続ができない原因は、ネットで調べる限り、一般的には、「sshクライアントが停止している」、「ファイアウォールでsshのポートがブロックされている」という記事ばかりで、このあたりをいろいろ試すも、解決できませんでした。引き続き原因を調べる中で、「複数回パスワードを間違えたことによる、サーバーへのアクセスブロックが機能」があることを見つけ、確認してみると、該当していることがわかりました。
解決方法
僕の環境で利用しているOSは、Ubuntuなので、Ubuntuでトラブル解消した方法をご案内します。
ssh接続、FTP接続できない
複数回のパスワード間違えによるブロックが原因かどうかを切り分けるため、パスワードブロック機能を無効化してみる。
sudo systemctl stop fail2ban.service
僕の環境では、上記コマンドをコンソールから実行したところ、ssh接続、FTP接続ができるようになりました。ただ、複数回のパスワード間違えによるブロック機能を無効化したままだと、不正アクセスをされたときへのセキュリティが弱くなってしまうため、機能を有効化しなおします。
sudo systemctl start fail2ban.service
当然、ssh接続、FTP接続ができなくなります。
恒久対応としては、自分自身が利用しているグローバルIPアドレスからのアクセスのみブロックを解除します。
ブロックされているサービスを確認します。
sudo fail2ban-client status
ブロックしているサービスがある場合、結果が表示されます。
この中で、「jail list : jail名」の項目で表示された「jail名」をメモします。
次に、「jail名」でブロックされたIPアドレスを確認します。
sudo fail2ban-client status [jail名]
ブロックされているIPアドレスの一覧が表示されます。個人的には、結構な数のIPアドレスが表示されており、意外と不正アクセスされている?と驚きました。
自身が利用しているグローバイルIPアドレスを検索して、ブロック対象になっているかを確認します。
グローバルIPアドレスは、下記サイトで調べられます。
https://www.cman.jp/network/support/go_access.cgi
使用しているグローバルIPアドレスがブロック対象となっている場合は、下記コマンドで解除します。
sudo fail2ban-client set [jail名] unbanip [グローバルIPアドレス]
sudo fail2ban-client reload
上記を実施することで、ssh接続、FTP接続ができるようになりました。
ホームページの表示ができない
「There Has Been a Critical Error on your website」が表示された場合、原因を究明するため、「wp-config.php」に下記を追記します。
※「wp-config.php」はWordpressをインストールしたディレクトリにあります。
define('WP_DEBUG',true);
define('WP_DEBUG_DISPLAY',false);
define('WP_DEBUG_LOG',true);
「wp-config.php」のデフォルト値では、「define(‘WP_DEBUG’,false);」となっていると思うので、この箇所は、先頭に「#」をつけ、コメントアウトします。
上記設定をして、再度ホームページにアクセスすると、「wp-config.php」と同じディレクトリ内にある「wp-content」ディレクトリ内に、「debug.log」が出力されるので、ログの中身を確認します。
僕の環境では下記が表示されていました。
[11-Apr-2024 06:35:38 UTC] Exception: Predis library not found. Re-install Redis Cache plugin or delete the object-cache.php. in /var/www/html/xxxxx/public_html/wp-content/object-cache.php:860
Stack trace:
#0 /var/www/html/xxxxx/public_html/wp-content/object-cache.php(546): WP_Object_Cache->connect_using_predis()
赤字の部分で、どうやら「Redis Cache plugin」が問題を起こしており、「object-cache.php」を消すように指示されていることがわかりました。エラーメッセージの内容で出力されたとおり、FTP接続して「Redis Cache plugin」の削除と、「object-cache.php」の削除を実施したところ、ホームページが正常に表示されるようになりました。
解決できたら、「wp-config.php」を下記のように変更します。
define('WP_DEBUG',false);
#define('WP_DEBUG',true);
#define('WP_DEBUG_DISPLAY',false);
#define('WP_DEBUG_LOG',true);
また、不要なゴミがあるかもしれないため、復旧後、「Redis Cache plugin」を、Wordpressの管理画面から再度インストールして、アンインストールをしました。
今回のトラブルは、結果としては自分にとって良い経験となりました。
今後同じような状況に陥っても、冷静に対処できる経験を積ませて頂きました。
このようなトラブル時の対応経験が自分でできるのも、VPSならではなのかなとは思いました。
僕は以前、Wordpress専用のレンタルサーバーを利用していましたが、今は、VPS上で自分でホームページの環境を構築しメンテナンスしています。
このあたりのお話は、下記の記事で掲載していますので、ご興味あれば、ご一読頂けたら幸いです。
コメント