自从前不久在电信通机房放置了一台新服务器之后,我就开始尝试完全用nginx来部署http服务。
nginx与php有两种主流的配合方式,spawn-fcgi和php-fpm。
spawn-fcgi完全独立运行,可以和各种cgi语言配合; php-fpm专为php而设计,需要对php打补丁。
性能上php-fpm略占上风,功能上php-fpm也略强一些,毕竟它是专门为php而生的嘛。可惜还没有进入php-fpm在10.04的ubuntu官方源,而spawn-fcgi直接通过apt-get就可以安装。
所以之前我采用了nginx+spawn-fcgi+php-cgi的方式,具体方法参考:
http://forum.ubuntu.org.cn/viewtopic.php?f=54&t=241301
前两天惊喜地发现php5-fpm已经进入了php 5.3.3官方的组件库,也就是说以后不需要再对php打补丁,直接安装php-fpm就可以用了。
顺藤摸瓜,我进而发现在还在内测的ubuntu10.10的源中,php已经升级到了5.3.3,并有php5-fpm这个软件包可以直接apt-get 安装了。
可惜生产环境中的几台服务器,装的都是10.04,官方源的php版本最新只到5.3.2,也没有php5-fpm这个软件包。
搜索了一番发现,php5-fpm有非官方源可以用,于是我就能完全通过apt-get安装nginx+php5-fpm了,下面介绍一下完整的安装过程(基于ubuntu 10.04)
0.确认系统中80端口和9000端口没有被占用,如果已经安装了apache和spawn-fcgi的话要先卸载
1.编辑sources.list,添加nginx和php5-fpm的非官方源
sudo cp /etc/apt/sources.list /etc/apt/sources.list_bak
sudo gedit /etc/apt/sources.list
deb http://ppa.launchpad.net/jdub/devel/ubuntu maverick main deb http://ppa.launchpad.net/brianmercer/php/ubuntu lucid main deb-src http://ppa.launchpad.net/brianmercer/php/ubuntu lucid main
server { listen 80; ## listen for ipv4 listen [::]:80 default ipv6only=on; ## listen for ipv6 server_name localhost; root /var/www; index index.php index.html index.htm; expires 14d; #access_log /var/log/nginx/localhost.access.log; location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param APPLICATION_ENV production; include fcgi.conf; expires off; } }
fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; # PHP only, required if PHP was built with –enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200;
转自:http://shen2.cn/2010/08/nginx-php5-fpm/