一、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
1
2
3
4
5
6
7
|
[root@example.com ~]
# tar xf php-5.5.28.tar.gz
[root@example.com ~]
# cd php-5.5.28
[root@example.com php-5.5.28]
# yum groupinstall Development tools Server Platform Development -y
[root@example.com php-5.5.28]
# yum -y groupinstall Desktop Platform Development
[root@example.com php-5.5.28]
# yum -y install bzip2-devel libmcrypt-devel libxml2-devel openssl-devel
[root@example.com 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
[root@example.com 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
1
2
3
4
5
6
7
|
[root@example.com 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)测试环境
1
2
3
4
5
6
7
8
9
10
|
[root@example.com php-5.5.28]
# cd /usr/local/apache/htdocs/
[root@example.com 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 username@host identified by "passwd"
grant all on testdb.* to testuser@'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
1
2
3
4
5
6
7
8
|
yum
install
wordpress -y
[root@node103 html]
# ln -sv /usr/share/wordpress/ wordpress
[root@node103 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 wordpp@
'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
1
2
3
4
5
6
7
8
9
10
11
12
|
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.配置
[root@node112 httpd]# cp /etc/php-fpm.conf{,.bak}
[root@node112 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,查看是否正常启动:
[root@example.com etc]# service php-fpm start
[root@example.com etc]# ss -tunl |grep 9000
tcp LISTEN 0 128 127.0.0.1:9000
3.配置index.php
<h1>
<?php
phpinfo();
?>
4.配置Xcache
[root@node112 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已经达到上限了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
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
本文转自MT_IT51CTO博客,原文链接:http://blog.51cto.com/hmtk520/2063425,如需转载请自行联系原作者