Webサーバーのnginxには、集中アクセスをコントロールするためのアクセス制限の設定があります。
KUSANAGIがインストールするnginxにもその設定が定義されている。
ただ、それを使ってる形跡がありません。つまり、アクセス制限をしていない。自分で設定を変えます。
じっさいにアクセス制限を行うのはlimit_req
今使ってる、KUSANAGIはバージョン8のPremium Editionなんですが、そのnginxの設定にはアクセス制限の定義、limit_req_zoneが書かれています。
limit_req_zone $remote_addr$http_x_forwarded_for zone=one:10m rate=100r/s;
アクセス制限はこれだけでは意味がありません。/etc/nginx/conf.d/下にある設定ファイルのserverコンテキストにlimit_reqを書く必要があります。
しかし、limit_reqの記述はない。現状はアクセス制限なしです。
無償版ではlimit_req_zoneの定義もありません。
KUSANAGI 9 は使ったことないので分からない。
そこでカスタムでアクセス制限を追加しました。
http {
map $http_user_agent $is_bot {
default 0;
~*(Googlebot|bingbot|PetalBot) 1;
}
map $is_bot $limit_bot {
default '';
1 $binary_remote_addr;
}
map $is_bot $limit_none_bot_tmp {
default '';
0 $binary_remote_addr$http_referer;
}
# --- 除外設定 ---
map $http_referer $limit_none_bot {
default $limit_none_bot_tmp;
~*example.com '';
}
limit_req_zone $limit_bot zone=bot:10m rate=5r/s;
limit_req_zone $limit_none_bot zone=nonebot:10m rate=10r/s;
}
server {
limit_req zone=bot burst=5 nodelay;
limit_req zone=nonebot burst=20 nodelay;
location ~* /wp-login\.php|/wp-admin/((?!admin-ajax\.php).)*$ {
# wp管理画面の反応が遅い。制限を緩める
limit_req zone=nonebot burst=100 nodelay;
}
}
(ファイルの***はプロビジョン名。DocumentRootの上のディレクトリ名。)
自分の環境では急激にWordPressの管理画面の表示が遅くなったのでその対応も入れてます。
rate, burstの値は自サイトへのアクセス数などを考慮しています。
設定を入れて放置せず、数日間は観察して自分の環境にあった値をチューニングしましょう。
(上記の値も経過観察中。)
集中アクセスにも耐えられる自信の表れか?
KUSANAGIは元々、Webサイトの高速化を謳った製品です。集中アクセスでサーバーが高負荷になる前に処理を終わらせる性能をもっているとも言える。
だから、KUSANAGI推奨環境以上であれば、アクセス制限が効いてなくても問題ありません。わざわざカスタマイズする必要もないでしょう。
ただボクのように、推奨メモリ以下(2G)で運用しているとそうはいきません。
サイトがある程度成長してくると、GoogleやBingなどの検索サイトや、広告サービスなどのボットが大量に集中的にアクセスしてきます。
ときどきWebサーバーが落ちるときもあったのでアクセス制限を入れた次第。
アクセス制限はKUSANAGIの高速化の性能を下げる行為です。それを承知でやってください。
お金で解決できるなら、サーバースペックを上げるなり、スペックの上げ下げが自動でできるクラウドサーバーを使うのが一番いいんだけど。