LAMP详解

Posted

tags:

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

一、LAMP概述
二、安装与配置LAMP
三、深入理解LAMP(yum)
四、Xcache
五、php-fpm


一、LAMP概述
LAMP:
    A:apache,M:mysql/Mariadb,P:php/perl/python
    httpd:接受用户的所有请求{动态/静态};静态直接响应,动态资源为php脚本,对此类资源的请求,交给php来运行,并将运行结果返回httpd
    PHP:运行php程序
    Mariadb:数据管理系统;

WEB资源类型
    静态资源:原始形式与响应内容一致
    动态资源:原始形式通常为程序文件,需要在服务器端执行之后,将执行结果返回给客户端
    
    客户端技术:javascript
    服务器端技术:php,jsp
1.CGI
commond gateway interface //是一种标准
    可以让一个client,从网页浏览器向执行在网络服务器上的程序传输数据;CGI描述了客户端和服务器程序之间传输的一种标准
    client---[内核空间]-----{http_s-----后台应用程序}
    c获取到的内容中有需要填写的表单,c填好后,发送给http_s,http_s通过cgi协议,发送给其他应用程序,进行接受执行
        获取到的数据,可以看做是后台应用程序运行的参数信息
    CGI:可以与众多的,php,perl,c,c++进行交互
    
    子进程的目的:是为父进程完成某一个目的的
    父进程可以生成多个子进程
如图一:
技术分享图片   

CGI默认是没有启动的,
client请求httpd服务:
    静态:向本地的内核发起系统调用,通过IO请求,加载本地文件,返回即可
    动态:httpd进程通过cgi协议,向后端运行cgi程序的环境,提请一个进程,加载到cgi脚本到用户空间,让子进程运行;子进程运行的结果用cgi协议返回给server
    静态:client--http-->httpd
    动态:client--http-->httpd--->cgi-->libphp5.so()
        可以把libphp5.so理解为php引擎
    动态资源:client--[http]-->httpd--->libphp5.so()--[mysql]--->mysql server
    //php自己是不会和mysql交互的,但是php中的代码可能用到mysql

对于http来说,我返回的都是纯文本数据流,//动态的返回的也是运行后的结果而已            
http负责响应client请求以及管理后端的cgi进程

程序=指令+数据
数据模型:分类
    1.概念数据模型
        现实世界--[抽象]---信息世界---[转换]----计算机世界    
    2.逻辑数据模型: //对应的数据库称之为关系型数据库,如MySQL,在1的基础上加了各个实体的属性
        层次模型:
        网状模型:
        关系模型:execl行和列,就是一种关系,表和表之间也可能有关系    
    3.物理数据模型://数据在物理介质上的具体组织结构
        
关系模型:Oracle,Sybase,Infomix //后两个的定位太具有前瞻性
    IBM:DB2,SQL Server[联合sybase做的],MySQL,PostgreSQL,    
        MySQL-->MariaDB
指令:代码文件
数据:数据存储系统、文件
    client======httpd_s=======cgi运行环境=======数据存储系统
    http协议        cgi协议            mysql协议
请求流程:
    clinet-httpd协议-->httpd[动态]---cgi协议-->application server(program file)---mysql协议--->mysql server
连接Mysql的组件,是mysql驱动

2.php:通用编程语言
    PHP是通用服务器端脚本编程语言,其主要用于web开发以实现动态web页面,它也是最早实现将脚本嵌入html源码文档中的服务器端脚本语言之一。同时,php还提供了一个命令行接口,因此,其也可以在大多数系统上作为一个独立的shell来使用。
    1999.Zend Enginx1.0,PHP4.0诞生
    2004.Zend Engine2.0 PHP5.0
        编译:opcode[php编译后的中间语言]
        执行:opcode拿到引擎上执行
        
Zend Engine:PHP的解释器,将php代码的处理分成了两段
    编译阶段:运行阶段
    PHP--Zend Opcode{二进制格式,类似java字节码}存储于内存中--->使用Zend Engine去执行Opcode
Opcode是一种php脚本编译后的中间语言,PHP的脚本代码四个阶段
    1.Scanning(Lexing)将php代码装换为语言片段(Tokens)
    2.Parsing--将Tokens转换成简单而有意义的表达式
    3.Compilation--将表达式编译成Opcode
    4.Execution--顺次执行Opcode,每次一条,从而实现PHP脚本的功能
    扫描-->分析-->编译--->执行 //scanning-->parsing-->Comilation--->Excution
    //生成的Opcode可以复用,实现加速
PHP加速器
    基于pHP的特殊扩展机制和opcode缓存扩展也可以将opcode缓存于php共享内存中,从而可以让同一段代码的后续重复执行时跳过编译阶段直接运行,提高性能。
    这些加速器,并非真正提高了opcode的运行速度,而仅是通过分析opcode后并将它们重新排列已达到快速执行的目的
    1.APC:Alternative PHP Cache //遵循PHP License的开源框架,PHP opcode缓存加速器,目前的版本不适用于PHP 5.4。项目地:http://pecl.php.net/package/APC。
    2.eAcceleator //源于Turck MMCache,早期的版本包含了一个PHP encoder和PHP loader,目前encoder已经不在支持。项目地址, http://eaccelerator.net/。
    3.XCache  http://xcache. //快速而且稳定的PHP opcode缓存,经过严格测试且被大量用于生产环境。项目地址,http://xcache.lighttpd.net/
    4.Zend Optimlzer和Zend Guard Loader //Zend Optimizer并非一个opcode加速器,它是由Zend Technologies为PHP5.2及以前的版本提供的一个免费、闭源的PHP扩展,其能够运行由Zend Guard生成的加密的PHP代码或模糊代码。 而Zend Guard Loader则是专为PHP5.3提供的类似于Zend Optimizer功能的扩展。项目地址,http://www.zend.com/en/products/guard/runtime-decoders
    5.NuSphere PhpExpress //NuSphere的一款开源PHP加速器,它支持装载通过NuSphere PHP Encoder编码的PHP程序文件,并能够实现对常规PHP文件的执行加速。项目地址,http://www.nusphere.com/products/phpexpress.htm
PHP:脚本编程语言,嵌入到html中的嵌入式web程序开发语言
    无需编译,zend以后可以编译了,基于zend编译成opcode(二进制的字节码,重复运行,可省略编译环境)
    
3.php与http结合的方式
    CGI //通过cgi协议,不常见,传统模式,创建子进程完成后销毁,不建议
    FastCGI //可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)
    modules //模块方式,用的最多,把php编译成httpd的模块,当有人请求动态资源的时候,就不必启动一个php或者cgi进程来单独响应了
            //httpd直接利用该模块运行即可    
    
二、安装与配置LAMP        
http2.4与php-5.5.28的通信方式。
基于cgi通信:不建议
基于fastcgi 通信:安装配置脚复杂,这需要将PHP独立出来专门执行.php的代码。相较于模块安装响应速度快。 //php-fpm: 启动为服务进程
基于module 的通信:安装配置方便但速度较慢。
    prefork模式需要的模块:libphp5.so
    worker, event模式需要的模块:libphp5-zts.so
编译安装:如何实现
1)编译安装php-5.5

[[email protected] ~]# tar xf php-5.5.28.tar.gz
[[email protected] ~]# cd php-5.5.28
[[email protected] php-5.5.28]# yum groupinstall Development tools Server Platform Development -y
[[email protected] php-5.5.28]# yum -y groupinstall Desktop Platform Development
[[email protected] php-5.5.28]# yum -y install bzip2-devel libmcrypt-devel  libxml2-devel openssl-devel
[[email protected] php-5.5.28]# ./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-libxml-dir=/usr --enable-xml  --enable-sockets --with-apxs2=/usr/local/apache/bin/apxs --with-mcrypt  --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2  --enable-maintainer-zts
[[email protected] php-5.5.28]# make && make install

1、为了支持apache的worker或event这两个MPM,编译时使用了--enable-maintainer-zts选项。
2、如果使用PHP5.3以上版本,为了链接别处MySQL数据库,可以指定mysqlnd,这样在本机就不需要先安装MySQL或MySQL开发包了。mysqlnd从php 5.3开始可用,可以编译时绑定到它(而不用和具体的MySQL客户端库绑定形成依赖),但从PHP 5.4开始它就是默认设置了。
# ./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd

2)配置httpd

[[email protected] php-5.5.28]# vim /etc/httpd/httpd.conf
LoadModule php5_module        modules/libphp5.so   //查看此模块是否加载
#在文件内添加下面的内容,位置最好在AddType下面的行:
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps
#在此行中添加index.php
DirectoryIndex index.php index.html


3)测试环境

[[email protected] php-5.5.28]# cd /usr/local/apache/htdocs/
[[email protected] htdocs]# vim index.php
<?php
      $link = mysql_connect('192.168.1.8','root','redhat');
      if ($link)
        echo "Success...";
      else
        echo "Failure...";
      mysql_close();
?>


4)mysql授权
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.%.%' IDENTIFIED BY 'redhat' ;
Query OK, 0 rows affected (0.20 sec)

浏览器登录查看是否连接成功

yum安装实现:Centos7
yum install php mariadb httpd
systemctl reload httpd
    
1.测试php:    
cd /var/www/html;vim index.php
<?php
    phpinfo();
?>    

2.测试mariadb和php
CentOS6:httpd,php,mysql-server,php-mysql
CentOS7:httpd,php,mariadb-server,php-mysql

mysql -uroot -h127.0.0.1 -p //初始密码为空
支持SQL语句对数据管理
DDL,DML,DCL
    DDL:create,alter,drop,show
    DML:instert,delete,select,update
授权能够远程的链接用户
    granto all privileges on db_name.table_name to [email protected] identified by "passwd"
    grant all on testdb.* to [email protected]'192.168.4.%' identified by 'testuser';
    flush privileges
vim /etc/my.cnf
    [mysqld]
    skip_nameresolve on
//关闭mysql反解,ip为用户名
systemctl restart mariadb
//假如没有ok的话, yum install php-mysql
serivice httpd reload
测试页面
<?php
    $conn = mysql_connect('192.168.4.100','testuser','testuser');
    if ($conn)
        echo "OK";
    else
        echo "False"
?>

3.安装wordpress

yum install wordpress -y
[[email protected] html]# ln -sv /usr/share/wordpress/ wordpress
[[email protected] html]# cp /usr/share/wordpress/wp-config-sample.php /etc/wordpress/wp-config.php 
预先在数据库中创建一个库给wordpress用。
cp wp-config-sample.conf.php wp-config.php
Mariadb:grant all on wordpress.* to [email protected]'127.0.0.1' identified by 'wordpp'
vim wp-config.php
修改对应信息


三、深入理解LAMP
服务器自身存储有error_page: /usr/share/httpd/error/
    :错误页面可以自定义
静态资源处理模型://如图    
技术分享图片    
    静态:
client-->内核空间-->用户空间[httpd进程]-->内核空间-->加载磁盘文件--->[内核空间]--->用户空间[httpd进程封装]->[内核空间]-->发送给用户
Send file机制://用的不多,在内核中直接构建响应。
    client--httpd请求-->内核空间-->加载磁盘文件[封装]-->发送给client
    
prefork或者worker模型:    
    进程睡眠:不可中断睡眠+可中断睡眠
    一次IO:数据从磁盘到用户空间,在此阶段进程处于阻塞状态[睡眠],IO结束,则唤醒进程
    一个进程进来后:加载文件的时候,该进程处于阻塞,其他请求是进不来的
        在一个进程处理多个请求的http模型的时候
    
    event就是这种机制:
    基于callback机制,该进程在等待IO完成的过程中,也可以接受其他请求,内核在资源加载完成后,callback该进程,让进程完成后续操作
        :该进程复制内核空间已经加载的请求所需数据,然后复制到用户空间的内存中
    
    水平触发:数据加载完毕,我通知你来复制,没有回应,就再次通知
    边缘触发:只通知一次
        
IO:
    阻塞IO和非阻塞IO
    同步IO和异步IO
        AIO:异步IO //内核加载好数据后,直接复制数据到进程可访问内存中,告诉进程ok了
    
    IO过程分两段:
        1.进程向内核发起调用
        2.内核从disk加载然后送到进程可访问内存,然后告诉进程ok了
    用户发起调用就有了两种模式:
        阻塞:我就一直等着,加载完成,再继续下一个流程
        非阻塞:基于事件驱动机制,基于epoll()调用实现event driven,
    
动态资源:
    如果php和mysql在同一个主机上,基于unix socket会更快//让mysql监听unix socket上
    必须监听在127.0.0.1或者localhost主机名才能基于unix socket    
mysql对用户名和主机名(ip)特别敏感://ip和主机名必须对应
    
php和http结合主要适合modules,cgi用的很少//注:moudle和fcgi不能共存

cgi:http进程接收到一个动态网页请求,于是fork一个子进程,运行php引擎,加载并执行php脚本,最后返回结果给主进程
    假如有200个请求,http就需要创建200个子进程,而且cgi不能被复用
    每次都需要创建子进程,然后销毁子进程
    基于cgi只能在同一个主机上,mysql只能在本地
fastcgi:把php运行为一个服务,监听在一个套接字上,这个服务有主控进程,可以根据需要创建空闲进程,不再需要httpd自己创建
    php服务直接处理和响应http请求,以及回复,类似于prefork模型
    php=http===>httpd===fastcgi===>php 服务器
    监听在套接字,可以跨主机使用
    yum install php-fpm
client---[http]--->httpd---[fastcgi]-->php 服务器---[mysql]--->mysqld
    http扮演fastcgi的客户端[加载mod_proxy_fcgi],帮忙请求php服务器,
    php扮演mysql的客户端,请求mysql_s中的数据 //php中有专门链接mysql的库,调用该库即可
    http2.2默认没有fcgi模块,不能使用fcgi
    http2.4,mode_proxy_fcgi
    
CentOS7:
    1.[Modules]httpd,php,php-mysql,mariadb-server
    2.[FastCGI]httpd,php-fpm,php-mysql,mariadb-server  
    //这两种不能同时使用
CentOS6:
    httpd,php,php-mysql,mysql-server //fast-cgi需要编译安装
    
PHP:脚本语言解释器
    配置文件:/etc/php.ini,/etc/php.d/*.ini
    配置文件在php解释器启动时被读取,因此对配置文件的修改如何生效?
        Modules:重启httpd服务
        FastCGi:重启php-fpm服务
        CGI:会自动修改,http单独启动该进程
rpm -ql php-common //提供php.ini配置文件
/etc/php.ini
    [foo]:开头
    directive = value
    注释符号:
        # 纯粹的注释信息
        ; 可启用的directory
php.ini核心配置选项文档:php.net/manual/zh/ini.core.php        
php.ini配置选项列表:php.net/manual/zh/ini.list.php    
    date.timezone = Asia/Shanghai
systemctl start httpd    
    
Mariadb(mysql)
数据模型:层次模型,网状模型,关系模型
关系模型:
    二维关系:
        表:row,column
        索引:index
        视图:view //保存的是一个语句
    SQL接口:Strunctured Query Language
        类似于OS的shell接口;也提供了编程能力
        
        ANSI:SQL标准,SQL-86,SQL-89,SQL-92,SQL-99,SQL-03
            例如SQL-86有中级,低级和高级,一般只能达到中级
        DDL:data define language
            create,alter,drop
        DML:date mantapulating language //操作
            insert,delete,update,select
        DCL:date control language 是数据库控制功能。是用来设置或更改数据库用户或角色权限的语句
            grant,deny,revoke
                    
编程接口:选择、循环        
SQL代码:
    存储过程:storge
    存储函数:function
    触发器:trigger
    事件调度器:event scheduler
    
附件一.fcgi的实现
fastcgi将PHP从httpd中独立出来,httpd用来处理用户的请求,遇到PHP代码就将其转到后方的php-fpm服务器,释放了httpd服务器的压力(专注于处理静态的内容),http作为反向代理,需要安装proxy-fcgi模块。然而生产环境中有专门做方向代理的服务器有HA-proxy和nginx,这两种的处理请求方面的速度远远大于httpd
本实验只是学习下httpd是如何工作于反向代理的模式,httpd-2.2所带的模块没有proxy-fcgi,需要下载proxy-fcgi源码编译安装,而httpd-2.4就直接安装的有此模块,此实验就是基于httpd-2.4的。
实验环境:CentOS7,Mariadb-server,http2.4.6,
yum install mariadb-server php httpd php-mysql php-fpm php-xcache//php -m验证意境加载的模块
=====================================================
1.配置httpd

cat /etc/httpd/conf.modules.d/00-proxy.conf  //已经配置
    LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
    LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
/etc/httpd/conf.modules.d/00-mpm.conf  //修改默认http工作模型
cat 01-cgi.conf //
   LoadModule cgid_module modules/mod_cgid.so
   LoadModule cgid_module modules/mod_cgid.so
   LoadModule cgi_module modules/mod_cgi.so
vim httpd.conf 
    #在文件内添加下面的内容,位置最好在AddType下面的行:
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps

2.配置
[[email protected] httpd]# cp /etc/php-fpm.conf{,.bak}
[[email protected] httpd]# vim /etc/php-fpm.d/www.conf //主配置文件为/etc/php-fpm.conf
#配置fpm的相关选项为你所需要的值
m.max_children = 50         #最大子进程数
pm.start_servers = 5        #开机预启动子进程数
pm.min_spare_servers = 2    #最小空闲子进程数
pm.max_spare_servers = 8    #最大空闲子进程数
启动php-fpm,查看是否正常启动:
[[email protected] etc]# service php-fpm start
[[email protected] etc]# ss -tunl |grep 9000
tcp    LISTEN     0      128            127.0.0.1:9000    
3.配置index.php
<h1>
<?php
  phpinfo();
?>
4.配置Xcache
[[email protected] html]# vim /etc/php.d/xcache.ini
extension = xcache.so //也可以使用绝对路径,yum安装的意境配置好

status界面查看Xcache是否启动 //php -m |grep -i xcache
httd的工作模型:prefork,worker,event  //httpd -M |grep 看当前工作模型

四、Xcache        
1.Xcache的实现的加速php
yum install php-xcache
xcache-admin 类似于phpmyadmin
配置文件;/etc/php.d/xcache.ini
xcache是在内存中缓存的
vim xcache.ini //不用修改
    xcache.size  =               60M 缓存大小
    xcache.slots =                8K //每个槽大小
    xcache.ttl   =                 0
systemctl restart php-fpm.service
测试页:phpinfo(); 会显示xcache的信息

xcache和module的php结合
xcache和php-fpm结合

关闭xcache,移走配置文件,重启服务即可
xcache在centos7上效果不是很明显
    
2.编译安装xcache
其他都是rpm包安装的
1.yum install php-devel
    tar xf xcache-3.2.0
    cd xcache-3.2.0
    phpize //生成config文件,因为是php的组件,所以php告诉其当前php的环境是什么
            //配置php编译环境
    ./confiure --enable-xcache -with-php-config=/usr/bin/php-config //后面的可以不给
    make && make install
        /usr/lib64/modules/  安装到了目录
    cp 源码包/xcache.ini /etc/php.d/xcache.ini
    systemctl restart httpd //因为默认php是编译到http中的
编译安装的加速效果比rpm包要好
    
最多并发500已经达到上限了

ab -n 1000 -c 100 http://192.168.4.100/pmd/index.php //总共1000个,一次100个
ab命令结果解释
Concurrency Level:      100        //并行级别,同时100个请求
Time taken for tests:   19.233 seconds  //
Complete requests:      1000        //在这100个并发请求上,请求了1000次
Failed requests:        0
Total transferred:      8336614 bytes
HTML transferred:       7540000 bytes //整个场景中的HTML内容传输量
Requests per second:    51.99 [#/sec] (mean) //每s处理的请求数量,平均值
Time per request:       1923.346 [ms] (mean) //每个请求需要的时间,1923/100是单个请求所需时间,mean:平均值
Time per request:       19.233 [ms] (mean, across all concurrent requests)
Transfer rate:          423.28 [Kbytes/sec] received
Connection Times (ms)
              min  mean[+/-sd] median   max        
Connect:        0    5  60.6      0    1328        //建立链接
Processing:    53 1888 2110.5   1090    9474    //处理过程
Waiting:       40 1823 2044.5   1052    8825    //等待c接受请求
Total:         75 1894 2112.6   1091    9476
Percentage of the requests served within a certain time (ms)
50%   1093
66%   1247
75%   1373
80%   1493
90%   4061
95%   4398
98%   5608
99%   7368
100%   7785 (longest request)

整个场景中所有请求的响应情况。在场景中每个请求都有一个响应时间,
其中50%的用户响应时间小于1093 毫秒,60% 的用户响应时间小于1247 毫秒,
最大的响应时间小于7785 毫秒
由于对于并发请求,cpu实际上并不是同时处理的,而是按照每个请求获得的时间片逐个轮转处理的,
所以基本上第一个Time per request时间约等于第二个Time per request时间乘以并发请求数
    
    测试尽量在远程主机上测试
    c----http_s //c发送到s
        http_s------响应 //获取资源,运行完毕,构建响应报文
            https_s----发往c //s构建后发送到c
    第一阶段:慢:服务器负载较大,带宽
    第二阶段:s自身处理速度慢
    第三阶段:带宽有限,c接受能力有限

注:phpmyadmin假如出现,不能打开/var/lib/php/sesion等信息
    1.创建目录
    2.chown -R apache.apache

五、php-fpm
LAMP:
    httpd+php:
        module:  //php包
        cgi
        fcgi:php工作为一个服务 //php-fpm包    
    php-fpm:
        有主进程,接受请求后,生成子进程[事先也有创建的],响应用户请求
        类似于httpd的prefork模型
    yum list all |grep php //查看mpm模块
1.php-fpm事先
yum install php-fpm
rpm -ql php-fpm
    /etc/php-fpm.conf
    /etc/php-fpm.d/www.conf        
    /etc/sysconfig/php-fpm    //脚本配置文件
    /usr/lib/systemd/system/php-fpm.service
CentOS6:
    PHP-5.3.2之前默认不支持fpm机制,需要自行打补丁,并编译安装
    http-2.2:默认也不支持fcgi协议,需要自行编译此模块
    解决方案:编译安装httpd-2.4[自带了fcgi协议],php-5.3.3之后的版本,自带了fpm
CentOS7:
    httpd-2.4:默认编译支持了fcgi模块,
    同时提供了php-fpm包
        
    配置文件:
        /etc/php-fpm.conf,/etc/php-fpm.d/*.conf 用于配置php进程,专用于fpm
        /etc/php.ini //php环境主配置文件
    /etc/php-fpm.conf
        Pool Defination /定义php链接池的位置
如图三:
技术分享图片    
httpd根据请求的后缀,例如.php ,将该请求转发到php引擎,但是此时php依旧不是模块
    静态资源:httpd自己去取并封装返回请求
    动态:调用自己的fpm代理模块
httpd使用fcgi的一个反代理模块,把用户请求给反向代理,发送给fpm进程
    分析该请求[url],先加载程序文件,加载后,使用子进程运行,子进程运行完后,返回给fcgi模块
    主进程:接受fcgi模块的请求,加载程序文件
    子进程:运行该脚本,发送给fcgi,封装fcgi协议
fpm和httpd可以不在同一个主机上
    1.fpm需要监听在一个能够与httpd通信的地址上
    2.动态资源应该部署在php主机上,静态放在http主机上
    
2.//从httpd-php            

    1.配置vim /etc/php-fpm.d/www.conf        
        listen = 127.0.0.1:9000
        listen.backlog = -1  //等待队列的长度,-1无限制
        listen.allowed_clients = 127.0.0.1 //允许的主机
    
        pm = static/dynamic 
            static:固定数量的子进程,pm.max_children
            dynamic:子进程以动态模式工作,下面4个都包括
        
        pm.max_children  //最大并发连接数
        pm.start_servers    //启动
        pm.min_spare_servers
        pm.max_spare_servers
        
        pm.max_requests = 500 //最多处理请求数
        
        注:一般max_spare_server大于start_children
    2.systemctl start php-fpm    
        systemctl status php-fpm
        yum install httpd
        
        httpd -M |grep fcgi //查看fcgi模块是否装载
        cat /etc/httpd/conf.modules.d/00-proxy.conf 
            LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
    3.vim /etc/httpd/conf.d/fcgi.conf //创建配置文件
        代理分为:正向和反向
        ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/var/www/html/$1
        ^/ :引用的是/var/www/html :指定的httpd的根目录
        $1  :引用的是(.*.php) 的内容
            例如www.mt.com/admin/index.php  ,$1引用的是admin/index.php
        
        =================================================
        ProxyRequests off
        ProxyPassMatch ^/(*.php)$ fcgi://127.0.0.1:9000/var/www/html/$1
        ===========================================
        httpd -t
        systemctl restart httpd
        
    4.创建测试页:
        vim index.php
            <?php
                phpinfo();
            ?>
        http://192.168.4.100/index.php //需要加上index.php
        Server API    FPM/FastCGI
        vim /etc/httpd/conf.d/fcgi.conf 
            DirectoryIndex index.php    //装载默认主页
            ProxyRequests off        //关闭正向代理
            ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1
                            //发送*.php主页到
        http://192.168.4.100/  //将能够使用
    5.虚拟主机
        取消DocumentRoot
        mv cgi.conf vhosts.conf     
        vim vhosts.conf
            DirectoryIndex index.php
            <VirtualHost *:80>
                ServerName www.b.net
                DocumentRoot /www/b.net/htdocs/
                ProxyRequests off
                ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1
                    <Directory "/apps/vhosts/b.net">
                        Options None
                        AllowOverride None
                        Require all granted
                    </Directory>
            </VirtualHost>

            //创建多个vhosts    
3.从php(fpm)-mysql            
    yum install mariadb php-mysql
    vim my.cnf
        skip_name_resolve = ON
    授权一个用户:wolf ,wolf
    测试页:
        <h1> www.test.com </h1>
        <?php
            $conn  = mysql_connect('192.168.4.100','wolf','wolf');
            if ($conn)
                echo "OK";
            else
                echo "failuser";
        ?>
        注:php必须以分号为行尾,而且
    systemctl reload php-fpm
    systemctl stop mariadb55
    再次测试
    
数据模型:http://www.cnblogs.com/yue-blog/p/5989191.html
逻辑数据模型:http://www.cnblogs.com/yue-blog/p/6010527.html
参考博客:http://blog.51cto.com/cuchadanfan/1688813

以上是关于LAMP详解的主要内容,如果未能解决你的问题,请参考以下文章

图文详解阿里云下lamp+discuz搭建实例

ansible roles详解+搭建LAMP架构

详解LAMP源码编译安装

LAMP PHP 详解

LAMP的基本配置

LAMP详解