同志们,记得首先要安装Mysql啊,由于Mysql的安装步骤在之前的LAMP中已经讲过了,大家不会安装的一定要去看之前的文章哦
1. 下载PHP源码包
cd /usr/local/src
wget http://au1.php.net/distributions/php-5.4.44.tar.bz2
2. 解压压缩包,创建php-fpm账号
tar jxvf php-5.4.44.tar.bz2
useradd -s /sbin/nologin php-fpm
这里我有个疑问,为什么之前LAMP安装的时候不用单独创建个用户?这个php-fpm用户时用来干嘛的呢?这个php和之前的有什么区别呢?
在看区别之前,大家还是先来了解一下什么是CGI,FCGI,FPM
在LNMP中,Nginx本身对脚本不做任何的处理,而是去调用一个PHP-FPM的进程,二者是相互独立的。所以咱们的账户是用来跑php-fpm服务的,php-fpm是一个常驻进程。
在LAMP中,PHP是Apache的一个模块,具有相同的生命周期,当Apache需要PHP解析的时候才会调用这个模块,解释后返回给服务器。
3. 拷贝php配置文件php.ini
cp /usr/local/src/php-5.4.44/php.ini-production /usr/local/php/etc/php.ini
4. 修改php-fpm的配置文件
初始状态下并没有自动生成php-fpm.conf这个文件,我去/usr/local/php/etc/目录下看了下,有个php-fpm.conf.default这个文件,其实都一样,我们拷贝一份或者改名成php-fpm.conf都可以
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
然后我们来修改配置文件
vim /usr/local/php/etc/php-fpm.conf
在[global]下加入如下配置(大概22行的位置)
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
在[www]下面加入如下配置(大概133行的位置)
listen = /tmp/php-fcgi.sock
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
配置解释:
pid = /usr/local/php/var/run/php-fpm.pid
#pid设置,默认在安装目录中的var/run/php-fpm.pid,建议开启
error_log= /usr/local/php/var/log/php-fpm.log
#错误日志,默认在安装目录中的var/log/php-fpm.log
listen = /tmp/php-fcgi.sock
#这里牵涉到ngix和php-fpm的通信方式,之后会生成一个socket文件
在linux中,nginx服务器和php-fpm可以通过tcp socket和unix socket两种方式实现。
unix socket是一种终端,可以使同一台操作系统上的两个或多个进程进行数据通信。这种方式需要再nginx配置文件中填写php-fpm的pid文件位置,效率要比tcp socket高。Unix domain sockets 使用系统文件的地址来作为自己的身份。它可以被系统进程引用。所以两个进程可以同时打开一个Unix domain sockets来进行通信。不过这种通信方式是发生在系统内核里而不会在网络里传播。”
tcp socket的优点是可以跨服务器,当nginx和php-fpm不在同一台机器上时,只能使用这种方式。
user = php-fpm
group = php-fpm
配置运行php-fpm的用户和用户组,是我们之前创建的用户和用户组
pm = dynamic
#如何控制子进程,选项有static和dynamic。如果选择static,则由pm.max_children指定固定的子进程数。如果选择dynamic,则由下开参数决定:
pm.max_children #子进程最大数
pm.start_servers #启动时的进程数
pm.min_spare_servers #保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程
pm.max_spare_servers #保证空闲进程数最大值,如果空闲进程大于此值,此进行清理
rlimit_files = 1024
#设置文件打开描述符的rlimit限制. 默认值: 系统定义值默认可打开句柄是1024,可使用 ulimit-n查看,ulimit -n 2048修改。《这个我也不知道是什么东东》
5. 拷贝php-fpm的启动脚本
cp /usr/local/src/php-5.4.44/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
更改权限755
chmod 755 /etc/init.d/php-fpm
6. 启动php-fpm
service php-fpm start
7. 测试php-fpm是否启动
ps aux | grep php-fpm
8. 配置php-fpm服务开机启动
chkconfig php-fpm on
查看是否配置开机启动成功
chkconfig php-fpm --list
问题集锦:
在./configure过程中可能会出现以下错误
错误1:
error: xml2-config not found. Please check your libxml2 installation.
解决:
yum install libxml2 -y
yum install libxml2-devel -y
问题2:
error: Cannot find OpenSSL's
解决:
yum install openssl openssl-devel -y
问题3:
error: Please reinstall the BZip2 distribution
解决:
yum install bzip2 bzip2-devel -y
问题4:
error: jpeglib.h not found
解决:
yum -y install libjpeg libjpeg-devel
问题5:
error: png.h not found
解决:
yum -y install libpng libpng-devel
问题6:
error: freetype-config not found.
解决:
yum install -y freetype-devel
问题7:
error: mcrypt.h not found. Please reinstall libmcrypt.
解决:
yum install epel-release
yum install libmcrypt libmcrypt-devel
问题7:
Cannot retrieve metalink for repository: epel. Please verify its path and try again
原因:
yum-epel升级到0.5.2版本,更换了https链接,所以原来的镜像列表就过时了
解决:
yum –disablerepo=epel -y update ca-certificates
yum install libmcrypt libmcrypt-devel
问题8:
Error: File /var/cache/yum/i386/6/epel/metalink.xml does not exist
原因:
这个epel-7是不能用于centos6.x的,卸载了,再安装就行了:
如果是CentOS6.x执行下面就行了:
解决:
yum remove epel-release --disablerepo=epel
yum install epel-release
问题9
WARNING: unrecognized options: --enable-zend-multibyte
解决:
不用理会,版本问题
问题10
error: Please reinstall the libcurl distribution -easy.h should be in <curl-dir>/include/curl
解决:
yum install -y libcurl-devel