2012年10月22日月曜日

Nginx+PHP-FPMのTuning設定

nginx_php-fpm_tuningNginxとphp-fpm上で動いているWordPressの表示速度を最適化するために調べたときの覚書。

環境: CentOS 5.8 64bit, nginx 1.2.4, php-fpm 5.3.17

参考にしたのは下記Site.

 

目次

  1. ServerのCPU数に合わせてnginxを設定
  2. nginxのfastcgi cacheを設定
  3. 「Too many open files」対策
  4. gzipを有効にしてTraffic量を軽減する

 


1.ServerのCPU数に合わせてnginxを設定

ServerのCPU Core数を確認。
# cat /proc/cpuinfo |grep processor

最後が「processor:15」ならコア数は16。これをnginxのworker_processesに設定する
# vi /etc/nginx/nginx.conf

worker_processes  16;

 


2.nginxのfastcgi cacheを設定

PHPの実行結果をcacheする設定をnginxに追記

http {
    ...

    fastcgi_cache_path /var/cache/nginx/fastcgi_temp/cache levels=1:2 keys_zone=wpcache:500m inactive=60m;

    server {
        ...

        location ~* \.php$ {
            ...

            # fastcgi cache
            fastcgi_cache         wpcache;
            fastcgi_cache_key     "$scheme://$host$request_uri";
            fastcgi_cache_valid   200 10m;
            fastcgi_cache_valid   301 1d;
            fastcgi_cache_valid   404 1m;
            fastcgi_buffer_size   16k;
            fastcgi_buffers       128 16k;
        }
    }
    ...
}

詳しくはOfficial Documentを参考に。

体感では早くなったのか分からない。。。設定が悪いのかな?

 


3.「Too many open files」対策

(2014/10/03 追記)開発用サーバーで「Too many open files」エラーログが頻発するので、調べてみるとworker_rlimit_nofileを設定するといいらしい。
参考:nginx で Too many open files エラーに対処する - Shin x blog

# vi /etc/nginx/nginx.conf

worker_rlimit_nofile 4096;

events {
    worker_connections  1024;
}

# /etc/rc.d/init.d/nginx configtest
# /etc/rc.d/init.d/nginx restart

 


4.gzipを有効にしてTraffic量を軽減する

nginxのconfに追記

server {
    gzip              on; 
    gzip_types        text/plain
                      text/xml
                      text/css
                      application/xml
                      application/xhtml+xml
                      application/rss+xml
                      application/atom_xml
                      application/javascript
                      application/x-javascript
                      application/x-httpd-php;
    gzip_disable      "MSIE [1-6]\.";
    gzip_disable      "Mozilla/4"; 
    gzip_buffers      64 8k;
    gzip_min_length   1000;
}

実際gzipを有効にすると、遅くなったところがあるので今のところ無効にすることにした。

速度の計測はGoogle ChromeのDeveloper Toolsを使うと簡単。詳しくは前の記事を参考に。

 

< 2012/11/26 Modified >
WordPressのAjaxで処理する箇所(wp-load.php)のみgzipを有効にしてみた。

location ~ /wp-load\.php {
    gzip           on;
    gzip_disable   "MSIE [1-6]\.";
    gzip_disable   "Mozilla/4";
    gzip_buffers   64 8k;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_intercept_errors on;
    include        fastcgi_params;
    client_max_body_size 20M;
}

location ~* \.php$ {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_intercept_errors on;
    include        fastcgi_params;
    client_max_body_size 20M;
}

 


WordPressとMySQLの設定は下記記事も参考に。

 

< Related Posts >

コメントを投稿
Related Posts Plugin for WordPress, Blogger...

Blog Archives