さくら503頻発アクセス制限の元凶となったプログラム過負荷の原因を追った備忘録
2019/12/12
先週末から約1週間にわたって、さくらスタンダードサーバーがアクセス規制をかけられています。
おかげで、ある程度のアクセスが集中するとすぐ503エラーを吐き出してしまう始末。
さくらインターネットに問い合わせても相変わらずの塩対応ですし、自分でなんとかするしかないと色々調べていった備忘録です。
現時点でまだ解除されてません。苦しい戦いです。。
プログラム過負荷の原因を追ったあれこれ
自サイトがアクセス制限をかけられているかどうかは、さくらのコントロールパネルから「リソース情報」を見ればわかります。
見なくても自サイトに全然繋がらなくなってたら怪しいんですけどね。
で、アクセス制限をかけられた場合には以下のような手順を踏むことになります。
- 自分でプログラム過負荷の原因を特定する
- さくらにメールで制限解除を依頼する
- プログラムの負荷が軽くなってたら解除してもらえる
ここで言うプログラムは僕の場合Wordpressそのものです。
さくらインターネットにはいくら問い合わせても、過負荷となっているプログラムが何なのかは教えて貰えません。
また、プログラムの修正をせずとも制限解除依頼をした時に負荷が軽くなっていたら解除してもらえます。(体験談)
「そんなこと言っても、当該のプログラムが何なのかわからないじゃないか」
と嘆いても、さくら側の回答は「アクセスログ見て自分で判断して」の一点張りです。マジ塩。
なのでアクセスログを設定している方はそれを見ることになります。
設置していない方はコントロールパネルの「アクセスログの設定」からまずはログを残す事をしなければなりません。
・・・こんなのデフォルトで設定しといてくれよって思いますけどね・・・。
アクセスログの設定が出来たら、翌日には無事アクセスログが吐き出されているはずなので、それを見ていくことになります。
コントロールパネルのアクセス解析を見る
アクセスログがとれていれば、サーバーコントロールパネルから「アクセス解析」が見られるようになります。
そこから、特定のURLにアクセスが集中していないかを確認できるので、ここに怪しいものがあれば「プログラムの過負荷」の原因も突き止められるはずです。
僕の場合は「wp-admin/admin-ajax.php」でした。
同時にエラーログを見ると
というエラーがガンガン吐き出されていました。
ずっとこれが怪しいと思って調べていたんですが、どうやらこれはプラグインが普通に使う範囲内っぽいので、そこまで問題ないんじゃないかという結論になりました。後述します。
それ以下のURLも特にプログラムの過負荷となりそうなものはなさそうだったので、次に生ログを見てみることに。
FTP接続して生ログを見る
FTPツールを使ってサーバーに接続すると、サーバーレンタルスペースの直下に「log」というフォルダがあり、そこにアクセスログが書き出されています。
かなり容量が大きくなっているのでダウンロードはもしかしたら混雑していない時間の方がいいのかもしれません。
無事アクセスログをダウンロードして開いてみると、1日あたり42万件弱に及ぶアクセスがありました。(5~6サイトのマルチ運用で)
もし、さくらのスタンダードサーバーが50万件程度のアクセスにしか対応できないようなスペックなのであれば、単純にワードプレスが42万件分処理するのに使うCPU負荷が高すぎたということなのかもしれません。
ただ、生ログの中には怪しいのもあって、
ec2-xx-xx-xx-xx.us-west-2.compute.amazonaws.com
ec2-xx-xx-xx-xx.compute-1.amazonaws.com
といった、Amazon AWSホストや、Yandex、Baidu、Sogouといった海外の検索エンジンのクローラーたちによる連続アクセスです。
もしこれらのアクセスと一般のアクセスが重なれば、同時に起動するプログラム数も増えるわけで、プログラム過負荷の原因となっていたんじゃないかな・・・?と。
一応.htaccessにアク禁用のコードを書いておいたので、それでしばらく様子を見てみたいと思っています。
でも、42万件に対して数千件なんですよね、これらって。
むしろそれよりもガンガンアクセスしてきてたのがGoogle botでした。
Google botはGoogleのクローラーちゃんだからガンガン来てほしい存在ではあるんですが、42万件のうち2万5000件がGoogle botかつ、数秒に一回のペースでアクセスされてて、実はこいつが怪しいんじゃないかと思い始めてたりするわけです。
2万5000件のうち3000件ぐらいが前述のwp-admin/admin-ajax.phpにPOSTしていました。
admin-ajaxに何をおくっていたのか?
Google botがwp-admin/admin-ajax.phpにPOSTしているとき、リファラーとして表示されているアドレスが「特定のページ」ではありませんでした。
つまり、全ページが対象になっているということ。
ということは、どのページを見ても必ずajaxへPOSTするようなもの・・・何かあったかな・・・?と考えて思い当たったのが、Wordpress Popular Postです。
人気の記事を表示するプラグインなので、どのページにアクセスがあったのかをPOSTしてんじゃないかと勝手に予想しました。
・・・でもだとしたら前頁に対してその動作が起きてなければおかしいんですが、そういうわけでもないんですよね・・・。
いずれにせよ、これがダメならサーバーお引越ししか手はないですね。
ちなみにエラーログに吐き出されていた「ajax-adminへのアクセスが拒否されたよ」っていうメッセージは、海外からのアクセスがあった時にさくら側でwp-admin直下へのアクセスを禁止してくれていることから排出されていたものと思われます。
つまり海外の人のアクセスはPopular Postに反映されていないということかなと。
すべて予想でしかないんですが。
おわりに
結局はどのプログラムがどんな挙動をしているのかを教えてもらえるわけじゃないので、トライ&エラーで試していって挙動をみていくしか方法がないんですよね。
ただ、どこまで負荷を軽くしたとしても、さくら側から「ここまで軽くなったらOK」という回答が貰えるわけでもないので、本当にゴールが見えない戦いですこれ。
そもそも50万近いアクセスがあったらさくらのスタンダードでは限界というなら、そう説明して欲しいところです。
※さくら側の回答によれば、アクセスが少なくとも集中したら同じことだそうで、なんとも煮え切らない感じ。。。
・・・というか、こちとらサーバーの知識も特にないですし、こういう事態になった時に対応がクソすぎるレンタルサーバーというのはやっぱり選ばない方がいいんだなと身をもって体験した感じです。
さくらからは前回の問い合わせから丸2日間返信がありませんし・・・。
だからといって別に企業体制をどうにかしてくれとか言いたいわけではなく、僕はなるべく早いうちに違うサーバーに引っ越したいと思っています。
2019/12/12