Linux / php · 2012-07-18

在linux下编译安装nginx+php(fastcgi)

nginx使用fastcgi方式连接php,在linux下面编译安装时要编译php支持fastcgi方式,其他的一些东西,照着原来的方式装就可以了。

分为以下步骤:

1、安装php的fastcgi版 2、使用spawn-fcgi启动php的fastcgi引擎 3、配置nginx连接php的fastcgi引擎

1、安装php的fastcgi版

mkdir /usr/local/modules

#jpeg目录 mkdir /usr/local/modules/jpeg6 mkdir /usr/local/modules/jpeg6/bin mkdir /usr/local/modules/jpeg6/lib mkdir /usr/local/modules/jpeg6/include mkdir /usr/local/modules/jpeg6/man mkdir /usr/local/modules/jpeg6/man/man1

A1、安装zlib

tar xzvf zlib-1.2.1.tar.gz cd zlib-1.2.1 #不要用–prefix自定义安装目录,影响gd的安装 ./configure make make install

A2、安装freetype

tar xzvf freetype-2.1.5.tar.gz cd freetype-2.1.5 ./configure –prefix=/usr/local/modules/freetype make make install

A3、安装libpng

tar xzvf libpng-1.2.5.tar.gz #不要用–prefix自定义安装目录,影响gd的安装 cd libpng-1.2.5 cp scripts/makefile.std makefile make test make install

A3、安装jpeg

tar xzvf jpegsrc.v6b.tar.gz cd jpeg-6b ./configure –prefix=/usr/local/modules/jpeg6 –enable-shared –enable-static make make install

A4、安装GD

tar xzvf gd-2.0.28.tar.gz ./configure –prefix=/usr/local/modules/gd –with-jpeg=/usr/local/modules/jpeg6 –with-png –with-zlib –with-freetype=/usr/local/modules/freetype make make install

然后编译安装php,注意加上–enable-fastcgi参数和–enable-force-cgi-redirect参数

./configure –prefix=/usr/local/php –with-gd=/usr/local/modules/gd –with-jpeg-dir=/usr/local/modules/jpeg6 –with-zlib –with-png –with-freetype-dir=/usr/local/modules/freetype –enable-magic-quotes –enable-fastcgi –with-mysql=/usr/local/mysql –enable-track-vars –enable-ftp –with-config-file-path=/usr/local/php/etc –with-zip –enable-force-cgi-redirect make -j10 make install

如果过程中发现有错误:

mysql的错误在ubuntu 12.04 x64上解决方法: sudo ln -s /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18 /usr/lib64/ sudo ln -s /usr/lib/x86_64-linux-gnu/libmysqlclient.so /usr/lib64/ 2、使用spawn-fcgi启动php的fastcgi引擎

编译完成后在/usr/local/php/bin/下面就会有php-cgi这个可执行程序,使用spawn-fcgi启动php的fastcgi引擎:

/data/nginx/sbin/spawn-fcgi -a 127.0.0.1 -p 9000 -u nobody -f /usr/bin/php-cgi -C 20

意思是fastcgi使用本机ip和端口9000提供服务,权限nobody,启动20个进程。其中主要留意-C这个参数,一般20个进程足够用了,觉得不够亦可开大,在我的机器上每个php-cgi进程会占用7-8兆内存,开100个就是700-800兆。

spawn-fcgi这个程序在nginx里没有提供,可以在

http://www.sudone.com/download/spawn-fcgi

下载到,一般放在nginx的sbin目录下,然后要给它加上可执行权限:

chmod +x /data/nginx/sbin/spawn-fcgi

3、配置nginx连接php的fastcgi引擎

首先弄一份fastcgi-params配置,在nginx的conf目录下建一份文本文件,内容是:

#fastcgi-params 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_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  GATEWAY_INTERFACE  CGI/1.1; fastcgi_param  SERVER_SOFTWARE    nginx;

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; #end

这个是最原始的fastcgi-params,在网上也可能有更优化的版本,可以相应取用。

然后配置nginx.conf,比如www.sudone.com,这样配置就可以用了:

server { include port.conf; server_name www.sudone.com sudone.com;

location / { index index.html index.php; root /data/sudone/php/; }

location ~ .php$ { fastcgi_pass   127.0.0.1:9000; fastcgi_index  index.php; fastcgi_param  SCRIPT_FILENAME  /data/sudone/php$fastcgi_script_name; include        fastcgi_params; } }

拿下来之后,有几个需要改的地方:

1、server_name 2、location /里面的root 3、location ~ .php$里面的fastcgi_param  SCRIPT_FILENAME

其中fastcgi_param  SCRIPT_FILENAME的参数中,$fastcgi_script_name前面是php文件的路径一般和root一样的,最后不用写/,貌似会有点问题,不要画蛇添足。

注意事项:

可能会有的管理员启动nginx后总是忘记启动spawn-fcgi,所以最好是写一份脚本来启动,然后要养成测试服务可用性的习惯。