HowTo: Install Nginx and php-fpm on Linux

最近要为公司搭建新的开发环境,打算舍弃用了n年的apache,换换口味,装个nginx试试。
在网上找了很多文档,没有一个能让我顺利安装完成的。还是自己来整理整理吧……

1,Install Pcre

来这里获取Pcre的最新版本
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/

#tar -zxf pcre-7.8.tar.gz
#cd pcre-7.8
#./configure
#make
#make install

2. Install Nginx(http://www.nginx.net/)

#tar -zxf nginx-0.6.32.tar.gz
#cd nginx-0.6.32
#./configure –prefix=/usr/local/nginx-0.6.32
#make
#make install

3. Install PHP with php-fpm (http://www.php.net/)

nginx是通过fastcgi来支持PHP的,使用php-fpm补丁是一个比较方便的管理fastcgi进程的解决方案。
比通过脚本或是lighttpd的spawn模块要简单的多。

下载好PHP后,来这里获取与PHP版本相对应的php-fpm补丁:http://php-fpm.anight.org/

#tar -zxf php-5.2.6.tar.gz
#cd php-5.2.6
#zcat ../php-5.2.6-fpm-0.5.8.diff.gz | patch -p1  #为PHP打补丁
#./configure –prefix=/usr/local/php-5.2.6 –with-sqlite=shared –enable-fastcgi –enable-fpm
#make
#make install
注:PHP的其他模块(如mysql、gd等)请按需自己配置

#cp php.ini-recommended /usr/local/php-5.2.6/lib/php.ini

修改php.ini

cgi.fix_pathinfo=1

4. Configuring

A. 配置nginx,在/usr/local/nginx-0.6.32/conf目录下新建名为php_fcgi.conf的文件,内容如下:

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

修改nginx.conf文件,在需要支持PHP的虚拟主机配置中,加入如下一行:

include php_fcgi.conf;

B. 配置php-fpm模块,编辑/usr/local/php-5.2.6/etc/php-fpm.conf文件
找到“Unix user of processes”和“Unix group of processes”两段,将前面注释去掉,并将值改为与nginx配置相同的用户和组。如下:

Unix user of processes
<value name=”user”>www</value>

Unix group of processes
<value name=”group”>www</value>

5. Test and Over

至此,所有安装配置的工作都已经完成。运行下面两行命令来启动nginx和php-fpm服务:

/usr/local/php-5.2.6/sbin/php-fpm start
/usr/local/nginx-0.6.32/sbin/nginx

正确配置后,phpinfo() 页应如下显示:
phf.png
CGI/FastCGI work as Server API
phf2.png

由于文件内容太长,nginx.conf和虚拟主机的配置文件的内容就不放上来了
将这些乱七八糟的配置文件和php-fpm.conf一起打个包,放在这里提供下载吧

http://rui7905.googlecode.com/svn/trunk/nginx_php_fpm

在这一堆东西里,还有一个名为nginx.sh的启动控制脚本。
当确认nginx和php-fpm均正确的配置并可以正常运行后,可以使用此脚本进行日常维护。

HowTo: Install Nginx and php-fpm on Linux》有5个想法

  1. phoebus

    你好,我是nginx初学者,看了你的文章对我有很大的帮助。但现在我遇到一个问题需要你指点一下:
    php-fpm和NGINX以及MYSQL都成功启动了,并且可以读出html文件,但无法解析php,总是提示No input file specified.

    请问这个问题应该如何处理?

    回复
  2. kevin 文章作者

    “No input file specified”这个信息是并不是nginx返回的,是由php-fpm模块返回。意思就是没有找到要解析的php文件。
    nginx是通过类似这一块来将php的解析请求发给php-fpm来处理的
    location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
    我估计你应该是最后一句路径的配置有问题。

    回复
  3. Jer

    感謝 kevin 的文章, 總算成功安裝, 但有一個問題

    我發現在 php 文件中

    使用 <? 會令文件不能運行, 必須使用 <?php 才行

    但我的文件全都用了 <?, 請問有否方法解決這問題呢?

    回复
  4. kevin 文章作者

    修改你的php.ini文件,找到“short_open_tag”这一行,将等号后面的“Off”改为“On”即可。

    至于怎么知道你目前系统使用的php.ini在什么地方,用你的<?php方式,写一个只包含“phpinfo();”这么一行内容的程序,在显示的页面的第一屏就可以看到“Loaded Configuration File”这一项。

    回复

发表评论

邮箱地址不会被公开。 必填项已用*标注