本章blog主要介绍了[LNMP] Linux(Centos) LNMP环境搭建,(Linux+Nginx+mysql+php) 源码安装及LNMP架构原理详解。


LNMP Server 


  • LNMP简介

LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。

GNU / Linux 操作系统: 

Linux是一种类似Unix的计算机操作系统,Linux操作系统有很多个不同的发行版,如Red Hat 、SUSE 、FreeBSD、Debian、CentOS等。

Nginx服务器:

Nginx是一个小巧而高效的Linux下的Web服务器软件和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler 站点开发的,已经在一些俄罗斯的大型网站上运行多年,相当的稳定。Nginx性能稳定、功能丰富、运维简单、处理静态文件速度快且消耗系统资源极少。

MySQL 类关系型数据库(RDBMS):是一个小型关系型数据库管理系统

php编程语言:服务器端执行的嵌入HTML文档的脚本语言

  • LNMP架构原理

客户端发送http request 请求 ,服务器(Nginx)接受web请求;

Nginx判断客户端请求的资源是否为静态请求。若是静态请求,则Nginx直接将客户端请求的静态资源(.html, .htm  .shtml等文件),通过Http response的形式传送给客户端;

若为php动态请求,则php脚本通过接口传输协议(网关协议)PHP-FCGI(fast-cgi)传输给PHP-FPM(进程管理程序)序,PHP-FPM不做处理,然后PHP-FPM调用PHP解析器进程,PHP解析器解析php脚本信息。

PHP在执行php请求时判断是否会依赖mysql数据库。若不依赖mysql数据库,则PHP-FPM不做处理,然后PHP-FPM调用PHP解析器进程,服务器再通过Http response的形式传送给浏览器,浏览器再进行解析与渲染然后进行呈现。

若依赖mysql数据库,则php程序通过php-mysql 驱动与mysql进行关联 ,获取相关数据 ,然后将其返还给php解释器 ,再次执行“不依赖mysql数据库”的流程。

  • Fast-CGI 介绍

cgi是通用网关接口,是外部应用程序与Web服务器之间的接口标准,cgi是为了保证web server传递过来的数据是标准格式的,方便cgi程序的编写者。

Fast-cgi像是一个常驻(long-live)型的cgi,是用来提高cgi程序性能的。

fast-CGI是nginx和php之间的一个通信接口,该接口实际处理过程通过启动php-fpm进程来解析php脚本,即php-fpm相当于一个动态应用服务器,从而实现nginx动态解析php。因此,如果nginx服务器需要支持php解析,需要在nginx.conf中增加php的配置;将php脚本转发到fastCGI进程监听的IP地址和端口(php-fpm.conf中指定)。同时,php安装的时候,需要开启支持fastCGI选项,并且编译安装php-fpm补丁/扩展,同时,需要启动php-fpm进程,才可以解析nginx通过fastCGI转发过来的php脚本。

  • Fast-CGI的工作原理

Web Server启动时载入Fast-CGI进程管理器(IIS ISAPI或PHP-FPM)

FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。

当客户端请求到达Web Server时,Fast-CGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到Fast-CGI子进程php-cgi。

Fast-CGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当Fast-CGI子进程关闭连接时,请求便告处理完成。Fast-CGI子进程接着等待并处理来自Fast-CGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。


LNMP编译安装


LNMP部署环境:

    系统:Centos 6.6 

    软件:nginx-1.8.1+ mysql-5.5.61 + php-5.6.38

    编译环境:安装LNMP相关依赖环境,包括“Server PlatForm Development”, “Development tools”,关闭selinux 和 iptables 功能,并配置epel  yum源

    实验目的:编译安装LAMP,通过php-fpm实现php与nginx链接  。

一、配置编译环境 

[root@zabbix ~]# yum groupinstall "Development tools" -y    # 安装包组开发工具

[root@zabbix ~]# yum groupinstall "Server Platform Development" -y    # 安装包组服务开发环境

[root@zabbix ~]# vi /etc/selinux/config     # 修改配置文件,关闭selinux功能
SELINUX=disabled    # 设定为disabled
#SELINUXTYPE=targeted  # 注释该项,行首添加#

[root@zabbix ~]# getenforce     # 验证selinux功能是否关闭
Disabled

[root@zabbix ~]# chkconfig iptables off    # 禁止开机自启动iptables功能

[root@zabbix ~]# service iptables stop    # 停止iptables 功能

[root@zabbix ~]# vi /etc/yum.repos.d/CentOS-Base.repo     # 配置epel源,添加如下内容

[epel]
name=CentOS -$releasever - Epel
baseurl=https://mirrors.aliyun.com/epel/6Server/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-6Server

[root@zabbix ~]# yum clean all    # 清理yum缓存
Loaded plugins: fastestmirror, security
Cleaning repos: base epel extras updates
Cleaning up Everything
Cleaning up list of fastest mirrors

[root@zabbix ~]# yum repolist        # 查看yum源报告

     

二、编译安装Nginx(nginx-1.8.1)

  • 编译安装pcre(pcre-8.37)

PCRE是一个Perl库,中文”Perl兼容的正则表达式库”。安装Nginx是为了使Nginx支持具备URI重写功能的rewrite模块,如果不安装pcre库,则Nginx无法使用rewrite模块功能,Nginx的Rewrite模块功能几乎是企业应用必须;

下载地址:https://ftp.pcre.org/pub/pcre/pcre-8.37.tar.bz2    

[root@zabbix nginx]# tar xf pcre-8.37.tar.gz 

[root@zabbix nginx]# cd pcre-8.37

[root@zabbix pcre-8.37]# ./configure --prefix=/usr/local/pcre

[root@zabbix pcre-8.37]# make && make install
  • 编译安装zlib(zlib-1.2.11.tar.gz)

zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ;

下载地址:  http://prdownloads.sourceforge.net/libpng/zlib-1.2.11.tar.gz?download 

[root@zabbix nginx]# tar -xf zlib-1.2.11.tar.gz 

[root@zabbix nginx]# cd zlib-1.2.11

[root@zabbix zlib-1.2.11]# ./configure --prefix=/usr/local/zlib

[root@zabbix zlib-1.2.11]# make && make install
  • 编译安装openssl(openssl-1.0.2p.tar.gz)

OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。 nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http)。

下载地址:https://www.openssl.org/source/openssl-1.0.2p.tar.gz 

[root@zabbix nginx]# tar -xf openssl-1.0.2o.tar.gz 

[root@zabbix nginx]# cd openssl-1.0.2o

[root@zabbix openssl-1.0.2o]# ./config --prefix=/usr/local/openssl

[root@zabbix openssl-1.0.2o]# make && make install
  • 编译安装nginx

下载地址:https://nginx.org/download/nginx-1.8.1.tar.gz 

[root@zabbix nginx]# groupadd -r www    

[root@zabbix nginx]# useradd -g www -s /sbin/nologin www    # 添加www用户

[root@zabbix nginx]# tar -xf nginx-1.8.1.tar.gz 

[root@zabbix nginx]# cd nginx-1.8.1

[root@zabbix nginx-1.8.1]# ./configure \
--user=www \
--group=www \
--prefix=/usr/local/nginx \
--with-http_sub_module \
--with-http_gzip_static_module \
--with-http_ssl_module \
--with-pcre=/usr/local/src/nginx/pcre-8.37 \
--with-zlib=/usr/local/src/nginx/zlib-1.2.11 \
--with-openssl=/usr/local/src/nginx/openssl-1.0.2o 

[root@zabbix nginx-1.8.1]# make && make install

[root@zabbix nginx-1.8.1]# cd /usr/local/nginx/

[root@zabbix nginx]# ls
conf  html  logs  sbin

[root@zabbix nginx]# vi /etc/profile.d/nginx.sh     # 配置环境变量
export PATH=/usr/local/nginx/sbin:$PATH

[root@zabbix conf]# ln -sv /usr/local/nginx/conf /etc/nginx   # 链接nginx配置文件
`/etc/nginx' -> `/usr/local/nginx/conf/'

[root@zabbix nginx-1.8.1]# mkdir /var/run/nginx    # 创建 nginx pid 文件目录

[root@zabbix nginx-1.8.1]# chown www.www /var/run/nginx    # 配置/var/run/nginx 文件属性

[root@zabbix conf]# vi /etc/nginx/nginx.conf     # 调整nginx配置文件
user  www www;    #  Nginx运行使用的用户为www
pid        /var/run/nginx/nginx.pid;    # 配置nginx.pid文件路径

[root@zabbix run]# nginx -t -c /etc/nginx/nginx.conf    # 确认配置文件格式及语法是否正确
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

  • 设置nginx服务启动脚本,启动Nginx服务并进行验证

[root@zabbix conf]# scp root@192.168.23.100:/etc/rc.d/init.d/nginx /etc/init.d/    
# 从其他yum 安装nginx的服务器拷贝nginx 服务启动脚本到/etc/init.d 目录中

root@192.168.23.100's password: 
nginx                                100% 2795     2.7KB/s   00:00    

[root@zabbix conf]# vi /etc/init.d/nginx         # 修改nginx服务启动脚本   
...
nginx="/usr/local/nginx/bin/nginx"    # 指定nginx命令路径
lockfile="/var/lock/nginx"    # 指定nginx lockfile文件
pidfile="/var/run/nginx/${prog}.pid"    # 指定nginx 启动pid文件路径
NGINX_CONF_FILE="/etc/nginx/nginx.conf"    # 指定配置脚本nginx.conf 文件路径

[root@zabbix nginx]# chkconfig --add nginx    # 设置添加到chkconfig 列表

[root@zabbix nginx]# chkconfig nginx on    # 设置开机自动启动

[root@zabbix nginx]# service nginx start    # nginx服务启动
Starting nginx:                                            [  OK  ]

[root@zabbix nginx]# ss -tunlp | grep nginx
tcp    LISTEN     0      128        *:80          *:*      users:(("nginx",11893,6),("nginx",11895,6))

[root@zabbix nginx]# ps aux | grep nginx    # 验证nginx服务 ,root角色启动主进程 ,www角色启动worker proess进程
root     11893  0.0  0.0  17996   836 ?        Ss   13:32   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /etc/nginx/nginx.conf
www      11895  0.0  0.0  18448  1812 ?        S    13:32   0:00 nginx: worker process                               
root     11915  0.0  0.0 103328   848 pts/0    S+   13:33   0:00 grep nginx

[root@zabbix nginx]# curl -I http://localhost    # 验证nginx 运行状态
HTTP/1.1 200 OK
Server: nginx/1.8.1

    image.png

三、编译安装Mysql (mysql-5.5.61)

  • 建议在硬raid中创建lvm并使用独立的lvm磁盘作为mysql 数据存储目录 ,便于备份mysql数据

[root@zabbix ~]# pvs    # 查看磁盘剩余空间
  PV         VG   Fmt  Attr PSize   PFree 
  /dev/sda2  vg0  lvm2 a--u 439.45g 92.77g

[root@zabbix ~]# vgs    # 查看磁盘剩余空间
  VG   #PV #LV #SN Attr   VSize   VFree 
  vg0    1   6   0 wz--n- 439.45g 92.77g

[root@zabbix ~]# lvcreate -n data -L 50G vg0    # 创建lvm分区data ,大小为50G 
  Logical volume "data" created.

[root@zabbix ~]# lvs    # 查看创建的lvm分区
  LV    VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  data  vg0  -wi-a-----  50.00g     
  
[root@zabbix ~]# mke2fs -t ext4 /dev/mapper/vg0-data    # 格式化分区/dev/sda4
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux    

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

[root@zabbix ~]# mount /dev/mapper/vg0-data  /data/

[root@zabbix ~]# mkdir /data    # 创建目录,做挂载目录用途

[root@VM ~]# vi /etc/fstab 	# 配置开机自动挂载/dev/mapper/vg0-data 分区
/dev/mapper/vg0-data    /data                   ext4    defaults        1 2	

[root@VM ~]# mount -a    # 挂载所有分区
    
[root@zabbix ~]# mount  | grep data    # 查看验证lvm分区挂载
/dev/mapper/vg0-data on /data type ext4 (rw)
  • 编译安装mysql

下载地址:https://mirrors.163.com/mysql/Downloads/MySQL-5.5/mysql-5.5.61.tar.gz  

[root@zabbix mysql]# groupadd mysql -r    # 添加mysql组

[root@zabbix mysql]# useradd -s /sbin/nologin -g mysql  mysql    # 添加系统用户mysql

[root@zabbix mysql]# id mysql    # 查看mysql用户
uid=498(mysql) gid=498(mysql) groups=498(mysql)
  
[root@zabbix mysql]# mkdir /data/sqldata /var/run/mysql /var/lock/mysql  # 创建mysql数据的目录/data/sqldata,pid目录/var/run/mysql ,lock目录/var/lock/mysql 

[root@zabbix mysql]# chown mysql.mysql /var/run/mysql/ /var/lock/mysql/ /data/sqldata/   # 调整目录权限属主、属组为mysql

[root@zabbix mysql]# tar -xf mysql-5.5.61.tar.gz   # 解压mysql源码包

[root@zabbix mysql]# cd mysql-5.5.61    # 编译安装mysql

[root@zabbix mysql-5.5.61]# yum install cmake    # 安装cmake命令功能

[root@zabbix mysql-5.5.61]# cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql  \
-DMYSQL_DATADIR=/data/sqldata   \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DMYSQL_UNIX_ADDR=/var/lock/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DWITH_PARTITION_STORAGE_ENGINE=1  \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_DEBUG=0 

[root@zabbix mysql-5.5.61]# make && make install

[root@zabbix mysql-5.5.61]# vi /etc/profile.d/mysql.sh    # 配置mysql环境变量
export PATH=/usr/local/mysql/bin:$PATH

[root@zabbix mysql-5.5.61]# . /etc/profile.d/mysql.sh    # 使能环境变量

[root@zabbix mysql-5.5.61]# ln -sv /usr/local/mysql/include/ /usr/include/mysql    # 配置mysql include头文件
`/usr/include/mysql' -> `/usr/local/mysql/include/'

[root@zabbix mysql-5.5.61]# vi /etc/man.config     # 配置mysql命令帮助文件
MANPATH /usr/local/mysql/man

[root@zabbix mysql-5.5.61]# vi /etc/ld.so.conf.d/mysql.conf    # 配置mysql lib库,添加如下项
/usr/local/mysql/lib

[root@zabbix mysql-5.5.61]# ldconfig -v | grep mysql    # 验证lib库
/usr/local/mysql/lib:
	libmysqlclient.so.18 -> libmysqlclient_r.so.18.0.0
/usr/lib64/mysql:
	libmysqlclient_r.so.16 -> libmysqlclient_r.so.16.0.0
	libmysqlclient.so.16 -> libmysqlclient.so.16.0.0
  • mysql初始化,启动服务

[root@zabbix ~]# cd /usr/local/mysql/ 

[root@zabbix mysql]#./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/sqldata/   # 初始化mysql脚本

[root@zabbix mysql]# cp support-files/my-large.cnf /etc/my.cnf    # 复制启动脚本配置文件
cp: overwrite `/etc/my.cnf'? y

  
[root@zabbix mysql]# vi /etc/my.cnf     # 调整mysql启动配置文件

[client]
#password       = your_password
port            = 3306    # 指定端口
socket          = /var/lock/mysql/mysql.sock    # 指定sock文件路径

# Here follows entries for some specific programs

# The MySQL server

[mysqld]
port            = 3306
socket          = /var/lock/mysql/mysql.sock    # 指定sock文件
pid-file        = /var/run/mysql/mysql.pid    # 指定pid目录
datadir         = /data/sqldata/    # 指定数据存储目录

[root@zabbix mysql]# cp support-files/mysql.server /etc/init.d/mysqld    # 复制mysqld启动脚本文件

[root@zabbix mysql]# vi /etc/init.d/mysqld     # 配置mysqld启动脚本
basedir=/usr/local/mysql    # 指定mysql安装目录
datadir=/data/sqldata    # 指定数据存储目录


[root@zabbix mysql]# chkconfig --add mysqld    # 加入mysqld启动服务

[root@zabbix mysql]# chkconfig mysqld on

[root@zabbix mysql]# service mysqld start    # 启动mysqld服务
Starting MySQL SUCCESS! 

[root@zabbix mysql]# ss -tunl | grep 3306
tcp    LISTEN     0      50                     *:3306                  *:*
  • 对mysql数据库进行管理,删除匿名用户,创建密码 ,删除test数据库 等操作

[root@zabbix data]# mysql    #登录mysql 数据库
elcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.61-log Source distribution

mysql> drop database test;    # 删除test数据库
Query OK, 0 rows affected (0.03 sec)

mysql> show databases;    # 显示数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)

mysql> use mysql;    # 切换到mysql 数据库
Database changed

mysql> select user,host,password from user;
+------+-----------+----------+
| user | host      | password |
+------+-----------+----------+
| root | localhost |          |
| root | zabbix    |          |
| root | 127.0.0.1 |          |
| root | ::1       |          |
|      | localhost |          |
|      | zabbix    |          |
+------+-----------+----------+
6 rows in set (0.00 sec)
mysql> drop user root@'::1';    # 清理匿名用户
Query OK, 0 rows affected (0.00 sec)

mysql> drop user ''@'localhost';    
Query OK, 0 rows affected (0.00 sec)

mysql> drop user ''@'zabbix';
Query OK, 0 rows affected (0.00 sec)

mysql> UPDATE user SET password=PASSWORD('Hello123abc.com') WHERE user='root';    # 定义root用户密码
Query OK, 4 rows affected (0.01 sec)
Rows matched: 4  Changed: 4  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
  • 对mysql 创建用户及密码、主机配置文件,可以不使用密码进行登录

[root@VM mysql]# vi /root/.my.cnf    # 添加如下代码,实现无需密码进行登录
[mysql]
user=root
host=localhost
password=Hello123abc.com

注:在启动MySQL服务时,会按照一定次序搜索my.cnf。
寻找顺序:/etc/my.cnf -->$MYSQL_Base/my.cnf --> --defaults-extra-file=/path/to/some_my.cnf -->.my.cnf


四、编译安装PHP(php-5.5.38

PHP 通过 PHP-FPM(FastCGI进程管理器)可以很好地与 Nginx 协同工作。PHP-FPM 针对不同规模的网站功能和性能都非常优良,尤其是高并发大型网站。

PHP-FPM是一个实现了Fastcgi的程序,PHP-FPM的管理对象是php-cgi。 后来PHP内核集成了PHP-FPM之后就方便多了,使用–enalbe-fpm这个编译参数即可。

  • 编译安装php

下载地址:http://am1.php.net/get/php-5.5.38.tar.gz/from/this/mirror 

[root@zabbix php]# yum -y install libxml2-devel openssl-devel openssl bzip2-devel libmcrypt libmcrypt-devel mcrypt   
# 配置Epel yum源,安装依赖环境


[root@zabbix php]# tar xf php-5.5.38.tar.gz 

[root@zabbix php]# cd php-5.5.38

[root@zabbix php-5.5.38]# ./configure \
--prefix=/usr/local/php   \
--with-mysql=/usr/local/mysql  \
--with-openssl  \
--with-mysqli=/usr/local/mysql/bin/mysql_config  \
--with-freetype-dir  \
--with-jpeg-dir  \
--with-png-dir   \
--with-zlib   \
--with-bz2   \
--with-mcrypt  \
--with-libxml-dir=/usr   \
--with-config-file-path=/etc  \
--with-config-file-scan-dir=/etc/php.d    \
--with-gd \
--with-gettext  \
--enable-sockets  \
--enable-xml \
--enable-fpm  \
--enable-bcmath \
--enable-mbstring 

[root@zabbix php-5.5.38]# make && make install

[root@zabbix php-5.5.38]# vi /etc/profile.d/php.sh     #添加环境变量
export PATH=/usr/local/php/bin:/usr/local/php/sbin:$PATH 
  
[root@VM ~]# ln -sv /usr/local/php/include/ /usr/include/php    # 添加php-fpm头文件
`/usr/include/php' -> `/usr/local/php/include/'

[root@zabbix php-5.5.38]# cp php.ini-production /etc/php.ini   # 拷贝php.ini配置文件

[root@zabbix php-5.5.38]# cp sapi/fpm/php-fpm.conf /etc/php-fpm.conf    # 拷贝php-fpm 配置文件

[root@zabbix php-5.5.38]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm    # 拷贝php-fpm 启动脚本文件

[root@zabbix php-5.5.38]# chmod 755 /etc/init.d/php-fpm     # 修改启动脚本权限

[root@zabbix php-5.5.38]# vi /etc/php-fpm.conf     # 调整php-fpm.conf 配置文件
[global]
pid = /var/run/php-fpm/php-fpm.pid    # 指定pid 文件路径
error_log = /var/log/php-fpm/php-fpm.log    # 指定错误日志log 路径

[root@zabbix php-5.5.38]# vi /etc/init.d/php-fpm     # 修改php-fpm启动脚本文件
#! /bin/sh
php_fpm_CONF=/etc/php-fpm.conf    # 指定php-fpm conf 路径
php_fpm_PID=/var/run/php-fpm/php-fpm.pid    # 指定php-fpm.pid 路径

[root@zabbix php-5.5.38]# chkconfig --add php-fpm

[root@zabbix php-5.5.38]# chkconfig php-fpm on

[root@zabbix php-5.5.38]# service php-fpm start    
Starting php-fpm  done

[root@zabbix php-5.5.38]# ss -tunl |grep 9000
Netid State      Recv-Q Send-Q                        Local Address:Port                          Peer Address:Port 
tcp   LISTEN     0      128                               127.0.0.1:9000                                     *:*
  • 配置nginx支持php

[root@zabbix html]# vi /etc/nginx/nginx.conf
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm index.php;    # 该项添加index.php 
        }
    location ~ \.php$ {    #取消该段内容反向解析的注释
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;    # 把$Scripts 调整成 $document_root
            include        fastcgi_params;
        }

[root@zabbix html]# service nginx restart
Stopping nginx:                                            [  OK  ]
Starting nginx:                                            [  OK  ]
 
[root@zabbix html]# vi /usr/local/nginx/html/index.php     # php 测试
<?php
        phpinfo ();
?>

[root@zabbix html]# curl -I http://localhost/index.php    # 验证php启动
HTTP/1.1 200 OK
Server: nginx/1.8.1
  • 验证php功能与nginx ,php与mysql 连接

[root@VM ~]# vi /usr/local/apache/htdocs/index.php    # 测试apache 与 php 连接状态脚本
<?php
        $link = mysql_connect('localhost','root','Hello123abc.com');
if ($link)
        echo "sucessful.";
else
        echo "failure.";
 
mysql_close();
phpinfo();
?>

    image.png

五、安装php加速器xcache

  • 安装xcache

下载地址:http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz 

[root@zabbix php]# tar xf xcache-3.2.0.tar.gz     

[root@zabbix php]# cd xcache-3.2.0

[root@zabbix xcache-3.2.0]# phpize      # 编译php模块
Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226

[root@zabbix xcache-3.2.0]# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config  # 编译安装

[root@zabbix xcache-3.2.0]# make && make install    # 安装,记录生成的文件路径
Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/

[root@zabbix xcache-3.2.0]# cp xcache.ini /etc/php.d/
[root@zabbix xcache-3.2.0]# vi /etc/php.d/xcache.ini 

;; this is an example, it won't work unless properly configured into php.ini
[xcache-common]
;; non-Windows example:
extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/xcache.so    #修改该配置,变为绝对路径

[root@zabbix xcache-3.2.0]# service php-fpm restart    # 重启php-fpm 相关服务
Gracefully shutting down php-fpm . done
Starting php-fpm  done
  • 验证xcache 安装

image.png

六、安装phpMyAdmin-4.8.2 ,管理mysql

  • 安装phpMyAdmin-4.8.2   ,支持php5.5- php 7.2  ,mysql-5.5 以上

下载地址:https://files.phpmyadmin.net/phpMyAdmin/4.8.2/phpMyAdmin-4.8.2-all-languages.tar.xz 

[root@zabbix mysql]# wget https://files.phpmyadmin.net/phpMyAdmin/4.8.2/phpMyAdmin-4.8.2-all-languages.tar.xz 

[root@zabbix mysql]# tar xf phpMyAdmin-4.8.2-all-languages.tar.xz 

[root@zabbix mysql]# cp phpMyAdmin-4.8.2-all-languages /usr/local/nginx/html/phpadm

    image.png

  • 错误故障解决

    image.png

1)配置文件现在需要一个短密码:

解决办法:设定 config.default.php 文件的108行 $cfg[‘blowfish_secret’] 参数,参数字符串长度必须在32位以上。

[root@VM pmyadmin]# vi libraries/config.default.php   # 在phpMyAdmin目录下libraries文件下的config.default.php

$cfg['blowfish_secret'] = 'Itwish@itwish.cn@blog.51cto.com/itwish';

2)$cfg['TempDir'] (./tmp/) 读取失败且不能建立缓存, phpMyAdmin运行速度将受影响.

解决办法:手动在phpmyadmin的根目录建立tmp文件,并赋予777权限

[root@VM pmyadmin]# mkdir -m 777 tmp


至此,完成LNMP编译安装实验,实现 php以php-fpm方式与nginx互连 。

转载请注明出处https://blog.51cto.com/itwish/