本章blog主要介绍了[LAMP] Linux (Centos)LAMP环境搭建,LAMP源码安装及LAMP架构原理详解,并分别部署php与apache不同组合方式的LAMP案例。

 

LAMP Server 


  • LAMP简介

LAMP网站框架是目前国际上流行的Web服务架构,该框架包括GNU / Linux 操作系统,Apache HTTP服务器,MySQL 类关系型数据库(RDBMS)以及PHP编程语言。所有组成产品均属于开源类软件 ,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,使其更适用于构建动态网站及开发Web应用程序, 现已成为国际流行的框架架构。

目前很多流行的商业应用都是采取这个架构,和Java/J2EE架构相比,LAMP具有Web资源丰富、轻量、快速开发等特点,与微软的.NET架构相比,LAMP具有通用、跨平台、高性能、低价格的优势,因此LAMP无论是性能、质量还是价格都是企业搭建网站的首选平台。

  • LAMP组件

GNU / Linux 操作系统: 

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

Apache HTTP服务器:

LAMP的HTTP服务器的角色除了由Apache提供外,还包括其他如nginx等的Web服务器 ;其中,Apache负责传递PHP及cgi等动态语言,Nginx提供负载均衡、反向解析及容错功能,彼此配合使用,成为HTTP服务器的配置首选模式。

MySQL 类关系型数据库(RDBMS):

MySQL作为LAMP的关系数据库管理系统(RDBMS)的原始角色已经由其他RDBMS(如MariaDB)甚至NoSQL数据库(如MongoDB)逐步取代。MariaDB由MySQL的创始人Michael Widenius主导开发,其属于MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可,且MariaDB完全兼容MySQL;MongoDB是一个Web规模的开源NoSQL数据库 。

php编程语言:

 

PHP作为LAMP的应用程序编程语言的原始角色,也逐步由其他语言(如Perl和Python)共同执行。PHP是一种服务器端脚本语言,专为Web开发而设计。PHP代码由web服务器提供的PHP模块编译,支持将PHP命令直接嵌入到HTML源文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;Perl是一系列高级,通用,解释的动态编程语言;Python是一中面向对象的的通用型高级编程语言,Python支持多种编程范例,包括面向对象,命令式,功能和过程范式。

缓存或加速器:

Apache提供了自己的缓存模块,也可以使用外加的Squid模块进行缓存,这两种方式均可以有效的提高Apache的访问响应能力。PHP的加速可使用xcache加速器,优化和缓存php动态内容,提升了PHP脚本的缓存性能。Memcached是一个分布式的内存对象缓存系统,通常用于动态Web应用以减轻数据库负载。

  • LAMP架构原理

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

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

若为php动态请求,则通过CGI协议将客户端的php请求传输给PHP程序,然后由php程序调用php解析器执行php请求。

PHP在执行php请求时判断是否会依赖mysql数据库。若不依赖mysql数据库,则由php解析器直接执行php相关脚本,将解析后的脚本再次通过CGI协议返传送给Apache.服务器,再执行“静态请求”的流程;

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

  • apache与php组合方式

Module机制:php直接以httpd的模块扩展的方式运行,php作为httpd功能的一部分。启动httpd进程时 ,亦开启了php功能。其中prefork模式依赖libphp5.so库 ,worker、event模式依赖libphp5-zts.so库 

CGI机制:php工作在独立的进程,当需要解析php请求时,由httpd唤醒php进程。因多个php请求,会启动多个php进程,需要耗费资源,整体性能不如module机制

Fast-CGI机制:生成php-fpm服务 ,由服务php-fpm管理php进程。基于套接字与apache联系 ,与apache work机制类似 ,有父进程,子进程,空闲进程等 ,大大提高了php处理能力。

  • LAMP服务器(server)实验搭建

根据apache与php组合的不同方式,下面将演示LAMP编译安装实验:实验一、 php 以module 模式访问 ,实验二 、配置apache 与fpm方式 的php 。

系统:Centos 6.6 

软件:httpd-2.4.34 + mysql-5.5.61 + php-5.6.36 

编译环境:安装LAMP相关依赖环境,包括“Server PlatForm Development”, “Development tools”,关闭selinux 和 iptables 功能

实验目的:编译安装LAMP,通过不同的方式,分别实现php 以 modeule 方式访问和 以Fast-CGI机制下运行  。

 

LAMP编译安装,配置php 以 module 模式访问


 

一、配置编译环境 ,安装“Server PlatForm Development”, “Development tools”,关闭selinux 和 iptables   

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

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

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

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

     

二、编译安装Apache

  • 编译安装apr(apr-1.6.3)

     

下载地址:http://download.nextag.com/apache//apr/apr-1.6.3.tar.gz    

[root@VM ~]# tar xf apr-1.6.3.tar.gz      
[root@VM ~]# cd apr-1.6.3    
[root@VM apr-1.6.3]# ./configure --prefix=/usr/local/apr
[root@VM apr-1.6.3]# make && make install
 
  • 编译安装apr-util(apr-util-1.6.1)

     

下载地址:  http://download.nextag.com/apache//apr/apr-util-1.6.1.tar.gz 

[root@VM ~]# tar xf apr-util-1.6.1.tar.gz 
[root@VM ~]# cd apr-util-1.6.1  
[root@VM apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
[root@VM apr-util-1.6.1]# make && make install
 
  • 编译安装httpd(httpd-2.4.34)

下载地址:http://mirror.reverse.net/pub/apache//httpd/httpd-2.4.34.tar.gz 

[root@VM  ~]#  yum install gcc gcc-c++ pcre pcre-devel  # 安装依赖环境
[root@VM ~]# cd httpd-2.4.34  # 编译安装httpd
[root@VM httpd-2.4.34]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable--ssl --enable-cgi --enable-rewrite --with-zlib
--with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --enable-modeles=most --enable-mpms-shared=all --with-mpm=event   
[root@VM httpd-2.4.34]# make && make install

[root@VM bin]# vi /etc/profile.d/http.sh    # 配置环境变量
export PATH=/usr/local/apache/bin:$PATH
[root@VM bin]# . /etc/profile.d/http.sh   # 使能环境变量

[root@VM apache]# ln -sv /usr/local/apache/include/ /usr/include/httpd  # 配置httpd include头文件
`/usr/include/httpd' -> `/usr/local/apache/include/'

[root@VM apache]# vi /etc/man.config  # 配置httpd man帮助文件
MANPATH /usr/local/apache/man
 
参数注释:
# ./configure --help :查看相关命令帮助,查看相关支持的选项参数及功能
    --prefix=PREFIX :指定默认安装目录
    --sbindir=DIR:指定可执行文件安装目录
    --enable-so   :   启用DSO动态加载模块支持,需要什么功能模块可动态加载
    --enable--ssl  :SSL/TLS support (mod_ssl)
    --enable-cgi   :支持CGI脚本功能
    --enable-rewrite : 启用网页地址重写功能,实现伪静态
    --with-zlib=DIR:安装zlib库
    --with-pcre=DIR :使用扩展的pcre lib库
    --with-apr=DIR :指向apr安装路径
    --with-apr-util=DIR :指向apr-util 安装路径
    --enable-modules=most :指定安装DSO动态库用来通信
    --with-mpm=prefork|worker|event :指定服务器默认支持的一种MPM模块
    --enable-mpms-shared=all  :当前平台选择MPM加载动态模块并以DSO动态库方式进行创建
    
configure的各项参数及功能介绍,可参照官方文档 https://httpd.apache.org/docs/2.4/en/programs/configure.html
 

 

 

  • 启动Apache服务并验证,修改apache的配置文件并设置PidFile路径(默认在/usr/local/apache/logs/httpd.pid)

[root@VM ~]# vi /etc/httpd/httpd.conf 
Pidfile "/var/run/httpd/httpd.pid"    # 添加该项,为Pidfile指明httpd.pid路径

[root@VM ~]# apachectl start    # 启动apache服务
[root@VM ~]# ss -tunl | grep 80
tcp    LISTEN     0      128                   :::80                   :::*     

[root@VM ~]# curl      # 验证apache服务
<html><body><h1>It works!</h1></body></html>
 

   

三、编译安装Mysql

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

[root@VM ~]# fdisk  /dev/sda    # 磁盘创建分区/dev/sda4 ,并调整磁盘格式为8e(LVM)

Command (m for help): n    # 创建分区
Command action
   e   extended
   p   primary partition (1-4)

Command (m for help): p    # 指定主分区
Selected partition 4
First cylinder (10976-16709, default 10976): 
Using default value 10976
Last cylinder, +cylinders or +size{K,M,G} (10976-16709, default 16709): 
Using default value 16709

Command (m for help): t    # 调整分区类型
Partition number (1-4): 4
Hex code (type L to list codes): 8e
Changed system type of partition 4 to 8e (Linux LVM)

Command (m for help): p    # 显示磁盘分区,验证/dev/sda4为Linux LVM分区类型

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1         256     2048000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2             256       10454    81920000   8e  Linux LVM
/dev/sda3           10454       10976     4194304   82  Linux swap / Solaris
/dev/sda4           10976       16709    46051714+  8e  Linux LVM

Command (m for help): w    # 保存分区退出
The partition table has been altered!

[root@VM ~]# partx -a /dev/sda    # 内核重读磁盘分区
[root@VM ~]# kpartx -af /dev/sda

[root@VM ~]# cat /proc/partitions     # 验证内核是否加载 /dev/sda4分区
major minor  #blocks  name

   8        0  134217728 sda
   8        1    2048000 sda1
   8        2   81920000 sda2
   8        3    4194304 sda3
   8        4   46051714 sda4

[root@VM ~]# mke2fs -t ext4 /dev/sda4    # 格式化分区/dev/sda4

[root@VM ~]# pvcreate /dev/sda4    # 创建pv
  Physical volume "/dev/sda4" successfully created

[root@VM ~]# pvs    # 显示pv
PV         VG   Fmt  Attr PSize  PFree 
/dev/sda2  vg0  lvm2 a--u 78.12g  2.92g
/dev/sda4       lvm2 ---- 43.92g 43.92g

[root@VM ~]# vgextend vg0  /dev/sda4    # 扩展vg0
  Volume group "vg0" successfully extended    
[root@VM ~]# vgs    # 显示vg 
  VG   #PV #LV #SN Attr   VSize   VFree 
  vg0    2   4   0 wz--n- 122.03g 46.84g
  
[root@VM ~]# lvcreate -n data -L 20G vg0    # 创建lvm分区data 
  Logical volume "data" created.  

[root@VM ~]# lvs
LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
data vg0  -wi-a----- 20.00g      

[root@VM ~]# mke2fs -t ext4 /dev/mapper/vg0-data    # 对分区创建文件系统

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

[root@VM ~]# mount -a    # 挂载所有分区
[root@VM ~]# mount    # 验证分区挂载
/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@VM ~]# tar xf mysql-5.5.61.tar.gz     # 解压mysql源码包

[root@VM ~]# useradd -s /sbin/nologin -r mysql    # 添加系统用户mysql
[root@VM ~]# id mysql
uid=498(mysql) gid=498(mysql) groups=498(mysql)

[root@VM ~]# cd /data/    # 创建mysql数据的目录/data/sqldata ,调整目录权限
[root@VM data]# mkdir sqldata
[root@VM data]# chown root:mysql sqldata/
 
[root@VM ~]# yum install ncurses-devel bison bison-devel   # 配置Epel yum源,安装mysql依赖环境

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

[root@VM 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/run/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@VM mysql-5.5.61]# make && make install

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

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

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

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

[root@VM mysql]# vi /etc/ld.so.conf.d/mysql.conf    # 配置mysql lib库,添加如下项
/usr/local/mysql/lib
[root@VM lib]# 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
 
#参数注释
# cmake . 
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql    #  MySQL安装的根目录
-DMYSQL_DATADIR=/data/sqldata            # MySQL数据库文件存放目录
-DSYSCONFDIR=/etc                        # MySQL配置文件所在目录    
-DWITH_MYISAM_STORAGE_ENGINE=1            # MySQL的数据库引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1          # MySQL的数据库引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1          # MySQL的数据库引擎
-DWITH_MEMORY_STORAGE_ENGINE=1            # MySQL的数据库引擎
-DMYSQL_UNIX_ADDR=/var/run/mysql/mysql.sock       # MySQL的sock目录
-DMYSQL_TCP_PORT=3306     # MySQL的监听端口
-DWITH_PARTITION_STORAGE_ENGINE=1  
-DEXTRA_CHARSETS=all      # 使MySQL支持所有的扩展字符
-DDEFAULT_CHARSET=utf8    # 设置MySQL的默认字符集为utf8
-DDEFAULT_COLLATION=utf8_general_ci    #设置MySQL的默认字符校对
-DWITH_DEBUG=0         # 禁用调试模式

编译的参数可以参考   。
 
  • mysql初始化,启动服务

 

[root@VM mysql]# chown -R root:mysql /usr/local/mysql    # 设置/usr/local/mysql 目录权限

[root@VM mysql]# ./scripts/mysql_install_db --datadir=/data/sqldata/ --user=mysql    # 初始化mysql脚本
Installing MySQL system tables...
180819 14:21:16 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.
180819 14:21:16 [Note] ./bin/mysqld (mysqld 5.5.61) starting as process 65052 ...
OK
Filling help tables...
180819 14:21:17 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.
180819 14:21:17 [Note] ./bin/mysqld (mysqld 5.5.61) starting as process 65059 ...
OK
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

[root@VM mysql]# ln -sv  /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld    # 启动文件
`/etc/init.d/mysqld' -> `/usr/local/mysql/support-files/mysql.server'

[root@VM run]# vi /etc/my.cnf     # 调整mysql 启动配置文件
[mysqld]
datadir=/data/sqldata    # 指定data目录
socket=/var/run/mysql/mysql.sock    # 指定sock目录
user=mysql    # 指定启动用户mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid    # 指定pid目录

[root@VM run]# mkdir /var/run/mysql    # 创建/var/run/mysql 目录,提供pid和sock存放目录
[root@VM run]# chown -R mysql.mysql /var/run/mysql    # 调整目录属性

[root@VM run]# chkconfig --add mysqld    # 加入mysqld启动服务
[root@VM run]# chkconfig mysqld on

[root@VM run]# service mysqld start    # 启动mysqld服务
Starting MySQL SUCCESS! 
[root@VM run]# ss -tunl | grep 3306
tcp    LISTEN     0      50                     *:3306                  *:*
 
  • 对mysql数据库进行管理,删除匿名用户,创建密码 ,删除test数据库 等操作

     

 

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

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.5.61    |
+-----------+
1 row in set (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

mysql> drop database test;
Query OK, 0 rows affected (0.03 sec)

mysql> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| user                      |
+---------------------------+

mysql> select user,host,password from user;
+------+-----------+----------+
| user | host      | password |
+------+-----------+----------+
| root | localhost |          |
| root | vm        |          |
| root | 127.0.0.1 |          |
| root | ::1       |          |
|      | localhost |          |
|      | vm        |          |
+------+-----------+----------+
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 ''@'vm';
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.6.36

     

下载地址:http://at2.php.net/distributions/php-5.6.36.tar.gz 

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

[root@VM php-5.6.36]#  ./configure --prefix=/usr/local/php 
--with-mysql=/usr/local/mysql  --with-openssl  
--with-mysqli=/usr/local/mysql/bin/mysql_config 
--enable-mbstring --with-freetype-dir   
--with-jpeg-dir  --with-png-dir   
--with-zlib  --with-bz2   
--with-mcrypt  --with-libxml-dir=/usr 
--enable-sockets  --with-apxs2=/usr/local/apache/bin/apxs 
--with-config-file-path=/etc  --with-config-file-scan-dir=/etc/php.d 
--enable-maintainer-zts  

[root@VM php-5.6.36]# make && make install

[root@VM php-5.6.36]# cp php.ini-production /etc/php.ini    # 把php提供配置文件

[root@VM ~]# vi /etc/profile.d/php.sh     #添加环境变量
export PATH=/usr/local/php/bin:$PATH 
  
[root@VM ~]# ln -sv /usr/local/php/include/ /usr/include/php    # 添加php 头文件
`/usr/include/php' -> `/usr/local/php/include/'
 
参数注释;
--prefix=/usr/local/php  # 指定php安装的路径
--with-mysql=/usr/local/mysql # 指定mysql的安装目录
--with-mysqli=/usr/local/mysql/bin/mysql_config # 可以让mysql与php结合的接口
--with-openssl   #支持ssl功能
--enable-mbstring    # 指定可以支持中文语言
--with-freetype-dir    # 加载freetype的头文件,可以支持不同字体
--with-jpeg-dir --with-png-dir # 支持jpep格式图片 ,支持pnp格式图片
--with-zlib    # 支持压缩库
--with-libxml-dir=/usr   # 指定xml的库路径
--enable-sockets    # 支持套接字的通信功能
--with-mcrypt      # 支持额外的加密功能的库
--with-config-file-path=/etc    # 指定php配置文件的路径(/etc/php.ini)
--with-config-file-scan-dir=/etc/php.d  # 支持php文件的附件配置文件(/etc/php.d/*.ini)
--with-bz2  #支持bz2的压缩库
--enable-maintainer-zts   # 此选项是否安装取决于你的Apache工作的mpm模式,
 
  • 配置apache 以支持php

[root@VM ~]# vi /etc/httpd/httpd.conf    #配置httpd 集成php 
    <1> 确认php模块启动
    LoadModule php5_module        modules/libphp5.so
    
    <2>添加如下二行
   AddType application/x-httpd-php  .php
   AddType application/x-httpd-php-source  .phps

    <3> 定位至DirectoryIndex index.html 
   修改为:
    DirectoryIndex  index.php  index.html

[root@VM ~]# apachectl stop    # 重启httpd服务
[root@VM ~]# apachectl start
 
  • 验证php功能与apache ,php与mysql 连接

[root@VM ~]# vi /usr/local/apache/htdocs/index.php    # 测试apache 与 php 连接状态脚本
<?php
        phpinfo();
?>

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

    image.png

    image.png

 

五、安装php加速器xcache

 

  • 安装xcache

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

[root@VM ~]# tar xf xcache-3.2.0.tar.gz     
[root@VM ~]# cd xcache-3.2.0

[root@VM xcache-3.2.0]# phpize # 报错,通过yum install autoconfig 解决。
Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.

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

[root@VM xcache-3.2.0]# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config  # 编译安装
[root@VM xcache-3.2.0]# make && make install    # 安装,记录生成的文件路径
Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-zts-20131226/

[root@VM ~]# cp xcache.ini /etc/php.d/
[root@VM ~]# vi /etc/php.d/xcache.ini
extension = /usr/local/php/lib/php/extensions/no-debug-zts-20131226/xcache.so    #修改该配置,变为绝对路径

[root@VM ~]# apachectl stop    # 重启httpd服务
[root@VM ~]# apachectl start
 
  • 验证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@VM ~]# tar xf phpMyAdmin-4.8.2-all-languages.tar.xz

[root@VM ~]# mv phpMyAdmin-4.8.2-all-languages /usr/local/apache/htdocs/pmyadmin
 

    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
 

 

七、压力测试

  • ab工具测试

[root@VM pmyadmin]# ulimit -n 3000
[root@VM pmyadmin]# ab -c 200 -n 2000 http://192.168.4.160/pmyadmin/index.php
This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.4.160 (be patient)


Server Software:        Apache/2.4.34
Server Hostname:        192.168.4.160
Server Port:            80

Document Path:          /pmyadmin/index.php
Document Length:        14114 bytes

Concurrency Level:      200
Time taken for tests:   50.732 seconds
Complete requests:      68
Failed requests:        50
   (Connect: 0, Receive: 0, Length: 50, Exceptions: 0)
Total transferred:      1237144 bytes
HTML transferred:       1115484 bytes
Requests per second:    1.34 [#/sec] (mean)
Time per request:       149211.594 [ms] (mean)
Time per request:       746.058 [ms] (mean, across all concurrent requests)
Transfer rate:          23.81 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   42  10.0     45      48
Processing:   303 3041 2912.9   2091   15081
Waiting:       92 2496 2183.3   1949   13240
Total:        303 3083 2914.7   2120   15127

Percentage of the requests served within a certain time (ms)
  50%   2120
  66%   2458
  75%   3025
  80%   3069
  90%   5107
  95%   9875
  98%  13559
  99%  15127
 100%  15127 (longest request)
 
 
结果证实 ,安装xcache 压力测试 ,时间间隔明显减少
 

 

LAMP编译安装,实现php-fpm模式 


一、配置编译环境 ,安装“Server PlatForm Development”, “Development tools”,关闭selinux 和 iptables    ,与上文配置相同

二、编译安装Apache ,与上文配置相同

三、编译安装Mysql,与上文配置相同

四、编译安装PHP 支持Fast-CGI 

  • 编译安装php-5.6.36

     

下载地址:http://at2.php.net/distributions/php-5.6.36.tar.gz 

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

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

[root@VM php-5.6.36]# make && make install


[root@VM ~]# vi /etc/profile.d/php.sh     #添加环境变量
export PATH=/usr/local/php/bin:$PATH 
  
[root@VM ~]# ln -sv /usr/local/php/include/ /usr/include/php    # 添加php 头文件
`/usr/include/php' -> `/usr/local/php/include/'
 
# 说明,与Module方式相比,编译安装Fast-CGI模式时
去掉了--enable-maintainer-zts,不再将php作为httpd的模块。
此外将--with-apxs2=/usr/local/apache/bin/apxs改为--enable-fpm
 
  • 配置并启动 php-fpm 服务

     

[root@VM ~]# cd php-5.6.36
[root@VM php-5.6.36]# cp php.ini-production /etc/php.ini    # 为php提供配置文件

[root@VM php-5.6.36]# cp sapi/fpm/init.d.php-fpm  /etc/init.d/php-fpm      # 配置php-fpm启动脚本

[root@VM php-5.6.36]# chmod +x /etc/init.d/php-fpm    # 分配脚本执行权限
[root@VM php-5.6.36]# chkconfig --add php-fpm
[root@VM php-5.6.36]# chkconfig php-fpm on

[root@VM php-5.6.36]# cp /usr/local/php/etc/php-fpm.conf.default   /usr/local/php/etc/php-fpm.conf   #准备脚本的配置文件

[root@VM php-5.6.36]# vi /usr/local/php/etc/php-fpm.conf    # 配置php-fpm 相关参数
pid = /var/run/php-fpm.pid    # 默认路径为/usr/local/php/var/run/php-fpm.pid ,指定pid文件
pm.max_children = 5    # 服务启动时的子进程数
pm.start_servers = 2    # 开启启动的进程数
pm.min_spare_servers = 1    # 最少空闲子进程数
pm.max_spare_servers = 3    # 最大空闲子进程数
pm.max_requests = 500    # 最大客户端请求数

[root@VM php-5.6.36]# service php-fpm start
[root@VM ~]# ss -tunl | grep 9000
tcp    LISTEN     0      128            127.0.0.1:9000                  *:*
 
  • 配置apache 以支持fast-CGI 

[root@VM ~]# vi /etc/httpd/httpd.conf    #配置httpd 集成php 
    <1> 确认php模块启动
    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
    
    <2> 配置apache可识别php文件
     AddType application/x-httpd-php  .php
     AddType application/x-httpd-php-source  .phps

    <3> 定位至DirectoryIndex index.html 
     修改为:
    DirectoryIndex  index.php  index.html
    
    <4> 配置httpd支持fast-CGI,在主机下定义,而非目录
    DocumentRoot "/var/www/html"
            ProxyRequests off
            ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/var/www/html/$1
        
    <5> 配置fast-CGI支持虚拟主机,在主机下定义,而非目录
    <VirtualHost *:80>
        ProxyRequests off
        ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/var/www/html/$1
    </VirtualHost>   
         
[root@VM ~]# apachectl stop    # 重启httpd服务
[root@VM ~]# apachectl start
 
  • 验证php功能与apache ,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,与上文配置相同

六、安装phpMyAdmin-4.8.2 ,管理mysql ,与上文配置相同

七、压力测试 ,与上文配置相同

至此,完成LAMP编译安装实验,分别实现 php 以module 模式访问 和 配置apache 与fpm方式 的php 。

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