0.3 LNMP环境应用实践

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0.3 LNMP环境应用实践相关的知识,希望对你有一定的参考价值。

LNMP应用环境

LNMP介绍

大约在2010年以前,互联网公司最常用的经典Web服务环境组合就是LAMP

(即Linux、Apache、mysqlphp),近几年随着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

[[email protected] ~]# cd /home/oldboy/tools/

[[email protected] tools]# wget https://downloads.mysql.com/archives/get/file/mysql-5.5.49-linux2.6-x86_64.tar.gz

[[email protected] tools]# useradd -s /sbin/nologin mysql -M

[[email protected] tools]# id mysql

[[email protected] tools]# tar xf mysql-5.5.49-linux2.6-x86_64.tar.gz

[[email protected] tools]# mv mysql-5.5.49-linux2.6-x86_64 /application/mysql-5.5.49

[[email protected] tools]# ln -s /application/mysql-5.5.49/ /application/mysql

[[email protected] tools]# ls /application/mysql

[[email protected] tools]# cd /application/mysql

[[email protected] mysql]# chown -R mysql.mysql /application/mysql

[[email protected] 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 ...
OK
Filling help tables...
170214 13:54:23 [Note] /application/mysql//bin/mysqld (mysqld 5.5.49) starting as process 1482 ...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE 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_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly 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.pl
cd /application/mysql//mysql-test ; perl mysql-test-run.pl

Please report any problems at http://bugs.mysql.com/

看到两个OK 就对了

[[email protected] mysql]# ll data/ # 会生成mysql和performance_schema内部管理的库

总用量 12
drwx------ 2 mysql root  4096 2月  14 13:54 mysql
drwx------ 2 mysql mysql 4096 2月  14 13:54 performance_schema
drwxr-xr-x 2 mysql root  4096 2月  14 13:44 test

[[email protected] 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

[[email protected] 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

[[email protected] mysql]# cd bin/

[[email protected] bin]# sed ‘s#/usr/local/#/application/#g‘ mysqld_safe |grep appl

因为我们之前安装路径修改成/applicaion了所以这里需要替换与一下这个文件里的默认路径修改成我们后来自定义的文件

[[email protected] bin]# ll /application/mysql/

[[email protected] bin]# sed -i ‘s#/usr/local/#/application/#g‘ mysqld_safe

启动mysql

[[email protected] bin]# cd ../

给配置文件

[[email protected] mysql]# cp support-files/my-medium.cnf /etc/my.cnf cp:是否覆盖"/etc/my.cnf"? y

[[email protected] bin]# /application/mysql/bin/mysqld_safe --user=mysql &

[[email protected] mysql]# lsof -i :3306

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  2136 mysql   11u  IPv4  19235      0t0  TCP *:mysql (LISTEN)

[[email protected] mysql]# /application/mysql/bin/mysql # 可以登录进去的话表示成功了

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server 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 its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.

mysql> quit  #  quit是退出

[[email protected] mysql]# PATH="/application/mysql/bin:$PATH"

[[email protected] mysql]# which mysql

/application/mysql/bin/mysql

[[email protected] mysql]# vim /etc/profile

PATH="/application/mysql/bin:$PATH"

永久生效

[[email protected] mysql]# . /etc/profile # 加载一下

[[email protected] mysql]# echo $PATH

/application/mysql/bin:/application/mysql/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

[[email protected] mysql]# mysql # 此时输入mysql就直接进来了

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server 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 its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.

mysql>

再次修改一个文件

每次启动这样太麻烦 /application/mysql/bin/mysqld_safe --user=mysql & 让他简单

只需要整一下启动脚本

[[email protected] mysql]# sed -i ‘s#/usr/local/#/application/#g‘ support-files/mysql.server

[[email protected] mysql]# cp support-files/mysql.server /etc/init.d/mysqld

[[email protected] mysql]# chmod +x /etc/init.d/mysqld

[[email protected] 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

[[email protected] mysql]# lsof -i :3306

[[email protected] mysql]# /etc/init.d/mysqld start #启动MySQL

Starting MySQL.. SUCCESS!

[[email protected] mysql]# lsof -i :3306

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  2487 mysql   11u  IPv4  19826      0t0  TCP *:mysql (LISTEN)

[[email protected] mysql]# mysql

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server 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 its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.

mysql>

[[email protected] mysql]# chkconfig --add mysqld

[[email protected] mysql]# chkconfig --list mysqld

mysqld         	0:关闭	1:关闭	2:启用	3:启用	4:启用	5:启用	6:关闭

更改MySQL 登录用户密码

[[email protected] mysql]# mysqladmin -u root password ‘oldboy123‘

[[email protected] mysql]# mysql # 没密码不让登录了

ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: NO)

[[email protected] mysql]# mysql -uroot -poldboy123 #输入用户和密码进行登录

[[email protected] mysql]# mysqladmin -uroot -poldboy123 password 123456 #更改密码

[[email protected] 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 
[[email protected] mysql]# history 

会留下密码 不安全

[[email protected] mysql]# history -c

[[email protected] 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 是否启动

[[email protected] 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

[[email protected] 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

[[email protected] extra]# cat /etc/redhat-release

CentOS release 6.8 (Final)

[[email protected] extra]# uname -r

2.6.32-642.6.2.el6.x86_64

[[email protected] 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的新名字。

执行过程如下:

[[email protected] conf]# rpm -qa zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel
zlib-devel-1.2.3-29.el6.x86_64
[[email protected] 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 -y

yum 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。

安装后的结果如下: [[email protected] conf]# rpm -qa zlib-devel libxml2-devel libjpeg-turbo-devel libiconv-devel

libxml2-devel-2.7.6-20.el6.x86_64
libjpeg-turbo-devel-1.2.1-3.el6_5.x86_64
zlib-devel-1.2.3-29.el6.x86_64提示:仅缺少libiconv-devel包

[[email protected] tools]# rpm -qa freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel

freetype-devel-2.3.11-15.el6_6.1.x86_64
gd-devel-2.0.35-11.el6.x86_64
libpng-devel-1.2.49-1.el6_2.x86_64
libcurl-devel-7.19.7-46.el6.x86_64
libxslt-devel-1.1.26-2.el6_3.1.x86_64

从以上结果看出,仅有libiconv-devel这个包没有安装,因为默认的yum源没有此包,后面会编译安装。

当然,也可以一个一个地yum安装或通过源文件手工编译安装,这是七八年前我曾经用过的方法,后来发现太麻烦就想办法改成了现在的安装方式。毕竟效率第一嘛!

安装yum无法安装的libiconv库

由于这个安装非常简单,就不一一讲解了,按照下述命令复制执行即可。

mkdir -p /home/oldboy/tools
cd /home/oldboy/tools
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
tar zxf libiconv-1.14.tar.gz
cd libiconv-1.14
./configure --prefix=/usr/local/libiconv
make
make install
cd ../

技巧:可以复制多行命令,一次输入执行。

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安装方法,抛弃网上流行的编译安装方法!

检查刚才安装的三个安装包

[[email protected] tools]# rpm -qa libmcrypt-devel mhash mcrypt
mhash-0.9.9.9-3.el6.x86_64
libmcrypt-devel-2.5.8-9.el6.x86_64
mcrypt-2.6.8-10.el6.x86_64

开始安装PHP动态服务

[[email protected] tools]# wget http://mirrors.sohu.com/php/php-5.5.32.tar.gz

[[email protected] tools]# tar xf php-5.5.32.tar.gz

[[email protected] 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

特别强调:上述每行结尾的换行符反斜线(\)之后不能再有任何字符包括空格,最后一行不需要斜线。

[[email protected] 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库没装上,解决办法如下:

[[email protected] php-5.3.32]# yum install libxslt-devel -y #<==前文已经提前安装了。

编译PHP

正确执行前文配置PHP软件的./configure系列命令后,就可以编译PHP软件了,具体操作过程如下:

[[email protected] php-5.5.32]# ln -s /application/mysql/lib/libmysqlclient.so.18 /usr/lib64/

[[email protected] php-5.5.32]# touch ext/phar/phar.phar #<==有网友用mkdir是不对的。

[[email protected] php-5.5.32]# make

#make最后的正确提示
Build complete.
Don‘t forget to run ‘make test‘.

[[email protected] php-5.5.32]# make install

[[email protected] php-5.5.32]# ln -s /application/php5.5.32/ /application/php

[[email protected] php-5.5.32]# ls /application/php

bin  etc  include  lib  php  sbin  var      # 成功的标志

[[email protected] 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

[[email protected] php-5.5.32]# cp php.ini-production /application/php/lib/php/php.ini

[[email protected] php-5.5.32]# cd /application/php/etc/

[[email protected] 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解释文件

[[email protected] etc]# cp php-fpm.conf.default php-fpm.conf

[[email protected] etc]# ls

pear.conf  php-fpm.conf  php-fpm.conf.default

[[email protected] etc]# /application/php/sbin/php-fpm

[[email protected] etc]# lsof -i :9000

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
php-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)

[[email protected] 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

[[email protected] ~]# netstat -lntup |grep php

tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      16818/php-fpm

[[email protected] etc]# cd /application/nginx/conf/extra/

[[email protected] extra]# cp blog.conf blog.conf.oldboy.20160517

[[email protected] 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;
    }
    }

[[email protected] extra]# ../../sbin/nginx -t

[[email protected] extra]# ../../sbin/nginx -s reload

测试

[[email protected] extra]# cd ../../html/blog/

[[email protected] 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数据库是否可行

[[email protected] blog]# pwd

/application/nginx/html/blog

[[email protected] blog]# mysqladmin -uroot -p123456 password oldboy123

[[email protected] 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 () ;
        }
?>

[[email protected] blog]# ../../sbin/nginx -s reload

MAC 客户端浏览器输入

http://blog.etiantian.org/test_mysql.php

出现mysql successful by oldboy ! 说明OK了

以上是关于0.3 LNMP环境应用实践的主要内容,如果未能解决你的问题,请参考以下文章

zabbix监控系统的搭建

B1049 数列的片段和

PAT-乙级-1049 数列的片段和

1049. 数列的片段和(20)

1049 数列的片段和 (20 分)

PAT 1049. 数列的片段和