nginxでwordpressの表示を6倍速くしてみた

July 3, 2012,
tags: nginx php


このエントリーをはてなブックマークに追加

このブログをabで速度はかってみたら以下のような絶望的な結果が出ました(´・ω・`)

Requests per second:    10.64 [#/sec] (mean)
Time per request:       9399.835 [ms] (mean)
Time per request:       93.998 [ms] (mean, across all concurrent requests)
Transfer rate:          541.31 [Kbytes/sec] received

まあ原因はproxyの設定失敗していたという恥ずかしい状況だったんですが、以下のように設定したら6倍速くなりました(`・ω・´)キリッ

vim /etc/nginx/nginx.confのhttpの部分に以下を追加

# proxy cache
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=czone:4m max_size=50m inactive=120m;
    proxy_temp_path  /var/tmp/nginx;

vim /etc/nginx/conf.d/vhost.conf

upstream backend {
  ip_hash;
  server 127.0.0.1:9000;
}

server {
    listen      9000;
    server_name _;

    location / {
        root /var/www/html;
        index index.php index.html index.htm;

        #static files
        if ( -f $request_filename) {
            expires 30d;
            break;
        }

        # request to index.php
        if (!-e $request_filename) {
            rewrite ^.+?(/wp-.*) $1 last;
            rewrite ^.+?(/.*\.php)$ $1 last;
            rewrite ^ /index.php last;
        }

        location ~\.php$ {
            root /var/www/html;
            fastcgi_pass unix:/tmp/php.socket;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
            include        fastcgi_params;

            fastcgi_pass_header "X-Accel-Redirect";
            fastcgi_pass_header "X-Accel-Expires";
        }
    }
}

server {
    listen       80;
    server_name  www.polidog.jp;

    access_log /var/log/nginx/www_access.log;
    error_log  /var/log/nginx/www_error.log;

    location ~ .*\.(htm|html|jpg|JPG|gif|GIF|png|PNG|swf|SWF|css|CSS|js|JS|inc|INC|ico|ICO) {
        root    /var/www/html;
        index   index.html;
        ssi     on;
        break;
    }

    location /wp-admin { proxy_pass http://backend;}
    location /wp-login.php { proxy_pass http://backend;}




    location / {
        if ($http_cookie ~* "comment_author_|wordpress_(?!test_cookie)|wp-postpass_" ) {
            set $do_not_cache 1;
        }
        if ($http_user_agent ~* “2.0\ 2MMP|240×320|400X240|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|Elaine/3.0|EudoraWeb|Googlebot-Mobile|hiptop|IEMobile|KYOCERA/WX310K|LG/U990|MIDP-2.|MMEF20|MOT-V|NetFront|Newt|Nintendo\ Wii|Nitro|Nokia|Opera\ Mini|Palm|PlaySt
ation\ Portable|portalmmm|Proxinet|ProxiNet|SHARP-TQ-GX10|SHG-i900|Small|SonyEricsson|Symbian\ OS|SymbianOS|TS21i-10|UP.Browser|UP.Link|webOS|Windows\ CE|WinWAP|YahooSeeker/M1A1-R2D2|iPhone|iPod|Android|BlackBerry9530|LG-TU915\ Obigo|LGE\ VX|webOS|Nokia5800″) {
            set $do_not_cache 1;
        }

        proxy_no_cache     $do_not_cache;
        proxy_cache_bypass $do_not_cache;

        proxy_pass http://backend;
        proxy_cache czone;
        proxy_cache_key $scheme$proxy_host$uri$is_args$args;
        proxy_cache_valid  200 10m;



    }
}

あとはfastcgiの起動スクリプトをいじります。
以下のように変更してもらえれば大丈夫です。
vim /etc/initd.d/php-fastcgi

- daemon $spawnfcgi -a ${server_ip} -p ${server_port} -u ${server_user} -g ${server_group} -P ${pidfile} -C ${server_childs} -f ${php_cgi}
+ bind=/tmp/php.socket
+ daemon $spawnfcgi -s ${bind} -u ${server_user} -g ${server_group} -P ${pidfile} -C ${server_childs} -f ${php_cgi}

これで準備は完了。あとは再起動

# /etc/init.d/php-fastcgi restart
# /etc/init.d/nginx restart

んでもって結果はこんな感じです

Requests per second:    65.63 [#/sec] (mean)
Time per request:       1523.595 [ms] (mean)
Time per request:       15.236 [ms] (mean, across all concurrent requests)
Transfer rate:          3391.62 [Kbytes/sec] received

ちなみに以下のサイトを参考にさせていただきました。
WordPressを100倍速くする! MySQLの調整やnginx proxy cache
※環境はCentOSです。

comments powered by Disqus