概要
wordpress運用するのに月5,000円は高い気がしてmicroでがんばってます。
以下の通り、microだとメモリ少ないのですが
10,000PV/dayを7秒以内に読み込み完了させる事が目標です。
7秒というのはNewRelicのApdexを参考にしてます。
インストールバージョンは次の通り。
Apache/2.4.9 (Amazon)
Mysql 5.5.37 ※ Mysql 5.6をmicroにインストールしようと努力したのですがinno_DBのbuffer_size不足で起動しませんでした。
以下やったこと。
wordpressにquick cacheを導入
王道そうなのでさくっと入れました。
とりあえずページキャッシュを導入。
http://ex-cloud.jp/techblog/?p=442
apacheのpreforkのプロセス数を制御
apacheの平均消費メモリは、、
$ ps aux | grep [h]ttpd | grep [a]pache | awk 'BEGIN{x=0}{x+=$6}END{ print x/NR }'
26594
26Mだったので630Mの物理メモリと照らし合わせて計算。
<IfModule mpm_prefork_module>
StartServers 1
MinSpareServers 2
MaxSpareServers 4
ServerLimit 10
MaxClients 10
MaxRequestsPerChild 100
</IfModule>
ざっとこれくらいにしてます。
mysqlのクエリキャッシュ有効化
デフォルトでは無効なのでもちろん有効化します。
thread_cache=450
table_cache=450
query_cache_limit=1M
query_cache_min_res_unit=4k
query_cache_size=16M
query_cache_type=1
ここもクエリキャッシュを大き過ぎるとコネクションできなくのでこの辺に設定してます。
apacheとリバプロを導入
こちらも王道で効果抜群。
nginxの下にapacheをプロキシで動かして、プロキシキャッシュをかましてあげます。
自動でキャッシュが削除されないらしいので30日を期限にしてます。
apacheを8080で動かして
Listen 127.0.0.1:8080
nginxでルーティング&cache
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 4096;
}
http {
include /etc/nginx/mime.types;
default_type appplicaion/octet-stream;
proxycachepath /var/cache/nginx levels=1:2 keyszone=czone:4m maxsize=50m inactive=120m;
proxytemppath /var/tmp/nginx;
proxysetheader Host $host;
proxysetheader X-Real-IP $remoteaddr;
proxysetheader X-Forwarded-Host $host;
proxysetheader X-Forwarded-Server $host;
proxysetheader X-Forwarded-For $proxyaddxforwarded_for;
# Apache
server {
listen 80;
server_name hogehoge.com;
<span class="c1">#/wp-admin 以下はcacheしない</span>
<span class="kn">location</span> <span class="n">/wp-admin</span> <span class="p">{</span>
<span class="kn">proxy_pass</span> <span class="s">http://127.0.0.1:8080</span><span class="p">;</span>
<span class="p">}</span>
<span class="c1"># .php ファイルもcacheしない</span>
<span class="kn">location</span> <span class="p">~</span> <span class="sr">.*\.php</span> <span class="p">{</span>
<span class="kn">proxy_pass</span> <span class="s">http://127.0.0.1:8080</span><span class="p">;</span>
<span class="p">}</span>
<span class="c1"># apache</span>
<span class="kn">location</span> <span class="n">/</span> <span class="p">{</span>
<span class="kn">proxy_pass</span> <span class="s">http://127.0.0.1:8080</span><span class="p">;</span>
<span class="p">}</span>
<span class="kn">location</span> <span class="p">~</span> <span class="sr">.*\.(txt|xml|html?|js|css|gz|ico|jpe?g|gif|png|wmv|flv|swf|mpg)</span> <span class="p">{</span>
<span class="kn">access_log</span> <span class="no">off</span><span class="p">;</span>
<span class="kn">expires</span> <span class="s">30d</span><span class="p">;</span>
<span class="kn">break</span><span class="p">;</span>
<span class="p">}</span>
<span class="kn">proxy_cache_key</span> <span class="nv">$scheme$proxy_host$uri$is_args$args</span><span class="p">;</span>
<span class="c1"># .ht(xxx) ファイルはアクセス禁止</span>
<span class="kn">location</span> <span class="p">~</span> <span class="sr">/\.ht</span> <span class="p">{</span>
<span class="kn">deny</span> <span class="s">all</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
}
いまとこGoogleAnalyticsで見る限り平均6秒台で完了できています。
参考サイト;
http://bren.jp/blog/%E3%81%95%E3%81%8F%E3%82%89vps%EF%BC%9Anginx-apache-%E6%A7%8B%E6%88%90%E3%81%AE%E8%A8%AD%E5%AE%9A%E6%96%B9%E6%B3%95/ http://ex-cloud.jp/techblog/?p=442