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;

【2019/04/03 追記】
worker_processes auto;
でコア数を自動設定してくれる。



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



【2019/04/03 追記】
確認方法
nginxのプロセスIDを取得
# pidof nginx

そのプロセスIDの制限情報を表示
# cat /proc/13515/limits



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 >