首页 > 代码库 > 0.3 LNMP环境应用实践
0.3 LNMP环境应用实践
LNMP应用环境
LNMP介绍
大约在2010年以前,互联网公司最常用的经典Web服务环境组合就是LAMP
(即Linux、Apache、MySQL、PHP),近几年随着Nginx Web服务的逐渐流行,
又出现了新的Web服务环境组合——LNMP或LEMP,
其中LNMP为Linux、Nginx、MySQL、PHP等首字母的缩写,
而LEMP中的E则表示Nginx,它取自Nginx名字的发音(engine x)。
现在,LNMP已经逐渐成为国内大中型互联网公司网站的主流组合环境,因此,
我们必须熟练掌握LNMP环境的搭建、优化及维护方法。
LNMP组合工作流程
在深入学习LNMP组合之前,有必要先来了解一下LNMP环境组合的基本原理,也就是它们之间到底是怎样互相调度的?
当LNMP组合工作时,首先是用户通过浏览器输入域名请求Nginx Web服务,
如果请求是静态资源,则由Nginx解析返回给用户;
如果是动态请求(.php结尾),那么Nginx就会把它通过FastCGI接口
(生产常用方法)发送给PHP引擎服务(FastCGI进程php-fpm)进行解析,
如果这个动态请求要读取数据库数据,那么PHP就会继续向后请求MySQL数据库,
以读取需要的数据,并最终通过Nginx服务把获取的数据返回给用户,
这就是LNMP环境的基本请求顺序流程(如图6-1和图6-2所示)。
这个请求流程是企业使用LNMP环境的常用流程。
图6-1 LNMP组合调用关系逻辑图 图6-2 LNMP组合FastCGI方式调用PHP、MySQL的关系逻辑图
LNMP之MySQL数据库
MySQL数据库介绍
MySQL是互联网领域里非常重要的、深受广大用户欢迎的一款开源关系型数据库软件,由瑞典MySQL AB公司开发与维护。
2006年,MySQL AB公司被SUN公司收购,
2008年,SUN公司又被传统数据数据库领域大佬甲骨文(Oracle)公司收购。
因此,MySQL数据库软件目前属于Oracle公司,但仍是开源的,
Oracle公司收购MySQL的战略意图显而易见,
其自身的Oracle数据库继续服务于传统大中型企业,
而利用收购的MySQL抢占互联网领域数据库份额,完成其战略布局。
MySQL是一种关系型数据库管理软件,关系型数据库的特点是将数据保存在不同的二维表中,
并且将这些表放入不同的数据库中,而不是把所有数据统一放在一个大仓库里,
这样的设计增加了MySQL的读取速度,灵活性和可管理性也得到了很大提高。
访问及管理MySQL数据库的最常用标准化语言为SQL结构化查询语言。
为什么选择MySQL数据库
目前,绝大多数使用Linux操作系统的互联网企业都使用MySQL作为后端的数据库,
从大型的BAT门户,到电商门户平台、分类门户平台等无一例外。
那么,MySQL数据库到底有哪些优势和特点,让大家毫不犹豫地选择它呢?
原因可能有以下几点:
·性能卓越、服务稳定,很少出现异常宕机。
·开放源代码且无版权制约,自主性强、使用成本低。
·历史悠久,社区及用户非常活跃,遇到问题,可以很快获取到帮助。
·软件体积小,安装使用简单,并且易于维护,安装及维护成本低。
·支持多种操作系统,提供多种API接口,支持多种开发语言,特别是对流行的PHP语言无缝支持。
·品牌口碑效应,使得企业无需考虑就直接用之。
更多的MySQL介绍见后面的章节。
安装MySQL数据库
1.安装概览
MySQL有几种不同的产品线,且每种产品线又有很多不同的版本,这里选择当前企业使用最广的社区版MySQL 5.5系列作为LNMP的组合环境数据库平台。
MySQL的安装方法也有很多,常见的方法见表6-1。
安装MySQL数据库安装
安装方式(二进制、源码、多实例)基本操作(建库、建表、字符集、配置文件my.cnf调优)基本命令(create、grant、show、select、update、alter、delete)基本日志(三中级别、错误日志、运行日志、慢查询日志) 备份恢复(mysqldump、xtrabackup、增量备份、全量备份) 扩展功能(主从,主主、MySQL HA、MHA) 监控工具(percona监控、shell脚本监控、Lepus监控)
https://downloads.mysql.com/archives/community/ 官网安装包
https://downloads.mysql.com/archives/get/file/mysql-5.5.49-linux2.6-x86_64.tar.gz
[root@web01 ~]# cd /home/oldboy/tools/
[root@web01 tools]# wget https://downloads.mysql.com/archives/get/file/mysql-5.5.49-linux2.6-x86_64.tar.gz
[root@web01 tools]# useradd -s /sbin/nologin mysql -M
[root@web01 tools]# id mysql
[root@web01 tools]# tar xf mysql-5.5.49-linux2.6-x86_64.tar.gz
[root@web01 tools]# mv mysql-5.5.49-linux2.6-x86_64 /application/mysql-5.5.49
[root@web01 tools]# ln -s /application/mysql-5.5.49/ /application/mysql
[root@web01 tools]# ls /application/mysql
[root@web01 tools]# cd /application/mysql
[root@web01 mysql]# chown -R mysql.mysql /application/mysql
[root@web01 mysql]# ./scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/application/mysql/data --user=mysql # 初始化完毕之后就装好了
Installing MySQL system tables...170214 13:54:22 [Note] /application/mysql//bin/mysqld (mysqld 5.5.49) starting as process 1475 ...OKFilling help tables...170214 13:54:23 [Note] /application/mysql//bin/mysqld (mysqld 5.5.49) starting as process 1482 ...OKTo start mysqld at boot time you have to copysupport-files/mysql.server to the right place for your systemPLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !To do so, start the server, then issue the following commands:/application/mysql//bin/mysqladmin -u root password ‘new-password‘/application/mysql//bin/mysqladmin -u root -h web01 password ‘new-password‘Alternatively you can run:/application/mysql//bin/mysql_secure_installationwhich will also give you the option of removing the testdatabases and anonymous user created by default. This isstrongly recommended for production servers.See the manual for more instructions.You can start the MySQL daemon with:cd /application/mysql/ ; /application/mysql//bin/mysqld_safe &You can test the MySQL daemon with mysql-test-run.plcd /application/mysql//mysql-test ; perl mysql-test-run.plPlease report any problems at http://bugs.mysql.com/
看到两个OK 就对了
[root@web01 mysql]# ll data/ # 会生成mysql和performance_schema内部管理的库
总用量 12drwx------ 2 mysql root 4096 2月 14 13:54 mysqldrwx------ 2 mysql mysql 4096 2月 14 13:54 performance_schemadrwxr-xr-x 2 mysql root 4096 2月 14 13:44 test
[root@web01 mysql]# ll data/mysql/ # 里面有很多表
总用量 1052-rw-rw---- 1 mysql mysql 8820 2月 14 13:54 columns_priv.frm-rw-rw---- 1 mysql mysql 0 2月 14 13:54 columns_priv.MYD
[root@web01 mysql]# ll data/performance_schema/
总用量 208-rw-rw---- 1 mysql mysql 8624 2月 14 13:54 cond_instances.frm-rw-rw---- 1 mysql mysql 61 2月 14 13:54 db.opt
[root@web01 mysql]# cd bin/
[root@web01 bin]# sed ‘s#/usr/local/#/application/#g‘ mysqld_safe |grep appl
因为我们之前安装路径修改成/applicaion了所以这里需要替换与一下这个文件里的默认路径修改成我们后来自定义的文件
[root@web01 bin]# ll /application/mysql/
[root@web01 bin]# sed -i ‘s#/usr/local/#/application/#g‘ mysqld_safe
启动mysql
[root@web01 bin]# cd ../
给配置文件
[root@web01 mysql]# cp support-files/my-medium.cnf /etc/my.cnf cp:是否覆盖"/etc/my.cnf"? y
[root@web01 bin]# /application/mysql/bin/mysqld_safe --user=mysql &
[root@web01 mysql]# lsof -i :3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEmysqld 2136 mysql 11u IPv4 19235 0t0 TCP *:mysql (LISTEN)
[root@web01 mysql]# /application/mysql/bin/mysql # 可以登录进去的话表示成功了
Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 2Server version: 5.5.49-log MySQL Community Server (GPL)Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.mysql> quit # quit是退出
[root@web01 mysql]# PATH="/application/mysql/bin:$PATH"
[root@web01 mysql]# which mysql
/application/mysql/bin/mysql
[root@web01 mysql]# vim /etc/profile
PATH="/application/mysql/bin:$PATH"
永久生效
[root@web01 mysql]# . /etc/profile # 加载一下
[root@web01 mysql]# echo $PATH
/application/mysql/bin:/application/mysql/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@web01 mysql]# mysql # 此时输入mysql就直接进来了
Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 3Server version: 5.5.49-log MySQL Community Server (GPL)Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.mysql>
再次修改一个文件
每次启动这样太麻烦 /application/mysql/bin/mysqld_safe --user=mysql & 让他简单
只需要整一下启动脚本
[root@web01 mysql]# sed -i ‘s#/usr/local/#/application/#g‘ support-files/mysql.server
[root@web01 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@web01 mysql]# chmod +x /etc/init.d/mysqld
[root@web01 mysql]# /etc/init.d/mysqld stop # 关闭MySQL
Shutting down MySQL.170214 14:28:09 mysqld_safe mysqld from pid file /application/mysql/data/web01.pid ended SUCCESS! [1]+ Done /application/mysql/bin/mysqld_safe --user=mysql
[root@web01 mysql]# lsof -i :3306
[root@web01 mysql]# /etc/init.d/mysqld start #启动MySQL
Starting MySQL.. SUCCESS!
[root@web01 mysql]# lsof -i :3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEmysqld 2487 mysql 11u IPv4 19826 0t0 TCP *:mysql (LISTEN)
[root@web01 mysql]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 1Server version: 5.5.49-log MySQL Community Server (GPL)Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.mysql>
[root@web01 mysql]# chkconfig --add mysqld
[root@web01 mysql]# chkconfig --list mysqld
mysqld 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
更改MySQL 登录用户密码
[root@web01 mysql]# mysqladmin -u root password ‘oldboy123‘
[root@web01 mysql]# mysql # 没密码不让登录了
ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: NO)
[root@web01 mysql]# mysql -uroot -poldboy123 #输入用户和密码进行登录
[root@web01 mysql]# mysqladmin -uroot -poldboy123 password 123456 #更改密码
[root@web01 mysql]# mysql -uroot -p123456
1033 mysql -uroot -poldboy123 1034 musqladmin -uroot -poldboy123 password 123456 1035 mysqladmin -uroot -poldboy123 password 123456 1036 mysql -uroot -p123456 1037 history [root@web01 mysql]# history 会留下密码 不安全[root@web01 mysql]# history -c[root@web01 mysql]# history -d 可以指定删除
FastCGI介绍
什么是CGI
CGI的全称为“通用网关接口”(Common Gateway Interface),为HTTP服务器与其他机器上的程序服务通信交流的一种工具,CGI程序须运行在网络服务器上。
传统CGI接口方式的主要缺点是性能较差,因为每次HTTP服务器遇到动态程序时都需要重新启动解析器来执行解析,之后结果才会被返回给HTTP服务器。这在处理高并发访问时几乎是不可用的,因此就诞生了FastCGI。另外,传统的CGI接口方式安全性也很差,故而现在已经很少被使用了。 6.3.2 什么是FastCGI
FastCGI是一个可伸缩地、高速地在HTTP服务器和动态脚本语言间通信的接口(在Linux下,FastCGI接口即为socket,这个socket可以是文件socket,也可以是IP socket),主要优点是把动态语言和HTTP服务器分离开来。多数流行的HTTP服务器都支持FastCGI,包括Apache、Nginx和Lighttpd等。
同时,FastCGI也被许多脚本语言所支持,例如当前比较流行的脚本语言PHP。FastCGI接口采用的是C/S架构,它可以将HTTP服务器和脚本解析服务器分开,同时还能在脚本解析服务器上启动一个或多个脚本来解析守护进程。当HTTP服务器遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求,或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。
FastCGI的重要特点如下:
·HTTP服务器和动态脚本语言间通信的接口或工具。
·可把动态语言解析和HTTP服务器分离开。
·Nginx、Apache、Lighttpd,以及多数动态语言都支持FastCGI。
·FastCGI接口方式采用C/S结构,分为客户端(HTTP服务器)和服务器端(动态语言解析服务器)。
·PHP动态语言服务器端可以启动多个FastCGI的守护进程(例如php-fpm(fcgi process mangement))。
·HTTP服务器通过(例如Nginx fastcgi_pass)FastCGI客户端和动态语言FastCGI服务器端通信(例如php-fpm)。
Nginx FastCGI的运行原理
Nginx不支持对外部动态程序的直接调用或者解析,
所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在Linux下是socket(进程),
为了调用CGI程序,还需要一个FastCGI的wrapper(可以理解为用于启动另一个程序的程序),
这个wrapper绑定在某个固定的socket上,如端口或文件socket。
当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接收到请求,
然后派生出一个新的线程,这个线程调用解释器或外部程序处理脚本来读取返回的数据;
接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;
最后,Nginx将返回的数据发送给客户端,这就是Nginx+FastCGI的整个运作过程。
详细的过程如图6-3所示。
PHP动态服务依赖大批量安装
首先检查Nginx 和 MySQL 是否启动
[root@web01 extra]# netstat -lntup|egrep "3306|80"
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2487/mysqld tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2790/nginx
[root@web01 extra]# netstat -lntup|egrep "nginx|mysql"
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2487/mysqld tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2790/nginx
[root@web01 extra]# cat /etc/redhat-release
CentOS release 6.8 (Final)
[root@web01 extra]# uname -r
2.6.32-642.6.2.el6.x86_64
[root@web01 extra]# uname -m
x86_64
检查安装PHP所需的lib库
PHP程序在开发及运行时会调用一些诸如zlib、gd等函数库,因此需要确认lib库是否已经安装,执行命令如下:
rpm -qa zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel libmcrypt-devel mhash mcrypt freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel
提示:libjpeg-turbo-devel是早期的libjpeg-devel的新名字,libcurl-devel是早期的curl-devel的新名字。
执行过程如下:
[root@www conf]# rpm -qa zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-develzlib-devel-1.2.3-29.el6.x86_64[root@www conf]# rpm -qa freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel
提示: ·每个lib一般都会存在对应的以“-devel”命名的包,安装lib对应的-devel包后,对应的lib包就会自动安装好,例如安装gd-devel时就会安装gd。
·这些lib库不是必须安装的,但是目前的企业环境下一般都需要安装。否则,PHP程序运行时会出现问题,例如验证码无法显示等。
执行下面命令安装相关的lib软件包:
yum install zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel -yyum install freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel libxslt-devel -y
需要说明的是,yum安装时采用libjpeg-devel这个名字也是可以的,但是安装完libjpeg-devel,查询包名就要用libjpeg-turbo-devel,同样,安装时,curl-devel对应查询包名为libcurl-devel。
安装后的结果如下: [root@www conf]# rpm -qa zlib-devel libxml2-devel libjpeg-turbo-devel libiconv-devel
libxml2-devel-2.7.6-20.el6.x86_64libjpeg-turbo-devel-1.2.1-3.el6_5.x86_64zlib-devel-1.2.3-29.el6.x86_64提示:仅缺少libiconv-devel包
[root@www tools]# rpm -qa freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel
freetype-devel-2.3.11-15.el6_6.1.x86_64gd-devel-2.0.35-11.el6.x86_64libpng-devel-1.2.49-1.el6_2.x86_64libcurl-devel-7.19.7-46.el6.x86_64libxslt-devel-1.1.26-2.el6_3.1.x86_64
从以上结果看出,仅有libiconv-devel这个包没有安装,因为默认的yum源没有此包,后面会编译安装。
当然,也可以一个一个地yum安装或通过源文件手工编译安装,这是七八年前我曾经用过的方法,后来发现太麻烦就想办法改成了现在的安装方式。毕竟效率第一嘛!
安装yum无法安装的libiconv库
由于这个安装非常简单,就不一一讲解了,按照下述命令复制执行即可。
mkdir -p /home/oldboy/toolscd /home/oldboy/toolswget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gztar zxf libiconv-1.14.tar.gzcd libiconv-1.14./configure --prefix=/usr/local/libiconvmakemake installcd ../
技巧:可以复制多行命令,一次输入执行。
libiconv相关信息地址为:http://www.gnu.org/software/libiconv/(获得软件包的途径为打开g.cn,输入download libiconv)。我曾经用过的上一个稳定版为libiconv-1.10.tar.gz。
安装libmcrypt库
这是一个使用动态加载的模块化的libmcrypt。libmcrypt对于在程序运行时添加/移除算法是有用的。 limbcrypt-nm目前不再被官方支持,其软件地址为http://mcrypt.hellug.gr/lib/,编译PHP的过程中,libmcrypt库不是必须要安装的包。
很多网友采用的是很复杂的编译安装libmcrypt的方法,本文带着大家选择更简单的yum安装方法。 在CentOS默认的yum源里没有libmcrypt-devel,因此需要事先配置epel第三方yum源,具体命令如下:
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
下面就可以安装PHP相关包libmcrypt对应的包libmcrypt-devel了,命令如下:
yum -y install libmcrypt-devel
建议读者使用这个更简单的yum方法,抛弃网上流行的编译安装方法!
安装mhash加密扩展库
mhash是基于离散数学原理不可逆向的PHP加密方式扩展库,其在默认情况下不会开启。
mhash可以用于创建校验数值、消息摘要、消息认证码,
以及无需原文的关键信息保存(如密码)等。它为PHP提供了多种散列算法,如MD5、SHA1、GOST等。
可以通过MHASH_hashname()查看其支持的算法有哪些。
不过,需要注意的是:
·该扩展不能提供最新的散列算法。
·该扩展结果原则上运算不可逆。
同理,我们选择更简单的yum安装方法来安装mhash。安装PHP需要的相关包mhash的命令如下:
yum -y install mhash
#<==需提前安装epel源,前文已经安装过epel源不再赘述。
建议读者使用这个更简单的yum方法,抛弃网上流行的编译安装方法!
安装mcrypt加密扩展库
PHP程序员在编写代码程序时,除了要保证代码的高性能之外,还有一点是非常重要的,
那就是程序的安全性保障。PHP除了自带的几种加密函数外,还有功能更全面的PHP加密扩展库mcrypt和mhash。
其中,mcrypt扩展库可以实现加密解密功能,就是既能将明文加密,也可以将密文还原。
可以说,mcrypt是PHP里面重要的加密支持扩展库,该库在默认情况下不开启。
mcrypt库支持20多种加密算法和8种加密模式,具体可以通过函数mcrypt_list_algorithms()和mcrypt_list_modes()来显示。
以往很多网友及老男孩选择的是编译安装mcrypt的方法。这里选择更简单的yum安装方法安装mcrypt。安装PHP需要的相关包mcrypt的命令如下:
yum -y install mcrypt #<==需提前安装epel源,前文已经安装过epel源不在累述。
建议读者使用这个更简单的yum安装方法,抛弃网上流行的编译安装方法!
检查刚才安装的三个安装包
[root@web01 tools]# rpm -qa libmcrypt-devel mhash mcryptmhash-0.9.9.9-3.el6.x86_64libmcrypt-devel-2.5.8-9.el6.x86_64mcrypt-2.6.8-10.el6.x86_64
开始安装PHP动态服务
[root@web01 tools]# wget http://mirrors.sohu.com/php/php-5.5.32.tar.gz
[root@web01 tools]# tar xf php-5.5.32.tar.gz
[root@web01 tools]# cd php-5.5.32
./configure --prefix=/application/php5.5.32 --with-mysql=/application/mysql/ --with-pdo-mysql=mysqlnd --with-iconv-dir=/usr/local/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-fpm --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-soap --enable-short-tags --enable-static --with-xsl --with-fpm-user=www --with-fpm-group=www --enable-ftp --enable-opcache=no
特别强调:上述每行结尾的换行符反斜线(\)之后不能再有任何字符包括空格,最后一行不需要斜线。
[root@web01 php-5.5.32]# echo $?
0 是0就对了
PHP FastCGI模式的设置说明:如果是PHP5.3及以上版本,所使用的编译参数为--enable-fpm,如果是PHP5.2版本,编译参数则为--enable-fastcgi--enable-fpm--enable-force-cgi。
对于上面的命令,部分参数说明如下。
·--prefix=/application/php5.3.27:表示指定PHP的安装路径为/application/php5.3.27。
·--with-mysql=/application/mysql:表示需要指定MySQL的安装路径,安装PHP需要的MySQL相关内容。当然,如果没有MySQL软件包,也可以不单独安装,这样的情况可使用--with-mysql=mysqlnd替代--with-mysql=/application/mysql,因为PHP软件里已经自带了连接MySQL的客户端工具。
·--with-fpm-user=nginx:nginx表示指定PHP-FPM进程管理的用户为Nginx,此处最好和Nginx服务用户统一。
·--with-fpm-group=nginx:表示指定PHP-FPM进程管理的组为Nginx,此处最好与Nginx服务用户组统一。
·--enable-fpm:表示激活PHP-FPM方式服务,即以FastCGIF方式运行PHP服务。
另外,针对此命令还有如下一些说明:
·可以执行./configure–help命令来详细查看以上各参数的用途。
·以上配置中的""反斜线表示换一行输入。
其他需要MySQL相关包场景的PHP对应编译参数如下:
--enable-mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-mysqli=mysqlnd \
在PHP的安装过程中,经常会因为各种原因出现非常多的错误,下面针对configure过程的错误进行分析。
报错示例:configure:error:xslt-config not found.Please reinstall the libxslt>=1.1.0 distributio。
原因是前面要求安装的lib库没装上,解决办法如下:
[root@www php-5.3.32]# yum install libxslt-devel -y #<==前文已经提前安装了。
编译PHP
正确执行前文配置PHP软件的./configure系列命令后,就可以编译PHP软件了,具体操作过程如下:
[root@web01 php-5.5.32]# ln -s /application/mysql/lib/libmysqlclient.so.18 /usr/lib64/
[root@web01 php-5.5.32]# touch ext/phar/phar.phar #<==有网友用mkdir是不对的。
[root@web01 php-5.5.32]# make
#make最后的正确提示Build complete.Don‘t forget to run ‘make test‘.
[root@web01 php-5.5.32]# make install
[root@web01 php-5.5.32]# ln -s /application/php5.5.32/ /application/php
[root@web01 php-5.5.32]# ls /application/php
bin etc include lib php sbin var # 成功的标志
[root@web01 php-5.5.32]# ls php.ini-* -l
-rw-r--r-- 1 1001 1001 69236 2月 2 2016 php.ini-development-rw-r--r-- 1 1001 1001 69266 2月 2 2016 php.ini-production
[root@web01 php-5.5.32]# cp php.ini-production /application/php/lib/php/php.ini
[root@web01 php-5.5.32]# cd /application/php/etc/
[root@web01 etc]# ll 总用量 28 -rw-r--r-- 1 root root 1321 2月 14 20:02 pear.conf -rw-r--r-- 1 root root 22602 2月 14 20:01 php-fpm.conf.default
配置PHP解释文件
[root@web01 etc]# cp php-fpm.conf.default php-fpm.conf
[root@web01 etc]# ls
pear.conf php-fpm.conf php-fpm.conf.default
[root@web01 etc]# /application/php/sbin/php-fpm
[root@web01 etc]# lsof -i :9000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEphp-fpm 16818 root 7u IPv4 140830 0t0 TCP localhost:cslistener (LISTEN)php-fpm 16819 www 0u IPv4 140830 0t0 TCP localhost:cslistener (LISTEN)php-fpm 16820 www 0u IPv4 140830 0t0 TCP localhost:cslistener (LISTEN)
[root@web01 etc]# ps -ef|grep php-fpm
root 16818 1 0 20:16 ? 00:00:00 php-fpm: master process (/application/php5.5.32/etc/php-fpm.conf)www 16819 16818 0 20:16 ? 00:00:00 php-fpm: pool www www 16820 16818 0 20:16 ? 00:00:00 php-fpm: pool www root 16823 1290 0 20:16 pts/0 00:00:00 grep php-fpm
至此PHP配置完成。
整合Nginx+PHP
[root@web01 ~]# netstat -lntup |grep php
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 16818/php-fpm
[root@web01 etc]# cd /application/nginx/conf/extra/
[root@web01 extra]# cp blog.conf blog.conf.oldboy.20160517
[root@web01 extra]# vim blog.conf
添加一下内容
location ~.*\.(php|php5)?$ { root html/blog; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; }
server { listen 80; server_name blog.etiantian.org; location / { root html/blog; index index.html index.htm; } location ~.*\.(php|php5)?$ { root html/blog; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } }
[root@web01 extra]# ../../sbin/nginx -t
[root@web01 extra]# ../../sbin/nginx -s reload
测试
[root@web01 extra]# cd ../../html/blog/
[root@web01 blog]# echo "<?php phpinfo(); ?>" >test_info.php
MAC客户端浏览器
首先要配置解析
cat /etc/hosts
10.0.0.8 www.etiantian.org bbs.etiantian.org blog.etiantian.org
浏览器输入
http://blog.etiantian.org/test_info.php
打开页面是PHP版本号就对了,如果出现了下载之类的,就说明没解析,直接下载了。
测试连接MySQL数据库是否可行
[root@web01 blog]# pwd
/application/nginx/html/blog
[root@web01 blog]# mysqladmin -uroot -p123456 password oldboy123
[root@web01 blog]# cat test_mysql.php
<?php $link_id=mysql_connect (‘localhost‘,‘root‘,‘oldboy123‘) or mysql_error () ; if ($link_id) { echo "mysql successful by oldboy !"; }else{ echo mysql_error () ; }?>
[root@web01 blog]# ../../sbin/nginx -s reload
MAC 客户端浏览器输入
http://blog.etiantian.org/test_mysql.php
出现mysql successful by oldboy ! 说明OK了
0.3 LNMP环境应用实践