Nginxでfastcgi_passをTCP/IPからUnix Socketにする

Nginxでphpを動かす場合php-fpmを使っています。今までは127.0.0.1:9000から動かしていましたが、Unix Socketの方が速度がいいとのことなのでこちらに切り替えました。

TCP/IPからUnix Socketに切り替え

Ubuntu12.04ではphp-fpmは5.3.10がインストールされます。

vagrant@vm:~$ php5-fpm -v
PHP 5.3.10-1ubuntu3.8 (fpm-fcgi) (built: Sep  4 2013 20:04:36)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies

このバージョンだとTCP/IPでPHPを動かすようになっているので、ソケットに変えます。

1. php-fpmの設定変更

sudo vim /etc/php5/fpm/pool.d/www.conf

listenをソケットに変更します。

;listen = 127.0.0.1:9000
listen = /var/run/php5-fpm.socket

php-fpmをrestart

sudo /etc/init.d/php5-fpm restart

これをChefで行うと下の様になります。

service "php5-fpm" do
  supports [:restart, :reload, :status]
end

template "/etc/php5/fpm/pool.d/www.conf" do
  source "php-fpm/www.conf.erb"
  owner "root"
  group "root"
  mode 00644
  notifies :restart, "service[php5-fpm]"
end

2. Nginxの設定変更

fastcgi_passを変更します。

location ~ \.php$ {
	fastcgi_pass unix:/var/run/php5-fpm.sock;
	fastcgi_index index.php;
	fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
	include fastcgi_params;
	fastcgi_pass_header "X-Accel-Redirect";
	fastcgi_pass_header "X-Accel-Expires";
}

nginxをrestartします。

sudo /etc/init.d/nginx restart

セミコロンを付け忘れると以下のエラーになります;;

estarting nginx: nginx: [emerg] invalid number of arguments in "fastcgi_pass" directive in /etc/nginx/sites-enabled/default:182
nginx: configuration file /etc/nginx/nginx.conf test failed

Chefで書くと以下の様になります。

service "nginx" do
  supports [:restart, :reload, :status]
end

nginxFiles = %w{nginx.conf sites-available/default}
nginxFiles.each do |file|
  template "/etc/nginx/#{file}" do
    source "nginx/#{file}.erb"
    owner "root"
    group "root"
    mode 00644
    notifies :restart, "service[nginx]"
  end
end

最近NginxのProxyCacheでPHPへのアクセスを減らしたので、あまり効果は感じられないけどとりあえず早いらしいですね!