编译安装php和nginx


最近由于某些原因把网站服务器从apache切换到nginx,也就是从LAMP到了LEMP(LNMP)。apache和php连接方式是通过模块,nginx和php的连接方式个人选择的是php-fpm(考虑到有些人可能不清楚php-fpm和php的区别,个人建议把php-fpm当作php的一个模块来看,是实现了cgi的可以与其他程序交互的模块。php-fpm更详细的资料可以查询php官网。),以下就是个人编译安装nginx和php-fpm的记录。

安装顺序如下:

  1. 编译安装nginx
  2. 确认可以显示HTML页面
  3. 在mysql已经安装的情况下,编译安装php
  4. 配置nginx和php-fpm的连接
  5. 确认基本php页面正常显示

编译安装nginx和测试index.html

# replace 'x' with concrete version number
wget http://nginx.org/download/nginx-x.x.x.tar.gz
tar zxvf nginx-x.x.x.tar.gz
cd nginx-x.x.x.tar.gz

# default prefix is /usr/local/nginx
./configuare
make
make install

# link some files for convenience
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx
ln -s /usr/local/nginx/conf/nginx.conf /usr/local/etc/nginx.conf

# start nginx
nginx

# test index.html
curl http://localhost

编译安装php

编译安装php时需要注意的有

  1. 内存尽量空出来,小内存的至少不要一边运行mysql一边编译php
  2. 如果遇到某个命令编译时间过长,用稍微低一点版本的php试试

以下是个人实际编译过程,其中–enable-fpm是启用php-fpm的重要参数。

# replace 'x' with concrete version number
wget http://www.php.net/get/php-x.x.x.tar.gz/from/this/mirror -O php-x.x.x.tar.gz
tar zxvf php-x.x.x.tar.gz
cd php-x.x.x

# ensure mysql installed
# my mysql is in /usr/local/mysql
./configuare --with-mysql=/usr/local/mysql --enable-fpm --with-zlib --prefix=/usr/local/php
make
make install

编译之后还不能使用php-fpm,先复制著名的php.ini(可选,最后做也行):

cp php.ini-production /usr/local/php/lib/php.ini
ln -s /usr/local/php/lib/php.ini /usr/local/etc/php.ini

准备php-fpm的文件:

# copy default php-fpm configuration
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
ln -s /usr/local/php/etc/php-fpm.conf /usr/local/etc/php-fpm.conf

vi /usr/local/etc/php-fpm.conf 
# find nobody and replace with www-data

# link binary file for convenience
ln -s /usr/local/php/sbin/php-fpm /usr/local/bin/php-fpm

默认的php-fpm.conf和php.ini不一样,不能直接使用,主要是用户不对,这里在vi修改文件时把默认的nobody改成www-data,配置段如下:

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = www-data
group = www-data

修改完之后启动php-fpm。

# start php-fpm
php-fpm

# check by port
netstat -anp | fgrep --color 9000

连接nginx和php-fpm

准备“著名的info.php“。

<?php
  phpinfo();
?>

放在nginx的”htdocs“中,本文中为/usr/local/nginx/html/。接下来修改nginx.conf,主要是取消location php部分的注释,修改其中的内容。

# vi /usr/local/etc/nginx.conf
location ~ \.php$ {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    # default is /scripts$fastcgi_script_name
    # not work, replace '/scripts' with $document_root
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}   

检查配置,重启nginx并测试。

nginx -t
nginx -s reload
curl http://localhost/info.php

如果显示OK,说明nginx和php连接成功。
至此,nginx+php基本功能OK,不过因为是编译安装的,启动php-fpm和nginx不是很方便,之后的文章会进一步讲解。


2 responses to “编译安装php和nginx”