[過負荷対策] wordpressの画像をAmazonS3から配信
2016年6月、ある記事を公開したところ、鬼のようにアクセスが来てサーバーのレスポンスがかなり遅くなったことがある。
原因は「沖縄女子高制服図鑑を探して(1)」。さもありなん。
下はセッション数のグラフ。通常の10倍以上のアクセスが来ていたようだが、この時はサーバーが過負荷になっていて実アクセス数はわからない。
制服記事を公開するたびに過負荷になっては困るので、少し対策してみた。
目次
対策
下記の対策でページ表示速度は上がったのですが、多数のセッションが来るとやっぱり辛い。
- EWWW Image Optimizerプラグインを入れて画像を軽くする
- PHP7にする
このブログは さくらのVPS(v3) SSD 2G プランで動いていて CPUもメモリも非力だ。特にメモリが足りない。
アクセスが集中すると httpd が増殖してメモリを喰い、スワップが発生してさらに遅くなる悪循環になっていた。
画像をAmazonS3に追い出す
記事内の画像だけでも別サイトから配信すれば起動するhttpdの数も減るし、並列に送れるので転送速度も上がる。
世の中には個人ブログの配信にCDNを使ってる人もいるけど※1、私はそこまでは根性はないので画像だけS3から配信することにした。
世の中進歩していて、Wordpressの画像をS3に追い出すプラグインが既にあった。「Nephila clavata (絡新婦)」。
難しい設定をせずに自動的にS3に画像を送ってくれる上に、使っている画像のURLを適宜変更してくれる。大変便利。
サーバー側にも画像は残っていて、プラグインを止めればS3からの配信も止まる。
S3のデフォルトだと expire が設定されないので、s3cmd で適当に設定しておく。このサイト程度ではあまり効果はないかもしれないけど、塵も積もれば山だ。
s3cmd –recursive modify –add-header="Cache-Control:max-age=604800″ s3://server/path-of-image/
困ってる点1・アイキャッチ画像
トップページ表示しているアイキャッチ画像がS3側にならないことがある。
ソースを見てみると wordpress 4.4 で採用された表示画像の切り替え部分(srcset)がS3側になっていないようだ。
アイキャッチ画像はそれほど大きくないので、現在は放置している。そもそも srcset で切り替えるメリットあるのかな、うちのサイト。
困ってる点2・人気記事サムネール
人気記事を表示するために WordPress Popular Postsプラグインを使っているが、これが生成するサムネール画像はS3に転送されない。
GTmetrixを使って表示時間(waterfall)を見てみると、人気記事画像の転送だけで1秒弱かかっている。1ページ表示毎に10回の画像GETが発生するので、サーバー負荷的にはS3に回した方が良さそう。
(S3からのGET数がかなり増えるから、料金的には現状のままの方がいいのか?)
人気記事と新着記事のサムネールが別々に管理されているのも問題ではあるな。半分ぐらいは重複してるので、共用できれば転送量は減るはず。
結果
それなりに表示速度は速くなってるのですが、細かい画像の転送がネックになってる。速度的にも料金的にも。
S3の転送量で費用が嵩むぐらいなら、使ってるvpsを1ランク上げた方が良さそうなのも悩みどころ。
個人サーバーなんて悩むのが楽しみといえば楽しみではありますが。
リンク
- wordpressの画像をAmazonS3から配信←イマココ
- wordpressの画像をAmazonS3+CloudFrontから配信
- wordpressの画像をCloudFrontから配信するのを止めた
- さくらVPS v4にお引越し その4 (https編)
- S3 にメディアを自動アップロードするプラグイン「絡新婦」 | dogmap.jp
- 置いたら幸せになるCloudFrontから置かなくても幸せになるCloudFront – 公開懺悔日記
- S3のファイルへのアクセスをRefererで制御する – karasuyamatenguの日記
ディスカッション
コメント一覧
まったく同感です。有料ブログサービス(はてなブログ等)に移行した方が管理は楽だし、アクセスも増えそうな気がします。人に勧めるなら有料ブログですよねえ。
私のサイトは20年以上前の記事とかあって、有料ブログには簡単には移行できないので当分はこのままです。
まったく同じようなお悩みされている大先輩を発見!
私も女郎蜘蛛使ってS3へ逃がすのを同様にやりましたが、運用コストが嵩むので結局サーバ契約先とプランを変更しました。ちなみにCDN使うとAdsenseで海外広告が頻繁に出てくるのでそれも利用停止した次第。
最近は有料ブログサービスを利用してコンテンツ書いたほうがいいのかなぁ〜って薄々感じている真っ最中(移行が面倒なのでずるずる現行ブログに記事書き続けているのも問題ですが・・