CentOS 6 搭建 LNMP

1. LNMP 组合工作流程

        当 LNMP 组合工作时,首先是用户通过浏览器输入域名请求 Nginx Web 服务,如果请求的是静态资源,则由 Nginx 解析返回给用户;如果是动态请求(.php 结尾),那么 Nginx 就会把它通过 FastCGI 接口(生产常用方法)发送给 PHP 引擎服务(FastCGI 进程 php-fpm)进行解析,如果这个动态请求要读取数据库数据,那么 PHP 就会继续向后请求 MySQL 数据库,以读取需要的数据,并最终通过 Nginx 服务把获取的数据返回给用户,这就是 LNMP 环境的基本请求数据流程,这个请求流程就是企业使用 LNMP 环境的常用流程。

2. LNMP 之 MySQL 数据库

2.1 MySQL 数据库介绍

        MySQL 是一种关系型数据库管理软件,关系型数据库的特点是将数据保存在不同的二维表中,并且将这些表放入不同的数据库中,而不是把所有的数据统一放在一个大仓库里。这样的设计增加了 MySQL 的读取速度,灵活性和可管理性也得到了很大提高。访问及管理 MySQL 数据库的最常用标准化语言为 SQL 结构化查询语言。

2.2 MySQL 数据库的优势和特点 

.       目前,绝大多数使用 Linux 操作系统的互联网企业,从大型的 BAT 门户,到电商门户平台、分类门户平台等无一例外都使用 MySQL 作为后端的数据库。

 性能卓越、服务稳定、很少出现异常宕机;

 开放源代码且无版权制约,自主性强、使用成本低;

 历史悠久,社区及用户非常活跃,遇到问题可以很快获取到帮助;

 软件体积小,安装使用简单,易于维护,安装及维护成本低;

 支持多种操作系统,提供多种 API 接口,支持多种开发语言,特别是对流行的 PHP 语言无缝支持;

 品牌口碑效应,使得企业无需考虑就直接用之。

2.3 安装及初始化 MySQL 数据库

2.3.1 创建 mysql 用户的账号

[root@lnmp02 ~]# id mysql

id: mysql: No such user

[root@lnmp02 ~]# useradd -s /sbin/nologin -M mysql   # 创建 mysql 用户的账号。

[root@lnmp02 ~]# id mysql  #  确认 mysql 用户账号存在。   

uid=502(mysql) gid=502(mysql) groups=502(mysql)

2.3.2 获取 MySQL 二进制软件包:

[root@lnmp02 ~]# cd  /home/oldboy/tools/   # 切换到普通用户家目录上传。

[root@lnmp02 tools]# rz -y  #  上传二进制包。   

[root@lnmp02 tools]# ll   #  查看包名。

total 183140

-rw-r--r-- 1 root root 186722932 Dec 22  2017 mysql-5.5.32-linux2.6-x86_64.tar.gz

2.3.3 采用二进制方式安装 MySQL

[root@lnmp02 tools]# tar xf mysql-5.5.32-linux2.6-x86_64.tar.gz     #  解包。

[root@lnmp02 tools]# ll   #  查看。

drwxr-xr-x 13 root root      4096 Dec 22 02:03 mysql-5.5.32-linux2.6-x86_64

-rw-r--r--  1 root root 186722932 Dec 22  2017 mysql-5.5.32-linux2.6-x86_64.tar.gz

drwxr-xr-x  9 1001 1001      4096 Dec 18 22:35 nginx-1.6.3

-rw-r--r--  1 root root    805253 Apr  8  2015 nginx-1.6.3.tar.gz

[root@lnmp02 tools]# mv mysql-5.5.32-linux2.6-x86_64 /application/mysql-5.5.32 

#  移动并安装到规范的安装路径并改名。    

[root@lnmp02 tools]# ln -s /application/mysql-5.5.32/ /application/mysql   #  创建 mysql 软链接。

[root@lnmp02 tools]# ls -l /application/    #  查看结果。

lrwxrwxrwx  1 root root   26 Dec 22 02:19  mysql -> /application/mysql-5.5.32/    # mysql 软链接。

drwxr-xr-x 13 root root 4096 Dec 22 02:03 mysql-5.5.32   #    mysql 安装路径。

lrwxrwxrwx  1 root root   25 Dec 18 22:44 nginx -> /application/nginx-1.6.3/

drwxr-xr-x 11 root root 4096 Dec 18 22:59 nginx-1.6.3   #  和 Nginx 同一服务器。

提示:二进制安装包,仅解压就可以了,不需执行 cmake/configure/make/make install 等过程。目前到此步相当于编译安装 make install 之后。

2.3.4 初始化 MySQL 数据库文件

[root@lnmp02 mysql]# ls -ld /application/mysql/data/  #  mysql 数据文件目录。  

drwxr-xr-x 5 mysql root 4096 Dec 22 02:51 /application/mysql/data/

[root@lnmp02 ~]# id mysql  #  确认 mysql 用户账号存在。   

uid=502(mysql) gid=502(mysql) groups=502(mysql)

[root@lnmp02 mysql]# chown -R mysql.mysql /application/mysql 

 # 授权 mysql 用户管理数据库文件。  

[root@lnmp02 mysql]# /application/mysql/scripts/mysql_install_db

--basedir=/application/mysql/   --datadir=/application/mysql/data/    --user=mysql  

 #  初始化数据库文件。(指定安装目录、存放数据路径、管理的用户)。

Installing MySQL system tables...

OK    #  两个 OK 表示初始化成功。

Filling help tables...

OK    #  两个 OK 表示初始化成功。

2.3.5 初始化 MySQL 配置文件 my.cnf :

[root@lnmp02 mysql]# ls -l support-files/*.cnf  #  查看各种样例的配置文件。  

-rw-r--r-- 1 7161 wheel  4691 Jun 19  2013 support-files/my-huge.cnf

-rw-r--r-- 1 7161 wheel 19759 Jun 19  2013 support-files/my-innodb-heavy-4G.cnf

-rw-r--r-- 1 7161 wheel  4665 Jun 19  2013 support-files/my-large.cnf

-rw-r--r-- 1 7161 wheel  4676 Jun 19  2013 support-files/my-medium.cnf

-rw-r--r-- 1 7161 wheel  2840 Jun 19  2013 support-files/my-small.cnf

[root@lnmp02 mysql]# /bin/cp support-files/my-small.cnf /etc/my.cnf  #  初始化配置文件 my.cnf 。   

提示:support-files 下有 my.cnf 的各种配置样例。测试安装环境所以选择参数配置小的 my-small.cnf 配制模板,如果是生产环境可以根据硬件选择更高级的配置文件。/etc/my.cnf 是默认配置文件。

2.3.6 配置并启动 MySQL 数据库

(1)设置 MySQL 启动脚本,命令如下:

[root@lnmp02 mysql]# cp support-files/mysql.server  /etc/init.d/mysqld  

 #  拷贝启动脚本到 MySQL 的命令路径。

[root@lnmp02 mysql]# chmod +x /etc/init.d/mysqld  #  给脚本增加执行权限。  

(2)提示:MySQL 二进制默认安装路径是 /usr/local/mysql ,启动脚本里是 /usr/local/mysql 的路径都需要替换,命令如下:

[root@lnmp02 mysql]# sed -i 's#/usr/local/mysql#/application/mysql#g' /application/mysql/bin/mysqld_safe    /etc/init.d/mysqld

(3)启动 MySQL 数据库:

[root@lnmp02 mysql]# /etc/init.d/mysqld start   #  规范的启动方法之一。  

Starting MySQL.. SUCCESS!

[root@lnmp02 mysql]# lsof -i :3306   #  查看端口对应服务是否启动。  

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

mysqld  2832 mysql   10u  IPv4  20553      0t0  TCP *:mysql (LISTEN)

[root@lnmp02 mysql]# netstat -lutup|grep mysql   #  查看MySQL 数据库是否启动。  

tcp        0      0 *:mysql           *:*            LISTEN      3164/mysqld  

提示:还可以使用  /application/mysql/bin/mysqld_safe  --user=mysql &   #  启动(& 表示后台执行)。

2.3.7 设置 MySQL 开机自启动

[root@lnmp02 mysql]# chkconfig mysqld on

[root@lnmp02 mysql]# chkconfig --list mysqld   

mysqld          0:off   1:off   2:on    3:on    4:on    5:on    6:off

提示:也可以把启动命令放入 /etc/rc.local 里让它开机自启动。

2.3.8 配置 mysql 命令的全局使用路径

[root@lnmp02 mysql]# echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile

[root@lnmp02 mysql]# tail -1 /etc/profile

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

[root@lnmp02 mysql]# source /etc/profile

[root@lnmp02 mysql]# echo $PATH

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

提示:定义 mysql 全局路径,实现在任意路径执行 mysql 命令。如果不配置 mysql 的全剧路径,则无法直接敲 mysql 等命令管理数据库,而只能采用 /application/mysql/bin/mysql 这样的带着路径的方式敲命令。还有另外一种办法,就是把  /application/mysql/bin 下面的命令拷贝到已经是全局系统命令路径的 /usr/local/sbin 下。

[root@lnmp02 mysql]# mysql   #  直接敲 mysql 命令就以 root 身份进入数据库了 。   

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 1

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

mysql> show databases;   #  查看当前所有的数据库。      

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| test               |

+--------------------+

4 rows in set (0.04 sec)

mysql> select user();   #  查看当前的登录用户。

+----------------+

| user()         |

+----------------+

| root@localhost |

+----------------+

1 row in set (0.05 sec)

mysql> quit      #  标黄部分表示数据库提示符,可以从此处输入命令管理数据库。

Bye

2.4 MySQL 安全配置

2.4.1 为 NySQL 的 root 用户设置及更改密码

[root@lnmp02 ~]# mysql    #  直接通过 mysql 命令登录(无密码)。

[root@lnmp02 ~]# mysqladmin -u root password "123456"   #  为 root 用户设置密码。

[root@lnmp02 ~]# mysql   #  直接通过 mysql 命令无法登录了(因为有了密码)。

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

[root@lnmp02 ~]# mysql -uroot -p123456    #  指定密码可以登录。

[root@lnmp02 ~]# mysql -uroot -p   #  或者指定 root 用户,提示输入密码登录。

Enter password:    #  没有输出的输入密码(防止别人看到)

[root@lnmp02 ~]# mysqladmin -uroot -p123456 password "111111"   #  修改密码。

[root@lnmp02 ~]# mysqladmin -uroot -p111111 password "123456"   #  修改密码【改回123456】。

2.4.2 删除无用数据库

[root@lnmp02 ~]# mysql -uroot -p  #  以 root 身份登录。  

Enter password:

mysql> show databases;    #  查看所有的库。           

+---------------------------+

| Database                  |  

+---------------------------+

| information_schema |      #  系统默认自动维护的库。

| mysql                        |      #  需要用户管理的库。

| performance_schema |    #  系统默认自动维护的库。

| test                           |       #  临时,需要删除。

+---------------------------+

4 rows in set (0.00 sec)

mysql> drop database test;      #  删除 test 库。

Query OK, 0 rows affected (0.06 sec)

mysql> show databases;          #  查看所有的库,test 库已删。   

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

+--------------------+

3 rows in set (0.00 sec)

2.4.3 清理无用的 MySQL 用户

mysql> select user,host from mysql.user;  #  查出 mysql 库里的所有用户。  

+------+-------------+

| user | host         |

+------+-------------+

| root  | 127.0.0.1 |

| root  | ::1            |

|         | lnmp02     |

| root  | lnmp02     |

|         | localhost   |

|root | localhost  |

+------+--------------+

6 rows in set (0.00 sec)

提示:上面的每一行代表一个用户,在 MySQL 里每一行的用户和主机唯一标识一个用户。

保留上面标黄的两个用户,把其它的全部删除:

mysql> drop user ''@'lnmp02';

Query OK, 0 rows affected (0.04 sec)

mysql> drop user ''@'localhost';

Query OK, 0 rows affected (0.00 sec)

mysql> drop user 'root'@'lnmp02';  

Query OK, 0 rows affected (0.00 sec)

mysql> drop user 'root'@'::1';   

Query OK, 0 rows affected (0.00 sec)

mysql> select user,host from mysql.user;  #  再查看 mysql 库里的所有用户。  

+------+-----------+

| user | host      |

+------+-----------+

| root | 127.0.0.1 |

| root | localhost |

+------+-----------+

2 rows in set (0.00 sec)

mysql> flush privileges;     # 刷新、使权限生效。

Query OK, 0 rows affected (0.00 sec)

2.5 MySQL 简单命令总结

查命令帮助:help 例:help drop user;  

查看所有的库: show databases;      

切库:use mysql;   

查表:show tables;

查看用户列表:select user,host from mysql.user;

查看当前用户:select user();  

查看当前所在库:select database();  

删除数据库:drop database 库名;

删除用户:    drop user ‘用户’@‘主机’

2.6 查看错误日志

[root@lnmp02 ~]# ll /application/mysql/data/lnmp02.err

-rw-r----- 1 mysql root 3453 Dec 22 04:14 /application/mysql/data/lnmp02.err

[root@lnmp02 ~]# cat /application/mysql/data/lnmp02.err

3. LNMP 之 PHP 

3.1 FastCGI 概述

3.1.1 什么是 CGI

       CGI 的全称为 "通用网关接口"(Common Gateway Interface),为 HTTP 服务器与其他机器上的程序服务通信交流的一种工具,CGI 程序必须运行在网络服务器上。

       传统 CGI 接口方式的主要缺点是性能较差,因为每次 HTTP 服务器遇到动态程序时都需要重新启动解释器来执行解析,之后结果才会被返回给 HTTP 服务器。这在处理高并发访问时几乎是不可用的,因此就诞生了 FastCGI 。另外,传统的 CGI 接口方式安全性也很差,故而现在已经很少被使用了。

3.1.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 服务器专一地处理静态请求,或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

3.1.3 FastCGI 的重要特点:

FastCGI 是 HTTP 服务器和动态脚本语言间通信的接口或工具;

 FastCGI 优点是可以把动态语言解析和 HTTP 服务器分离开;

 Nginx、Apache、Lighttpd 以及多数动态语言都支持 FastCGI 。

 FastCGI 接口方式采用 C/S 结构,分为客户端(HTTP 服务器)和服务器端(动态语言解析服务器);

 PHP 动态语言服务器端可以启动多个 FastCGI 守护进程。

 HTTP 服务器通过 FastCGI 客户端(例如:Nginx fastcgi_pass)和动态语言 FastCGI 服务器端(php-fpm)通信。

3.1.4 Nginx+FastCGI 的运行原理

        Nginx 不支持对外部动态程序的直接调用或者解析,所有的外部程序(包括 PHP)必须通过 FastCGI 接口来调用。FastCGI 接口在 Linux 下是 socket(这个 socket 可以是文件 socket 也可以是 IP socket)。为了调用 CGI 程序,还需要一个 FastCGI 的 wrapper(可理解为用于启动另一个程序的程序),这个 wrapper 绑定在某个固定的 socket 上,如端口或者文件 socket 。当 Nginx 将 CGI 请求发送给这个 socket 的时候,通过 FastCGI 接口,wrapper 接收到请求,然后派生出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据。接着,wrapper 再将返回的数据通过 FastCGI 接口,沿着固定的 socket 传递给 Nginx ,最后,Nginx 将返回的数据发送给客户端。这就是Nginx+FastCGI 的整个运行过程。

原理图如下

 

提示:FastCGI 的主要优点是把动态语言和 HTTP 服务器分离开来,使 Nginx 专门处理静态请求及向后转发的动态请求,而 PHP/PHP-FPM 服务器则专门解析 PHP 动态请求。      

3.2 安装及配置 PHP 程序

3.2.1 检查 Nginx 和 MySQL 

[root@lnmp02 ~]# ls -ld /application/mysql/

drwxr-xr-x 13 root root 4096 Dec 22 02:03 /application/mysql/

[root@lnmp02 ~]# ls -ld /application/nginx/

drwxr-xr-x 11 root root 4096 Dec 18 22:59 /application/nginx/

[root@lnmp02 ~]# netstat -lntup|grep -E "80|3306"

tcp        0      0 0.0.0.0:3306        0.0.0.0:*        LISTEN      1767/mysqld 

tcp        0      0 0.0.0.0:80           0.0.0.0:*         LISTEN      2946/nginx 

3.2.2 准备工作:安装 PHP 前需要的准备环境:

检查安装 PHP 所需的 lib 库:

[root@lnmp02 ~]# rpm -qa zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel

zlib-devel-1.2.3-29.el6.x86_64

[root@lnmp02 ~]# rpm -qa freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel

提示:这些 lib 库不是必须安装的,但是目前的企业环境下一般都需要安装。否则 PHP 程序运行时会出现问题,例如验证码无法显示等。

安装相关的 lib 软件包:

[root@lnmp02 ~]# yum install zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel -y

[root@lnmp02 ~]# yum install freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel -y

安装后的结果如下:

[root@lnmp02 ~]# rpm -qa zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel  

libjpeg-turbo-devel-1.2.1-3.el6_5.x86_64

zlib-devel-1.2.3-29.el6.x86_64

libxml2-devel-2.7.6-21.el6_8.1.x86_64

提示:缺少了  libiconv-devel  包【默认的 yum 源没有此包】

[root@lnmp02 ~]# rpm -qa freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel

libpng-devel-1.2.49-2.el6_7.x86_64

freetype-devel-2.3.11-17.el6.x86_64

gd-devel-2.0.35-11.el6.x86_64

libcurl-devel-7.19.7-53.el6_9.x86_64

libxslt-devel-1.1.26-2.el6_3.1.x86_64

提示:通过编辑 /etc/yum.conf,把 keepcache 改为等于 1 ,可以把每次yum安装包保存下来,不改此处默认安装后将会删除包。

[root@lnmp02 ~]# cat /etc/yum.conf

[main]   

cachedir=/var/cache/yum/$basearch/$releasever    #  修改为 1 后默认存放 yum 包的路径。

keepcache=0   #  此处默认是 0 (安装后删除)

安装 yum 无法安装的 libiconv 库:

mkdir -p /home/oldboy/tools

cd  /home/oldboy/tools

wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz

echo $?

tar zxf libiconv-1.14.tar.gz

cd libiconv-1.14

./configure --prefix=/usr/local/libiconv

make

make install

cd ../

安装 libmcrypt 库:

[root@lnmp02 tools]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo   #  配置第三方 epel 源。

安装对应的 libmcrypt-devel 包并查看:

[root@lnmp02 tools]# yum install libmcrypt-devel -y

[root@lnmp02 tools]# rpm -qa libmcrypt-devel

libmcrypt-devel-2.5.8-9.el6.x86_64

安装 mhash 加密扩展库:

[root@lnmp02 tools]# yum install mhash mhash-devel -y   #  需要提前安装 epel 第三方 yum 源。

[root@lnmp02 tools]# rpm -qa mhash mhash-devel      #  查看结果如下。

mhash-devel-0.9.9.9-3.el6.x86_64

mhash-0.9.9.9-3.el6.x86_64

安装 mcrypt 加密扩展库:           

[root@lnmp02 tools]# yum install mcrypt -y     #  需要提前安装 epel 第三方 yum 源。

[root@lnmp02 tools]# rpm -qa mcrypt      #  查看结果如下。

mcrypt-2.6.8-10.el6.x86_64

3.2.3 开始安装 PHP 服务【php-5.3.27】

[root@lnmp02 ~]# cd /home/oldboy/tools

[root@lnmp02 tools]# rz -y

[root@lnmp02 tools]# ll

total 202672

-rw-r--r--  1 root root  15008639 Dec 25  2017 php-5.3.27.tar.gz

[root@lnmp02 tools]# tar xf php-5.3.27.tar.gz

编译安装 PHP 软件:

[root@lnmp02 php-5.3.27]#./configure \

--prefix=/application/php5.3.27 \

--with-mysql=/application/mysql \

--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-safe-mode \

--enable-bcmath \

--enable-shmop \

--enable-sysvsem \

--enable-inline-optimization \

--with-curl \

--with-curlwrappers \

--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-zip \

--enable-soap \

--enable-short-tags \

--enable-zend-multibyte \

--enable-static \

--with-xsl \

--with-fpm-user=nginx \

--with-fpm-group=nginx \

--enable-ftp

提示:出现 :Thank you for using PHP. 表示配置成功,正确输出。

[root@lnmp02 php-5.3.27]# ln -s /application/mysql/lib/libmysqlclient.so.18 /usr/lib64/

[root@lnmp02 php-5.3.27]# touch ext/phar/phar.phar

[root@lnmp02 php-5.3.27]# make

提示: 以下内容是正确的提示:

Build complete.

Don't forget to run 'make test'.

安装 PHP 生成文件到系统:

[root@lnmp02 php-5.3.27]# make install      #  下面是正确的提示[ 表示安装成功 ] 。

/home/oldboy/tools/php-5.3.27/build/shtool install -c ext/phar/phar.phar /application/php5.3.27/bin

ln -s -f /application/php5.3.27/bin/phar.phar /application/php5.3.27/bin/phar

Installing PDO headers:          /application/php5.3.27/include/php/ext/pdo/

3.2.4 配置 PHP 引擎解析配置文件 php.ini 

① 设置软链接方便访问:

[root@lnmp02 php-5.3.27]# ln -s /application/php5.3.27/ /application/php

[root@lnmp02 php-5.3.27]# ls -l /application/php

lrwxrwxrwx 1 root root 23 Dec 23 16:45 /application/php -> /application/php5.3.27/

② 查看 PHP 配置默认模板文件:

[root@lnmp02 php-5.3.27]# pwd

/home/oldboy/tools/php-5.3.27

[root@lnmp02 php-5.3.27]# ls -l php.ini*

-rw-r--r-- 1 101 101 69606 Jul 11  2013 php.ini-development     #  开发环境的配置文件。

-rw-r--r-- 1 101 101 69627 Jul 11  2013 php.ini-production     #  生产环境的配置文件。

[root@lnmp02 php-5.3.27]# diff php.ini*

521c521

< error_reporting = E_ALL | E_STRICT

 > error_reporting = E_ALL & ~E_DEPRECATED

538c538

< display_errors = On

> display_errors = Off

549c549

< display_startup_errors = On

> display_startup_errors = Off

提示:从对比结果可以看出,开发环境更多的是开启日志、调试信息,而生产环境都是关闭状态。

③ 拷贝 PHP 配置文件到 PHP 默认目录,并改名为 php.ini :

[root@lnmp02 php-5.3.27]# cp php.ini-production /application/php/lib/php.ini

[root@lnmp02 php-5.3.27]# ls -l /application/php/lib/php.ini

-rw-r--r-- 1 root root 69627 Dec 23 17:20 /application/php/lib/php.ini

提示:优化 PHP 解析就编辑该配置文件,对该文件的优化说明:待讲解。

3.2.5 配置 PHP 服务(FastCGI 方式)的进程管理配置文件 php-fpm.conf        

[root@lnmp02 php-5.3.27]# cd /application/php/etc/   #  该配置文件的默认路径。    

[root@lnmp02 etc]# ll

total 28

-rw-r--r-- 1 root root  1232 Dec 23 16:33 pear.conf

-rw-r--r-- 1 root root 21683 Dec 23 16:33 php-fpm.conf.default

[root@lnmp02 etc]# cp php-fpm.conf.default php-fpm.conf     #  备份并改名为系统默认识别的配置文件。

[root@lnmp02 etc]# ll

total 52

-rw-r--r-- 1 root root  1232 Dec 23 16:33 pear.conf

-rw-r--r-- 1 root root 21683 Dec 23 17:30 php-fpm.conf    #  配置文件。

-rw-r--r-- 1 root root 21683 Dec 23 16:33 php-fpm.conf.default

3.2.6 启动 PHP 服务(FastCGI 方式)

[root@lnmp02 etc]# /application/php/sbin/php-fpm     #  启动 PHP 的命令。

[root@lnmp02 etc]# ps -ef|grep php-fpm    #  查看进程(一个主进程,多个子进程)。

root     128462      1  0 17:47 ?        00:00:00 php-fpm: master process (/application/php5.3.27/etc/php-fpm.conf)

nginx    128463 128462  0 17:47 ?        00:00:00 php-fpm: pool www

nginx    128464 128462  0 17:47 ?        00:00:00 php-fpm: pool www

root     128466  12526  0 17:48 pts/1    00:00:00 grep php-fpm

[root@lnmp02 ~]# netstat -lntup|grep php

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

[root@lnmp02 etc]# lsof -i :9000     #  默认 9000 端口提供服务。

COMMAND    PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

php-fpm 128462  root    7u  IPv4 115538      0t0  TCP localhost:cslistener (LISTEN)

php-fpm 128463 nginx    0u  IPv4 115538      0t0  TCP localhost:cslistener (LISTEN)

php-fpm 128464 nginx    0u  IPv4 115538      0t0  TCP localhost:cslistener (LISTEN)

4. LNMP 整合之 NP 整合配置把动态请求抛给 PHP 服务

[root@lnmp02 conf]# cd /application/nginx/conf/extra

[root@lnmp02 extra]# ll

total 16

-rw-r--r-- 1 root root 332 Dec 21 14:58 bbs.conf

-rw-r--r-- 1 root root 409 Dec 21 17:29 blog.conf

-rw-r--r-- 1 root root 168 Dec 21 00:52 status.conf

-rw-r--r-- 1 root root 463 Dec 21 16:01 www.conf

[root@lnmp02 extra]# pwd

/application/nginx/conf/extra

[root@lnmp02 extra]# vi blog.conf

[root@lnmp02 extra]# cat blog.conf

    server {

        listen       80;

        server_name  blog.etiantian.org;

        location / {

            root   html/blog;

            index  index.html index.htm;

        }

        location ~ .*\.(php|php5)?$ {

            root html/blog;   

# 站点的根 。此处配置不正确会出现 404 错误。可以两个 location 里面的 root html/blog;  合成一个,放在两个 location 的外面(上面)。     

            fastcgi_pass  127.0.0.1:9000;

            fastcgi_index  index.php;   #  首页。  

            include fastcgi.conf;    #  包含文件(fastcgi 的参数、变量)。      

        }

        # access_log  logs/access_blog.log  main;

        access_log  logs/access_blog.log  main gzip buffer=32k flush=5s;

        # access_log off;

  }

[root@lnmp02 extra]# ../../sbin/nginx -t

[root@lnmp02 extra]# ../../sbin/nginx -s reload

[root@lnmp02 extra]# cd /application/nginx/html/blog/  #  博客的站点目录。    

[root@lnmp02 blog]# vi phpinfo.php   #  写一个 PHP 程序。

[root@lnmp02 blog]# cat phpinfo.php

<?php

phpinfo();

?>

[root@lnmp02 blog]# ll

total 8

-rw-r--r-- 1 root root 19 Dec 20 16:17 index.html

-rw-r--r-- 1 root root 20 Dec 25 04:55 phpinfo.php

到 Windows ping etiantian.org 查看已经有解析【略】。

在浏览器访问:http://blog.etiantian.org/phpinfo.php  结果如下图表示成功。

5. LNMP 整合之 PM 整合配置实战

[root@lnmp02 extra]# cd -

/application/nginx/html/blog

[root@lnmp02 blog]# pwd

/application/nginx/html/blog

[root@lnmp02 blog]# vim test_mysql.php

[root@lnmp02 blog]# cat test_mysql.php  

<?php

      $link_id=mysql_connect('localhost','root','123456') or mysql_error();

      if($link_id){

               echo "mysql successful by alinuxer !";

      }else{

               echo mysql_error();

      }

?>

[root@lnmp02 blog]# ll

total 8

-rw-r--r-- 1 root root  20 Dec 25 04:55 phpinfo.php

-rw-r--r-- 1 root root 215 Dec 25 06:12 test_mysql.php

通过 Windows 浏览器访问结果如下图所示:【成功的结果】

 

至此,LNMP 组合已搭建完成,可以在 LNMP 架构中搭建 BBS 论坛、Blog 程序 Wordpress 等等。

生产场景中数据库需要独立出来,有其独立的架构的,如主从复制、一主多从等,见后文。

猜你喜欢

转载自www.cnblogs.com/alinuxer/p/9884097.html