lamp的动静分离部署
一、lamp分离部署工作图
二、LAMP的安装与配置
1、环境准备
2、对 PHP 服务器进行部署
#以下为安装PHP及其依赖
[root@php ~ ]# tar zxf libmcrypt-2.5..tar.gz -C /usr/src
[root@php ~]# tar zxf php-5.6..tar.gz -C /usr/src
[root@php ~]# yum -y install libxml2-devel openssl-devel bzip2-devel
[root@php ~]# cd /usr/src/libmcrypt-2.5.
[root@php libmcrypt-2.5.]# ./configure --prefix=/usr/local/libmcrypt && make && make install
[root@php libmcrypt-2.5.]# cd ../php-5.6./
[root@php php-5.6.]# ./configure --prefix=/usr/local/php5. --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-fpm --enable-sockets -
上面编译安装PHP的选项作用解释如下:
—prefix=/usr/local/php5.6 #安装位置
—with-mysql=mysqlnd #支持 mysql
—with-pdo-mysql=mysqlnd #支持 pdo 模块
—with-mysqli=mysqlnd #支持 mysqli 模块
# 上面的三选项的作用:数据库与 php 不在一个服务器上,指定此种方式,安装数据库连接驱动。
—with-openssl #支持 openssl 模块
—enable-fpm #支持 fpm 模式
—enable-sockets #启用 socket 支持
—enable-sysvshm #启用系统共享内存支持
—enable-mbstring #多字节字串、像我们的中文就是多字节字串
—with-freetype-dir #支持 freetype、就要装 freetype-devel、跟字体相关的、字体解析工具
—with-jpeg-dir
—with-png-dir
上面的二选项的作用:处理 jpeg、png 图片的、php 可以动态生成 jpeg 图片
—with-zlib #是个压缩库、在互联网传输时用来压缩传输的
—with-libxml-dir=/usr #这个 libxml 是用来解析 xml 的、指定/usr 下
—enable-xml #支持 xml 的
—with-mhash #支持 mhash
—with-mcrypt=/usr/local/libmcrypt #libmcrypt-devel 这个程序包所指定的
—with-config-file-path=/etc #指定配置文件的存放路径的
—with-config-file-scan-dir=/etc/php.d #配置文件扫描路径
—with-bz2 #支持 BZip2
为了支持 apache 的 worker 或 event 这两个 MPM,编译时使用了—enable-maintainer-zts 选项。
#以下为调整PHP的配置文件及控制服务的启停
[root@php php-5.6.]# cp php.ini-production /etc/php.ini #复制源码中中提供的PHP配置文件
[root@php php-5.6.]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
#复制其服务控制脚本文件
[root@php php-5.6.]# chmod +x /etc/init.d/php-fpm #赋予执行权限
[root@php php-5.6.]# chkconfig --add php-fpm #添加为系统服务,以便支持systemctl管理
[root@php php-5.6.]# chkconfig php-fpm on #开启
#复制php-fpm提供的默认配置文件并编辑它
[root@php php-5.6.]# cp /usr/local/php5./etc/php-fpm.conf.default /usr/local/php5./etc/php-fpm.conf
[root@php php-5.6.]# vim /usr/local/php5./etc/php-fpm.conf
listen = 192.168.20.5: #监听地址是本机的IP9000端口
pm.max_children = #最大启动的进程数
pm.start_servers = #初始启动进程数
pm.min_spare_servers = #最小空闲进程
pm.max_spare_servers = #最大空闲进程
#修改完成后,保存退出即可
[root@php php-5.6.]# systemctl start php-fpm #启动PHP服务
[root@php php-5.6.]# netstat -anput | grep php-fpm #确认其9000端口以启动
[root@php ~]# mkdir -p /var/www/html #创建其网页存放目录,须和apache服务器的网页存放路径一样
[root@php ~]# firewall-cmd --permanent --add-port=/tcp #防火墙放行9000端口的流量
[root@php ~]# firewall-cmd --reload #重载以便生效
3、配置apache服务器(切换到apache服务器进行以下操作)
[root@apache ~]# cd /usr/local/http-2.4./conf/
[root@apache conf]# vim httpd.conf #编辑apache服务的主配置文件
# 启用以下两个模块(将下面两行前面的“#”号去掉即可)
# LoadModule proxy_module modules/mod_proxy.so
# LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
Include conf/extra/httpd-vhosts.conf #启用虚拟主机的配置文件
..............#省略部分内容
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
#定位到上面两行(注意,这两行一定是没有被注释的),然后写入下面两行配置,让apache可以识别php格式的页面 AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
<IfModule dir_module> #定位到该标签
DirectoryIndex index.php index.html #在index.html前添加index.php
</IfModule>
#至此保存退出即可
[root@apache conf]# vim extra/httpd-vhosts.conf #编辑虚拟主机配置文件 # 虚拟主机的配置文件如下
<VirtualHost *:>
ServerAdmin lv916551516@.com
DocumentRoot "/var/www/html"
ServerName www.test.com
ErrorLog "logs/test-error_log"
CustomLog "logs/test-access_log" common
ProxyRequests Off
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://192.168.20.5:9000/var/www/html/$1
<Directory "/var/www/html">
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
# 编辑完成后,保存退出
[root@apache conf]# mkdir -p /var/www/html/ #创建网页根目录
[root@apache conf]# echo this is a test file >> /var/www/html/index.html
[root@apache conf]# apachectl restart #重启apache服务
以上虚拟主机的配置文件解释如下:
ProxyRequests off #关闭正向代理
ProxyPassMatch #把以.php 结尾的文件请求发送到 php-fpm 进程,php-fpm 至少需要知道运行的目录和 URI,所以这里直接在 fcgi://192.168.20.5:9000 后指明了这两个参数,其它的参数的传递已经被 mod_proxy_fcgi.so 进行了封装,不需要手动指定。
特别注意的是,/var/www/html/需要与 中的 DocumentRoot 后的路径一致ProxyPassMatch #只有满足特定正则模式的内容才会匹配并执行此规则,这里的模式是,^/(..php(/.)?)$ ,从网站(虚拟主机
的根目录开始,匹配任何以 .php 结尾,或者在 .php 之后紧跟一个 / 再跟别的内容的路径。
^ (caret) 和 $ (dollar)标志要匹配的路径的开始和结束
( )括号里的内容可以用 $1 来表示,以方便后面引用它。
fcgi://192.168.20.5:9000 通过 mod_proxy_fcgi 来转发的代理,使用 fastCGI 协议,转到PHP-FPM 监听的端口。
/var/www/html #非常重要!必须与虚拟主机的路径匹配,且必须是对应 php 文件在操作系统中的绝对路径,否则会找不到文件。4、回到PHP服务器,测试LAMP环境
4、回到PHP服务器,测试LAMP环境
#编写以下两个网页文件
[root@php ~]# cat /var/www/html/index.php #用来显示PHP的版本信息
<?php
phpinfo();
?>
[root@php ~]# cat /var/www/html/test.php #用来测试连接数据库
<?php
$link=mysqli_connect('192.168.20.6','lvjz','pwd@123');
if($link) echo "恭喜你,数据库连接成功!!!"; else echo "connect shibai";
mysqli_close($link);
?
5、在MySQL服务器上添加用户,并赋予远程登录的权限
[root@localhost src]# mysql -uroot -p
Enter password: #验证数据库用户密码
mysql> create database bbs; #创建专用的数据库
Query OK, row affected (0.00 sec)
mysql> grant all on bbs.* to lvjz@192.168.20.5 identified by 'pwd@123'; #授权用户为lvjz
Query OK, rows affected (0.01 sec)
客户端访问web服务器的www.test.com 进行测试:
客户端访问web服务器的www.test.com/test.php 进行测试:
看到上面两个测试页说明 apache、php、mysql 之间可以协同工作了。
三、Web网站压力测试
网站性能压力测试是服务器网站性能调优过程中必不可缺少的一环。只有让服务器处在高压情况下,才能真正体现出软件、硬件等各种设置不当所暴露出的问题。
性能测试工具目前最常见的有以下几种:ab、http_load、webbench、siege。我比较习惯用apahce自带的ab工具。
ab 非常实用,它不仅可以对 apache 服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如 nginx、tomcat、IIS 等。
1、ab 的原理
ab 命令会创建多个并发访问线程,模拟多个访问者同时对某一 URL 地址进行访问。它的测试目标是基于 URL 的,因此,它既可以用来测试 apache 的负载压力,也可以测试 nginx、lighthttp、tomcat、IIS 等其它 Web 服务器的压力。
ab 命令对发出负载的计算机要求很低,它既不会占用很高 CPU,也不会占用很多内存。但却会给目标服务器造成巨大的负载,其原理类似 CC gong击。自己测试使用也需要注意,否则一次上太多的负载。可能造成目标服务器资源耗完,严重时甚至导致死机。
2、ab的安装
ab 的安装非常简单,如果是源码安装 apache 的话,那就更简单了。apache 安装完毕后 ab命令存放在 apache 安装目录的 bin 目录下。如下:
/usr/local/http2.4.23/bin/ab。
如果 apache 是通过 yum 的 RPM 包方式安装的话,ab 命令默认存放在/usr/bin 目录下。如下:which ab
注意:如果不想安装 apache 但是又想使用 ab 命令的话,我们可以直接安装 apache 的工具包 httpd-tools。如下:
yum -y install httpd-tools
查看 ab 是否安装成功,可以切换到上述目录下,使用 ab –V 命令进行检测。
[root@apache conf]# ab -V #好像报错了
ab: error while loading shared libraries: libssl.so.1.0.: cannot open shared object file: No such file or directory
[root@apache conf]# export LD_LIBRARY_PATH="/usr/local/openssl/lib/"
#执行该命令,设置环境变量即可
[root@apache conf]# ab -V
This is ApacheBench, Version 2.3 <$Revision: $>
.................... #省略部分内容
3、ab压力测试
[root@apache ~]# ab -c -n 127.0.0.1/index.html #对本机的静态网页进行测试
#-n:在测试会话中所执行的请求个数(即总请求数)。
#-c:一次产生的请求个数(即 并发用户数 )。 This is ApacheBench, Version 2.3 <$Revision: $>
Copyright Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 127.0.0.1 (be patient)
Completed requests
Completed requests
Completed requests
Completed requests
Completed requests
Completed requests
Completed requests
Completed requests
Completed requests
Completed requests
Finished requests Server Software: Apache/2.4.
Server Hostname: 127.0.0.1
Server Port: Document Path: /index.html #请求的资源
Document Length: bytes #HTTP 响应数据的正文长度 Concurrency Level: #并发个数(并发用户数)
Time taken for tests: 2.093 seconds #所有这些请求处理完成所花费的时间
Complete requests: #完成请求数
Failed requests: #失败的请求数
Total transferred: bytes
#表示所有请求的响应数据长度总和,包括每个 HTTP响应数据的头信息和正文数据的长度。
HTML transferred: bytes #网页文件的大小(就是去除响应头部后的大小)
Requests per second: 477.87 [#/sec] (mean)
#吞吐量,计算方式:请求的次数/用户等待时间(Complete requests/Time taken for tests)
Time per request: 1046.320 [ms] (mean)
#用户平均等待一个页面的时间,计算方式:用户等待时间/完成请求的次数(Complete requests/Concurrency Level)
Time per request: 2.093 [ms] (mean, across all concurrent requests)
#服务器处理一个请求花费的时间,计算方式:用户等待时间/完成请求的次数(Time taken for tests/Complete requests)
Transfer rate: 123.20 [Kbytes/sec] received
#用户请求的数据大小,计算方式:数据的总长度/用户等待时间(Total trnasferred/ Time taken for tests)
#这个统计很好的说明服务器的处理能力达到极限时,其出口宽带的需求量。(即平均每秒网络上的流量) Connection Times (ms)
min mean[+/-sd] median max
Connect: 401.1
Processing: 224.7
Waiting: 208.0
Total: 559.7 Percentage of the requests served within a certain time (ms)
%
%
%
%
%
%
%
%
% (longest request)
以上部分的数据用于描述每个请求处理时间的分布情况,比如以上测试,%的请求处理时间都不超过 834ms,这个处理时间是指前面的 Time per request,即对于单个用户而言,平均每个请求的处理时间。
4、ab 性能指标
在进行性能测试过程中有几个指标比较重要:
1、吞吐率(Requests per second)
服务器并发处理能力的量化描述,单位是 reqs/s,指的是在某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。
注:吞吐率是基于并发用户数的。这句话代表了两个含义:
吞吐率和并发用户数相关
不同的并发用户数下,吞吐率一般是不同的
计算公式:总请求数/处理完成这些请求数所花费的时间,即
Request per second=Complete requests/Time taken for tests
必须要说明的是,这个数值表示当前机器的整体性能,值越大越好。
2、并发连接数(The number of concurrent connections)
并发连接数指的是某个时刻服务器所接受的请求数目,简单的讲,就是一个会话。
3、并发用户数(Concurrency Level)
要注意区分这个概念和并发连接数之间的区别,一个用户可能同时会产生多个会话,也即连接数。
4、用户平均请求等待时间(Time per request)
计算公式:处理完成所有请求数所花费的时间/(总请求数/并发用户数),即:
Time per request=Time taken for tests/(Complete requests/Concurrency Level)
5、服务器平均请求等待时间(Time per request:across all concurrent requests)
计算公式:处理完成所有请求数所花费的时间/总请求数,即:
Time taken for/testsComplete requests
可以看到,它是吞吐率的倒数。
同时,它也等于用户平均请求等待时间/并发用户数,即
Time per request/Concurrency Level
四、部署PHP加速软件Xcache
Xcache是一款用来为PHP页面做缓存的工具。当然,实际工作环境中,是不会对PHP动态页面来做缓存的,意义不大(动态页面嘛,数据更新较快)又占用内存空间。这里只是为了表现出,PHP动态页面,也是可以做缓存的。
1、安装Xcache
在对PHP部署时,我提供了一个下载的链接,其中包含了这个xcache这个源码包,上传至PHP服务器即可。
[root@php ~]# tar zxf xcache-3.2..tar.gz -C /usr/src
[root@php ~]# cd /usr/src/xcache-3.2./
[root@php xcache-3.2.]# /usr/local/php5./bin/phpize #使用PHP中的phpize生成configure文件
Configuring for:
PHP Api Version:
Zend Module Api No:
Zend Extension Api No: [root@php xcache-3.2.]# ./configure --enable-xcache --enable-xcache-coverager --enable-xcache-optimizer --with-php-config=/usr/local/php5./bin/php-config && make && make install
#安装完成后,记住结尾提示的路径,以后会用到,如下:
/usr/local/php5./lib/php/extensions/no-debug-zts-
2、创建Xcache缓存文件
[root@php ~]# touch /tmp/xcache
[root@php ~]# chmod /tmp/xcache #保证有写入权限
3、复制 Xcache 后台管理程序到网站根目录
[root@php xcache-3.2.]# cp -r htdocs/ /var/www/html/xcache
4、配置PHP支持Xcache
[root@php xcache-3.2.]# vim /etc/php.ini #编辑PHP的主配置文件
#在文件末尾添加以下内容
[xcache-common]
extension = /usr/local/php5./lib/php/extensions/no-debug-zts-/xcache.so
#这就是指定安装Xcache后返回的目录
[xcache.admin]
xcache.admin.enable_auth = Off
[xcache]
xcache.shm_scheme ="mmap"
xcache.size=60M
xcache.count =
xcache.slots =8K
xcache.ttl=
xcache.gc_interval =
xcache.var_size=64M
xcache.var_count =
xcache.var_slots =8K
xcache.var_ttl=
xcache.var_maxttl=
xcache.var_gc_interval =
xcache.test =Off
xcache.readonly_protection = Off
xcache.mmap_path ="/tmp/xcache"
xcache.coredump_directory =""
xcache.cacher =On
xcache.stat=On
xcache.optimizer =Off
[xcache.coverager]
xcache.coverager =On
xcache.coveragedump_directory =""
[root@php xcache-3.2.]# systemctl restart php-fpm #重启PHP
[root@php xcache-3.2.]# vim /etc/exports #设置nfs /var/www/html/ 192.168.20.0/(rw,sec=sys,sync,no_root_squash)
5、回到apache服务器,挂载nfs共享目录,以便同步网页根目录下的文件
[root@apache ~]# showmount -e 192.168.20.5 #确认可以查看到PHP共享的目录
Export list for 192.168.20.5:
/var/www/html 192.168.20.0/
[root@apache ~]# mount -t nfs 192.168.20.5:/var/www/html/ /var/www/html/
#挂载
[root@apache ~]# df -hT /var/www/html/ #确认已挂载
文件系统 类型 容量 已用 可用 已用% 挂载点
192.168.20.5:/var/www/html nfs4 39G .0G 34G % /var/www/html
6、测试
访问www.test.com/xcache ,即可看到如下页面:
至此,Linux 下安装 php 加速软件 Xcache 完成。
7、对apache的动态页面进行测试
[root@apache ~]# export LD_LIBRARY_PATH="/usr/local/openssl/lib/"
[root@apache ~]# ab -c 100 -n 1000 http://192.168.20.4/index.php #进行第一次测试
......#省略部分内容
Time taken for tests: 4.292 seconds
......#省略部分内容
Requests per second: 232.99 [#/sec] (mean)
......#省略部分内容
[root@apache ~]# ab -c 100 -n 1000 http://192.168.20.4/index.php #进行第二次测试
......#省略部分内容
Time taken for tests: 1.631 seconds
......#省略部分内容
Requests per second: 613.29 [#/sec] (mean)
......#省略部分内
查看Xcache的命中率:
原文链接:https://mp.weixin.qq.com/s?__biz=MzA4Nzg5Nzc5OA==&mid=2651680843&idx=1&sn=364cd8931c2f4ea728970cb204f16866&chksm=8bcbb3e2bcbc3af473193150f5008043cbc53ee63c6fed51c3f329f0a54097afa9d8a55929e0&mpshare=1&scene=23&srcid=&sharer_sharetime=1574643521412&sharer_shareid=a3ddf867e44058df9979f019c4b7ebfd#rd
lamp的动静分离部署的更多相关文章
- LNMP下动静分离部署phpmyadmin软件包
LNMP环境肯定是先要配置好的.可以参考我之前的博客.那我们直接进行配置,我这里使用了三台机器进行动静分离部署,第一台负责nginx反向代理,第二台负责php-fpm应用程序以及mariadb的服务器 ...
- Nginx+lamp构建动静分离项目
一.nginx代理的概述 概述:nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个内部网络代理上网的代理 ...
- HAproxy+varnish动静分离部署wordpress
author:JevonWei 版权声明:原创作品 实验背景:将wordpress应用部署在后端服务器上,使用HAProxy做代理服务器,Varnish做缓存服务器,后端有四台web服务器,web1和 ...
- 19.Tomcat多实例部署及负载均衡、动静分离
Tomcat多实例部署及负载均衡.动静分离 目录 Tomcat多实例部署及负载均衡.动静分离 Tomcat多实例部署 安装jdk 设置jdk环境变量 安装tomcat 配置 tomcat 环境变量 修 ...
- keepalived高可用haproxy负载均衡varnish缓存wordpress的动静分离(第一次配置成功)
haproxy和nginx都可以作为七层和四层反代服务器对外提供服务,此文通过haproxy和keealived配置varnish搭建wordpress的动静分离站点 一.实验环境 五台虚拟机: ha ...
- LAMP环境搭建实现网站动静分离[转]
目录: 1.环境概述 2.动静分离拓扑图 3.各服务器功能规划 4.各服务器基础环境配置 5.httpd安装配置 6.php安装配置及启用opcache加速功能 7.mysql安装配置 8.wordp ...
- lamp分离部署
目录 lamp分离部署 1. 安装httpd 2. 安装mysql 3. 安装php 4. 配置apache并部署项目 4.1 启用代理模块 4.2 配置虚拟主机 4.3 部署PbootCMSPHP企 ...
- 10、nginx+uwsgi+django部署(动静分离)
10.1.说明: 1.介绍: 创建Django项目,可以通过 pyhon3 manage.py runserver 0.0.0.0:8080 & 命令更方便地调试程序,但是如果当一个项目完成了 ...
- Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?
今天想把之前的一个demo用Nginx把资源分离开来,在网上看了一天,整整弄了一天,硬是没弄出来. 要么全是同样的内容的,要么就是环境跟我这里不一样的.再加上对Nginx没接触过,给我都整哭了差点. ...
随机推荐
- drf 第一节
drf django-restframework ''' 1.接口:接口的概念.数据接口文档.接口规范(restful).Postman接口测试工具 2.drf请求生命周期 - CBV 3.drf的基 ...
- js 获取json对象的 键 和 值
直接上图 结果:
- 数据结构系列文章之队列 FIFO
转载自https://mp.weixin.qq.com/s/ILgdI7JUBsiATFICyyDQ9w Osprey 鱼鹰谈单片机 3月2日 预计阅读时间: 6 分钟 这里的 FIFO 是先入先出 ...
- setTimeout设置为0 为啥不能立马执行
setTimeout(function(){}, timer) 是指延时执行.第一个参数是回调函数,第二个参数是指延时多久执行回调函数. setTimeout(function(){console.l ...
- Codeforces Round #509 (Div. 2) F. Ray in the tube(思维)
题目链接:http://codeforces.com/contest/1041/problem/F 题意:给出一根无限长的管子,在二维坐标上表示为y1 <= y <= y2,其中 y1 上 ...
- Codeforces Round #586 (Div. 1 + Div. 2) C. Substring Game in the Lesson
链接: https://codeforces.com/contest/1220/problem/C 题意: Mike and Ann are sitting in the classroom. The ...
- Unrecognized SSL message, plaintext connection? 将https 换为http 即可
请求链接:https://59********* 升级后的项目地址有https换为了http ,出现这个错误,改为http请求即可
- my_note
1.C# $ 内插字符串 Console.WriteLine($"The value of pi is {Math.PI}"); 替代string.format 2. switch ...
- DockerAPI版本不匹配的问题
1.问题描述 在执行docker指令的时候显示client和server的API版本不匹配,如下: 说明:在这里server API的版本号比client API版本号低,因此不能有效实现cilent ...
- Dean and Schedule (URAL 2026)
Problem A new academic year approaches, and the dean must make a schedule of classes for first-year ...