www.nginx.cnsitemap
首页 > nginx > nginx php-fpm安装配置

nginx php-fpm安装配置

2012年9月21日 发表评论 阅读评论

nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。

nginx一般是把请求发fastcgi管理进程处理,fascgi管理进程选择cgi子进程处理结果并返回被nginx

本文以php-fpm为例介绍如何使nginx支持PHP

一、编译安装php-fpm

什么是PHP-FPM

PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的,可以在 http://php-fpm.org/download下载得到.

PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。

新版PHP已经集成php-fpm了,不再是第三方的包了,推荐使用。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多优点,所以被PHP官方收录了。在./configure的时候带 –enable-fpm参数即可开启PHP-FPM,其它参数都是配置php的,具体选项含义可以查看这里

安装前准备
centos下执行

新版php-fpm安装(推荐安装方式)

旧版手动打补丁php-fpm安装(旧版程序已经没有了,大家新版的吧,这里做个展示)
wget http://cn2.php.net/get/php-5.2.17.tar.gz
wget http://php-fpm.org/downloads/php-5.2.17-fpm-0.5.14.diff.gz
tar zvxf php-5.2.17.tar.gz
gzip -cd php-5.2.17-fpm-0.5.14.diff.gz | patch -d php-5.2.17 -p1
cd php-5.2.17
./configure --prefix=/usr/local/php -with-config-file-path=/usr/local/php/etc
-with-mysql=/usr/local/mysql
-with-mysqli=/usr/local/mysql/bin/mysql_config -with-openssl -enable-fpm -enable-mbstring
-with-freetype-dir -with-jpeg-dir -with-png-dir -with-zlib-dir -with-libxml-dir=/usr -enable-xml
-with-mhash -with-mcrypt -enable-pcntl -enable-sockets  -with-bz2 -with-curl -with-curlwrappers
-enable-mbregex -with-gd -enable-gd-native-ttf -enable-zip -enable-soap -with-iconv -enable-bcmath
-enable-shmop -enable-sysvsem -enable-inline-optimization -with-ldap -with-ldap-sasl -enable-pdo
-with-pdo-mysql
make all install

以上两种方式都可以安装php-fpm,安装后内容放在/usr/local/php目录下

以上就完成了php-fpm的安装。

下面是对php-fpm运行用户进行设置

修改
user = www-data
group = www-data

如果www-data用户不存在,那么先添加www-data用户
groupadd www-data
useradd -g www-data www-data

二、编译安装nginx

然后按照http://www.nginx.cn/install 安装nginx

三、修改nginx配置文件以支持php-fpm

nginx安装完成后,修改nginx配置文件为,nginx.conf

其中server段增加如下配置,注意标红内容配置,否则会出现No input file specified.错误

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ .php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

四、创建测试php文件

创建php文件

在/usr/local/nginx/html下创建index.php文件,输入如下内容

五、启动服务

启动php-fpm和nginx

php-fpm关闭重启见文章结尾

六、浏览器访问

访问http://你的服务器ip/index.php,皆可以见到php信息了。

安装php-fpm时可能遇到的错误:

1. php configure时出错

configure: error: XML configuration could not be found

2. Please reinstall the BZip2 distribution

3. php的配置文件中有一行--with-mysql=/usr
安装的时候提示:
configure: error: Cannot find MySQL header files under yes.
Note that the MySQL client library is not bundled anymore.

这是由于安装mysql时没有安装mysql头文件,或者是路径指定不正确,php找不到mysql的头文件引起的错误提示。
解决方法。
(1.) 查看你的系统有没有安装mysql header
find / -name mysql.h
如果有。请指定--with-mysql=/跟你的正常路径。
如果没有。请看下一步。
(2.)redhat安装
rpm -ivh MySQL-devel-4.1.12-1.i386.rpm
(3.)ubuntu安装
apt-get install libmysqlclient15-dev
(4.)最后一步php的配置选项添加--with-mysql=/usr即可!

4.No input file specified.

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

5. 如果php configure时缺库,可以先安装库(ubuntu下)

sudo apt-get install make bison flex gcc patch autoconf subversion locate
sudo apt-get install libxml2-dev libbz2-dev libpcre3-dev libssl-dev zlib1g-dev libmcrypt-dev libmhash-dev libmhash2 libcurl4-openssl-dev libpq-dev libpq5 libsyck0-dev

6. mcrypt.h not found. Please reinstall libmcrypt

apt-get install libmcrypt-dev

或者

cd /usr/local/src
wget http://softlayer.dl.sourceforge.net/sourceforge/mcrypt/libmcrypt-2.5.8.tar.gz
tar -zxvf libmcrypt-2.5.8.tar.gz
cd /usr/local/src/libmcrypt-2.5.8
./configure --prefix=/usr/local
make
make install

7. php-fpm 5.4.7 如何关闭 重启?

php 5.4.7 下的php-fpm 不再支持 php-fpm 以前具有的 /usr/local/php/sbin/php-fpm (start|stop|reload)等命令,需要使用信号控制:

master进程可以理解以下信号

INT, TERM 立刻终止 QUIT 平滑终止 USR1 重新打开日志文件 USR2 平滑重载所有worker进程并重新载入配置和二进制模块

示例:

php-fpm 关闭:

kill -INT cat /usr/local/php/var/run/php-fpm.pid

php-fpm 重启:

kill -USR2 cat /usr/local/php/var/run/php-fpm.pid

查看php-fpm进程数:

ps aux | grep -c php-fpm

8.命令行下执行php,提示找不到命令

-bash: /usr/bin/php: No such file or directory

vi /etc/profile

在文件底部增加一行配置
export PATH=/usr/local/php/bin:$PATH

保存退出

source /etc/profile

除非注明,本站文章均为: nginx.cn原创,转载请注明本文地址: http://www.nginx.cn/231.html

--完--

分类: nginx 标签:
  1. Pingback: nginx限制某个IP同一时间段的访问次数 – NGINX中文站

  2. Pingback: Nginx图文安装教程 | 服务器监控和web架构

  3. Pingback: nginx安装配置 | Lucky's Blog

  4. Pingback: centos 上安装 nginx php5.4 - 五马石 - 记录历程

  5. Pingback: phpnginx - 程序员 - 开发者第2257592个问答

      • 前面的东西都安装了,但是freetype还是不能用,imagettftest还i是报错,phpinfo 查看gd里面没freetype

      • 尝试在安装php的时候加了选项 --with-freetype-dir=/usr/include/freetype2/freetype/ 没报错,但是还是不可用

      • ./configure --prefix=/usr/local/php --enable-fpm --with-mcrypt --enable-mbstring --disable-pdo --with-curl --disable-debug --disable-rpath --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --with-mhash --enable-zip --with-pcre-regex --with-mysql --with-mysqli --with-gd --enable-gd-native-ttf --with-png-dir --with-freetype-dir=/usr/include/freetype2/freetype/ --with-jpeg-dir

        make clean
        make
        male install
        搞定了

  6. Pingback: nginx安装 - Kalep's Blog

  7. Pingback: nginx php-fpm安装配置 - Kalep's Blog

  8. Pingback: Linux Nginx安装 | 极客我爱你 geek521.com

  9. [12-Dec-2013 16:57:29] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (98)
    ----这是什么情况啊?求解!!!

  10. Pingback: linux增加自定义path和manpath – 运维与架构

  11. 阿里云 CenterOS,前面的准备工作也作了,也按照“6. mcrypt.h not found. Please reinstall libmcrypt”的解决方案操作了,但执行编辑的时候仍然提示:configure: error: mcrypt.h not found. Please reinstall libmcrypt. 求解!

  12. make: *** No targets specified and no makefile found. Stop.

    安装前准备 都已经安装了 。这个问题这么解决呢??

  13. Pingback: LNMP搭建笔记③之编译安装nginx | aidsay

  14. Pingback: LNMP搭建笔记②之编译安装php | aidsay

  15. 我安装好了mysql 并且mysql没报任何错误也能正常运行。在/usr/local/mysql/include/mysql/mysql.h 也是有的。但是在编译php的时候 总是报
    configure: error: Cannot find MySQL header files under /usr.
    Note that the MySQL client library is not bundled anymore!
    我php ./configure --with-mysql=/usr/local/mysql --with-mysql=/usr --with-mysql 这三个方式都试过还是不行
    请问这个是怎么回事呢

  16. Pingback: 搭建Web网站服务教程 | 东东东 陈煜东的博客

  17. Pingback: 搭建Web网站服务教程 | 建站服务

  18. Pingback: Nginx安装 – 运维与架构 | 手捧啊

  19. Pingback: Nginx安装 IT部落格-专注于IT在线学习,免费编程教程,在线编程,IT面试经验—IT在线学习的引导者

  20. Pingback: Nginx安装 | 欢迎光临

  21. Pingback: Nginx安装 – NGINX中文网

  22. Pingback: 菜鸟教程:Ngnix安装详解 | 张戈博客

  23. 请问一下:我的nginx和php都安装好了,phpinfo的测试页面也能正常显示,但是为啥将WordPress的内容放到html目录下面,访问的时候就会返回500错误?

  24. Pingback: nginx php-fpm安装配置 | 分享博客

  25. 楼主,我想问下
    1、打开--enable-pcntl,不手动编译pcntl.so扩展,pcntl_fork函数是不支持的,为啥呢?
    2、打开pcntl后,php-fpm.conf进程管理是否可以配置为静态?
    望广大网友帮忙解惑。非常感谢。

  26. Pingback: Nginx安装方式 | IT668 技术库

  27. Pingback: Nginx配置 - 系统运维 - 阿里欧歌

  28. Pingback: Nginx安装 | 系统·运维·架构

  29. Pingback: Nginx安装 | Aaron个人博客

  30. Pingback: Nginx安装 – 有伴之路

  31. Pingback: nginx php-fpm安装配置 | 53技术博客

  32. Pingback: 最实用nginx的安装攻略:Nginx的配置与安装-一起玩耍17wanshua.cn

  33. Pingback: nginx php-fpm安装配置 | 加菲喵

  34. Pingback: Nginx安装 – 技术欧巴

  35. Pingback: CGI、FastCGI与PHP-FPM理解 - Ordinary

  36. 楼主你好,在phpinfo()中看到Configuration File (php.ini) Path指向/usr/local/php/lib 目录,但是在该目录下却没看到php.ini配置文件,且从根目录开始查找也没找到这个配置文件,这是为什么??

  37. Pingback: centos下Nginx安装

  38. Pingback: Nginx安装-SRE空间

  39. Pingback: Nginx安装_阿里欧歌

  40. Pingback: 前端工程师学习Nginx入门篇 丨 成都SEO|黑桃K博客-专注网络安全和网站优化

  41. Pingback: Nginx安装 爱分享-分享互联网优秀资源

  42. Pingback: 技术网址 – theheartofsea