和LAMP不同的是LNMP中的N指的是Nginx(类似于Apache的一种web服务软件)其他都一样。目前这种环境应用的也是非常之多。Nginx设计的初衷是提供一种快速高效多并发的web服务软件。在静态页面的处理上Nginx的确胜Apache一筹,然而在动态页面的处理上Nginx并不比Apache有多少优势。但是,目前还是有很多爱好者对Nginx比较热衷,随着Nginx的技术逐渐成熟,它在web服务软件领域的地位越来越高。
LNMP架构中,MySQL的安装方法和LAMP中MySQL的安装方法一样,先安装MySQL再安装PHP。
PHP编译安装
这里要先声明一下,针对Nginx的php安装和针对apache的php安装是有区别的,因为Nginx中的php是以fastcgi的方式结合nginx的,可以理解为nginx代理了php的fastcgi,而apache是把php作为自己的模块来调用的。
(1)下载PHP源码包
[root@LNMP mysql]# cd /usr/local/src
[root@LNMP src]# wget http://cn2.php.net/distributions/php-5.4.45.tar.bz2
(2)解压源码包,创建账号
[root@LNMP src]# tar jxf php-5.4.45.tar.bz2
[root@LNMP src]# useradd -s /sbin/nologin php-fpm
该账号用来运行php-fpm服务,在LNMP环境中,PHP是以一个服务来提供服务的。
(3)安装php之前,请提前安装好其所依赖的安装包:
yum install -y bzip2-devel curl-devel db4-devel libjpeg-devel libpng-devel libXpm-devel gmp-devel libc-client-devel openldap-devel unixODBC-devel postgresql-devel sqlite-devel aspell-devel net-snmp-devel libxslt-devel libxml2-devel pcre-devel mysql-devel unixODBC-devel postgresql-devel pspell-devel net-snmp-devel
错误:configure: error: mcrypt.h not found. Please reinstall libmcrypt.
复制代码 代码如下:
#wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/libmcrypt-2.5.7.tar.gz
#tar zxf libmcrypt-2.5.7.tar.gz
#cd libmcrypt-2.5.7
#./configure
#make
#make install
(4)配置编译选项
[root@LNMP libmcrypt-2.5.7]# cd /usr/local/src
[root@LNMP src]# cd php-5.4.45
[root@LNMP php-5.4.45]# ./configure \--prefix=/usr/local/php \--with-config-file-path=/usr/local/php/etc \--enable-fpm \--with-fpm-user=php-fpm \--with-fpm-group=php-fpm \--with-mysql=/usr/local/mysql \--with-mysql-sock=/tmp/mysql.sock \--with-libxml-dir \--with-gd \--with-jpeg-dir \--with-png-dir \--with-freetype-dir \--with-iconv-dir \--with-zlib-dir \--with-mcrypt \--enable-soap \--enable-gd-native-ttf \--enable-ftp \--enable-mbstring \--enable-exif \--disable-ipv6 \--with-pear \--with-curl \--with-openssl
编译过程中如遇到错误,此地址查找解决http://blog.sina.com.cn/s/blog_167f23bf50102xdki.html
(5)编译PHP
[root@LNMP php-5.4.45]# make
如果在这一步遇到错误,请参照如下:
1)Generating phar.php
Generating phar.phar
PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be enabled.
pharcommand.inc
directorygraphiterator.inc
clicommand.inc
invertedregexiterator.inc
directorytreeiterator.inc
phar.inc
Build complete.
Don't forget to run 'make test'.
php 的编译时需要依赖pear package ,目前的问题错误"PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be enabled.",已经明显报出这个问题。
因此编译使用参数 --without-pear 将pear 屏蔽掉编译安装后,再进行安装;同时因为phar 属于pear的一个库 ,所以不将phar关闭掉,同时还会报这个错误,
同时需要使用 --disable-phar 编译参数.
解决办法:
./configure --without-pear --disable-phar
make
make install
2)/usr/bin/ld: cannot find -lltdlcollect2: ld returned 1 exit statusmake: *** [sapi/fpm/php-fpm] 错误 1
解决办法:
yum install -y libtool-ltdl-devel
(6)安装PHP
先查看之前PHP安装的目录文件
[root@lnmp php-5.4.45]# ls /usr/local/php/
bin etc include lib php sbin var
先删除,再安装新的PHP
[root@lnmp php-5.4.45]# rm -rf /usr/local/php/
[root@LNMP php-5.4.45]# make install
以上每一个步骤,如果没有完全执行正确,那么下一步是无法进行的,是否还记得判断执行是否正确的方法? 使用 echo $? 看结果是否为 “0” , 如果不是,就是没有执行正确。
(7)修复配置文件
[root@LNMP php-5.4.45]# cp php.ini-production /usr/local/php/etc/php.ini
[root@LNMP php-5.4.45]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm(拷贝启动执行脚本)
[root@lnmp php-5.4.45]# chmod 755 /etc/init.d/php-fpm
授执行权限
[root@lnmp php-5.4.45]# chkconfig --add php-fpm
加入到系统服务列表里去
[root@LNMP php-5.4.45]# chkconfig php-fpm on
开机启动
[root@LNMP php-5.4.45]# service php-fpm start
重新启动php-fpm服务
Starting php-fpm [06-Apr-2017 03:18:37] ERROR: failed to open configuration file '/usr/local/php/etc/php-fpm.conf': No such file or directory (2)
[06-Apr-2017 03:18:37] ERROR: failed to load configuration file '/usr/local/php/etc/php-fpm.conf'
[06-Apr-2017 03:18:37] ERROR: FPM initialization failed
failed
以上错误是配置文件不存在,无法启动
解决办法需要拷贝一个启动文件
[root@lnmp php-5.4.45]# cd /usr/local/php/etc/
[root@lnmp etc]# ls
pear.conf php-fpm.conf.default php.ini
[root@lnmp etc]# mv php-fpm.conf.default php-fpm.conf(重命名)
[root@lnmp etc]# /usr/local/php/sbin/php-fpm -t (检查文件是否有错误)
[06-Apr-2017 03:24:53] NOTICE: configuration file /usr/local/php/etc/php-fpm.conf test is successful
[root@LNMP php-5.4.45]# service php-fpm start
再次重新启动php-fpm服务
Starting php-fpm [06-Apr-2017 03:31:22] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (98)
[06-Apr-2017 03:31:22] ERROR: FPM initialization failed
failed
解决方法:
#netstat -lntup | grep 9000
#killall php-fpm
# service php-fpm start
Starting php-fpm done启动成功
[root@lnmp etc]# ps aux |grep php-fpm
查看是否启动,查看进程
[root@lnmp etc]# netstat -lnp
查看监听端口
root 21454 0.0 0.1 26712 2972 ? Ss 18:52 0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
php-fpm 21455 0.0 0.1 26712 2656 ? S 18:52 0:00 php-fpm: pool www
php-fpm 21456 0.0 0.1 26712 2656 ? S 18:52 0:00 php-fpm: pool www
root 21458 0.0 0.0 5980 740 pts/0 R+ 18:52 0:00 grep php-fpm
以上笔记已经将PHP安装完毕,以下内容经供参考
[root@LNMP php-5.4.45]# vim /usr/local/php/etc/php-fpm.conf
把如下内容写入该文件:
[global]pid = /usr/local/php/var/run/php-fpm.piderror_log = /usr/local/php/var/log/php-fpm.log[www]listen = /tmp/php-fcgi.sockuser = php-fpmgroup = php-fpmpm = dynamicpm.max_children = 50pm.start_servers = 20pm.min_spare_servers = 5pm.max_spare_servers = 35pm.max_requests = 500rlimit_files = 1024
保存配置文件后,检验配置是否正确的方法为:
/usr/local/php/sbin/php-fpm -t
如果出现诸如 “test is successful” 字样,说明配置成功。
(8)启动php-fpm
首先要拷贝一个启动脚本到/etc/init.d/下
[root@LNMP php-5.4.45]# cp /usr/local/src/php-5.4.45/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
给它更改权限为755
[root@LNMP php-5.4.45]# chmod 755 /etc/init.d/php-fpm
重新启动php-fpm服务
[root@LNMP php-5.4.45]# service php-fpm start
如果想让它开机启动,执行:
[root@LNMP php-5.4.45]# chkconfig php-fpm on
检测是否启动:
[root@LNMP php-5.4.45]# ps aux |grep php-fpm
root 5901 0.0 0.1 26888 3144 ? Ss 23:32 0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
php-fpm 5902 0.0 0.1 26888 2660 ? S 23:32 0:00 php-fpm: pool www
php-fpm 5903 0.0 0.1 26888 2660 ? S 23:32 0:00 php-fpm: pool www
php-fpm 5904 0.0 0.1 26888 2660 ? S 23:32 0:00 php-fpm: pool www
php-fpm 5905 0.0 0.1 26888 2660 ? S 23:32 0:00 php-fpm: pool www
php-fpm 5906 0.0 0.1 26888 2660 ? S 23:32 0:00 php-fpm: pool www
php-fpm 5907 0.0 0.1 26888 2664 ? S 23:32 0:00 php-fpm: pool www
php-fpm 5908 0.0 0.1 26888 2664 ? S 23:32 0:00 php-fpm: pool www
php-fpm 5909 0.0 0.1 26888 2664 ? S 23:32 0:00 php-fpm: pool www
php-fpm 5910 0.0 0.1 26888 2664 ? S 23:32 0:00 php-fpm: pool www
php-fpm 5911 0.0 0.1 26888 2664 ? S 23:32 0:00 php-fpm: pool www
php-fpm 5912 0.0 0.1 26888 2664 ? S 23:32 0:00 php-fpm: pool www
php-fpm 5913 0.0 0.1 26888 2664 ? S 23:32 0:00 php-fpm: pool www
php-fpm 5914 0.0 0.1 26888 2664 ? S 23:32 0:00 php-fpm: pool www
php-fpm 5915 0.0 0.1 26888 2664 ? S 23:32 0:00 php-fpm: pool www
php-fpm 5916 0.0 0.1 26888 2664 ? S 23:32 0:00 php-fpm: pool www
php-fpm 5917 0.0 0.1 26888 2664 ? S 23:32 0:00 php-fpm: pool www
php-fpm 5918 0.0 0.1 26888 2664 ? S 23:32 0:00 php-fpm: pool www
php-fpm 5919 0.0 0.1 26888 2664 ? S 23:32 0:00 php-fpm: pool www
php-fpm 5920 0.0 0.1 26888 2664 ? S 23:32 0:00 php-fpm: pool www
php-fpm 5921 0.0 0.1 26888 2664 ? S 23:32 0:00 php-fpm: pool www
root 5924 0.0 0.0 5984 752 pts/0 S+ 23:36 0:00 grep php-fpm