nginx php-fpm安装配置

nginx php-fpm安装配置

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下执行

bash 复制代码
yum -y install gcc automake autoconf libtool make

yum -y install gcc gcc-c++ glibc

yum -y install libmcrypt-devel mhash-devel libxslt-devel 
libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel 
zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel 
ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel 
krb5 krb5-devel libidn libidn-devel openssl openssl-devel

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

bash 复制代码
wget http://cn2.php.net/distributions/php-5.4.7.tar.gz
tar zvxf php-5.4.7.tar.gz
cd php-5.4.7
./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 --with-jpeg-dir

make all install

旧版手动打补丁php-fpm安装(旧版程序已经没有了,大家新版的吧,这里做个展示)

bash 复制代码
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运行用户进行设置

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

bash 复制代码
cd /usr/local/php
cp etc/php-fpm.conf.default etc/php-fpm.conf
vi etc/php-fpm.conf

修改

bash 复制代码
user = www-data
group = www-data

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

bash 复制代码
groupadd www-data
useradd -g www-data www-data

二、编译安装nginx

然后按照http://blog.redis.com.cn/install 安装nginx

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

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

其中server段增加如下配置

bash 复制代码
root html;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

否则会出现No input file specified.错误

bash 复制代码
# 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文件,输入如下内容

bash 复制代码
<?php
    echo phpinfo();
?>

五、启动服务

启动php-fpm和nginx

bash 复制代码
/usr/local/php/sbin/php-fpm 
#手动打补丁的启动方式/usr/local/php/sbin/php-fpm start

sudo /usr/local/nginx/nginx

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

六、浏览器访问

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

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

1. php configure时出错

bash 复制代码
configure: error: XML configuration could not be found

apt-get install libxml2 libxml2-dev  (ubuntu下)
yum -y install libxml2 libxml2-devel(centos下)

2. Please reinstall the BZip2 distribution

bash 复制代码
wget http://www.bzip.org/1.0.5/bzip2-1.0.5.tar.gz
tar -zxvf bzip2-1.0.5.tar.gz
cd bzip2-1.0.5
make
make install

3. php的配置文件中有一行--with-mysql=/usr。

安装的时候提示:

bash 复制代码
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
bash 复制代码
find / -name mysql.h

如果有。请指定--with-mysql=/跟你的正常路径。
如果没有。请看下一步。

(2.)redhat安装
bash 复制代码
rpm -ivh MySQL-devel-4.1.12-1.i386.rpm
(3.)ubuntu安装
bash 复制代码
apt-get install libmysqlclient15-dev
(4.)最后一步php的配置选项添加--with-mysql=/usr即可!

4.No input file specified.

bash 复制代码
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下)

bash 复制代码
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

bash 复制代码
apt-get install libmcrypt-dev

或者

bash 复制代码
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 关闭:
bash 复制代码
kill -INT cat /usr/local/php/var/run/php-fpm.pid
php-fpm 重启:
bash 复制代码
kill -USR2 cat /usr/local/php/var/run/php-fpm.pid
查看php-fpm进程数:
bash 复制代码
ps aux | grep -c php-fpm

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

bash 复制代码
-bash: /usr/bin/php: No such file or directory

vi /etc/profile

在文件底部增加一行配置

bash 复制代码
export PATH=/usr/local/php/bin:$PATH

保存退出

bash 复制代码
source /etc/profile
相关推荐
天才奇男子6 分钟前
HAProxy高级功能全解析
linux·运维·服务器·微服务·云原生
小李独爱秋22 分钟前
“bootmgr is compressed”错误:根源、笔记本与台式机差异化解决方案深度指南
运维·stm32·单片机·嵌入式硬件·文件系统·电脑故障
Dxy12393102161 小时前
413 Request Entity Too Large 原因与解决方案
nginx
darkb1rd1 小时前
四、PHP文件包含漏洞深度解析
网络·安全·php
Dying.Light2 小时前
Linux部署问题
linux·运维·服务器
CYpdpjRnUE2 小时前
光储一体机仿真模型搭建之旅
nginx
S19012 小时前
Linux的常用指令
linux·运维·服务器
萤丰信息2 小时前
AI 筑基・生态共荣:智慧园区的价值重构与未来新途
大数据·运维·人工智能·科技·智慧城市·智慧园区
小义_2 小时前
【RH134知识点问答题】第7章 管理基本存储
linux·运维·服务器
运维小欣2 小时前
Agentic AI 与 Agentic Ops 驱动,智能运维迈向新高度
运维·人工智能