基于centos 7部署LNMP动静分离以及部署Discuz论坛

博文结构
php的概念
部署lnmp
压力测试
部署
Discuz论坛php

一.php的工做模式

  • 三种工做模式
CGI模式:在这种模式下运行PHP,性能不是很好;
apache模块:在这种模式下运行PHP,在LAMP平台部署及应用 就是使用的这种模式,使用apache调用php完成工做;
FastCGI模式:在这种模式下运行PHP,PHP就是一处独立的进程,全部的PHP子进程都由PHP的一个叫作php-fpm的组件负责管理;
  • FastCGI 工做机制

首选客户端发起请求,请求通常分为两种:一种是静态请求,能够直接由Apache响应直接返回客户端所需资源;另外一种动态请求,其中包含PHP或Perl这种脚本解释型语言,则由Apache服务器经过fastcgi协议调用php服务器执行并返回给Apache,由Apache向客户端返回客户端所需资源,若是这个过程当中涉及到对数据的操做,此时php服务器还会经过mysql协议调用mysql服务器。如图:html

基于centos 7部署LNMP动静分离以及部署Discuz论坛

二.部署lnmp动静分离

  • 案例环境以下:

1台httpd服务器:192.168.148.129
1台php服务器:192.168.148.130
1台mysql服务器:192.168.148.131mysql

[root@localhost ~]# yum -y install libxml2-devel lzip2-devel libcurl-devel  libmcrypt-devel openssl-devel bzip2-devel
  • 安装libmcrypt
[root@localhost ~]# tar zxf libmcrypt-2.5.7.tar.gz 
[root@localhost ~]# cd libmcrypt-2.5.7/
[root@localhost libmcrypt-2.5.7]# ./configure --prefix=/usr/local/libmcrypt && make && make install
  • 编译安装 php
[root@localhost ~]# tar zxf php-5.6.27.tar.gz 
[root@localhost ~]# cd php-5.6.27/
[root@localhost php-5.6.27]# /configure --prefix=/usr/local/php5.6 --with-mysql=mysqlnd  \
> --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-fpm --enable-sockets \
> --enable-sysvshm --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib \
> --with-libxml-dir=/usr --enable-xml --with-mhash --with-mcrypt=/usr/local/libmcrypt \
> --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d \
> --with-bz2 --enable-maintainer-zts && make && make install

(安装过程在15分钟左右)sql

  • 相关选项的解释
--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 选项 
若是使用 PHP5.3 以上版本,为了连接 MySQL 数据库,能够指定 mysqlnd,这样在本机就不 须要先安装 MySQL 或 MySQL 开发包了。mysqlnd 从 php 5.3 开始可用,能够编译时绑定到它 (而不用和具体的 MySQL 客户端库绑定造成依赖),但从 PHP 5.4 开始它就是默认设置了。 3
  • 提供 php 配置文件

[root@localhost php-5.6.27]# cp php.ini-production /etc/php.ini数据库

  • 为 php-fpm 提供脚本
[root@localhost php-5.6.27]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@localhost php-5.6.27]# chmod +x /etc/init.d/php-fpm 
[root@localhost php-5.6.27]# chkconfig --add php-fpm
[root@localhost php-5.6.27]# chkconfig php-fpm on
[root@localhost php-5.6.27]# cp /usr/local/php5.6/etc/php-fpm.conf.default /usr/local/php5.6/etc/php-fpm.conf
  • 提供 php-fpm 配置文件并编辑
[root@localhost php-5.6.27]# vim /usr/local/php5.6/etc/php-fpm.conf
修改内容以下: 
pid = run/php-fpm.pid 
listen = 192.168.31.141:9000    \\本地ip地址(千万不能用127.0.0.1)
pm.max_children = 50 
pm.start_servers = 5 
pm.min_spare_servers = 5 
pm.max_spare_servers = 35
  • 启动 php-fpm 服务
[root@localhost php-5.6.27]# service php-fpm start
Starting php-fpm  done
[root@localhost php-5.6.27]# netstat -anpt | grep php-fpm
tcp        0      0 192.168.148.130:9000    0.0.0.0:*               LISTEN      130988/php-fpm: mas
  • 关闭防火墙或者输入如下命令:
[root@phpserver ~]# firewall-cmd --permanent --add-port=9000/tcp success [root@phpserver ~]# firewall-cmd --reload Success
  • 在该主机上新建虚拟主机目录用于存放网页文件

[root@localhost php-5.6.27]# mkdir -p /var/www/benetapache

配置 apache(切换到 apache 主机上操做) vim

在 Apache2.4 之后已经专门有一个模块针对 FastCGI 的实现,此模块为 mod_proxy_fcgi.so, 它实际上是做为 mod_proxy.so 模块的扩充,所以,这两个模块都要加载 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
  • 把前面#去掉

[root@localhost ~]# vim /usr/local/http-2.4.23/conf/httpd.conf centos

基于centos 7部署LNMP动静分离以及部署Discuz论坛

  • 创建一个目录做为虚拟主机的家目录

[root@localhost ~]# mkdir -p /var/www/benet

  • 编辑主配置文件 httpd.conf,开启虚拟主机

基于centos 7部署LNMP动静分离以及部署Discuz论坛

  • 同时定位 AddType;添加让 apache 能识别 php 格式的页面
    AddType application/x-httpd-php .php
    基于centos 7部署LNMP动静分离以及部署Discuz论坛

  • 而且定位至 DirectoryIndex:支持 php 格式的主页 (在它的中间加index.php)
    基于centos 7部署LNMP动静分离以及部署Discuz论坛

  • 配置虚拟主机支持使用 fcgi (把原有的删了添加)
[root@localhost ~]# vim /usr/local/http-2.4.23/conf/extra/httpd-vhosts.conf 
<VirtualHost *:80>
    ServerAdmin admin@admin.com
    DocumentRoot "/var/www/benet"
    ServerName www.benet.com
    ServerAlias www.benet.com
    ErrorLog "logs/benet-error_log"
    CustomLog "logs/benet-access_log" common
    ProxyRequests Off                                         //关闭正向代理
        ProxyPassMatch  ^/(.*\.php(/.*)?)$  fcgi://192.168.148.130:9000/var/www/benet/$1    \\写php的IP地址
<Directory "/var/www/benet">        
 Options  FollowSymLinks          //禁止目录遍历  
 AllowOverride None        //容许请求为空
 Require all granted                 //容许全部客户端访问
</Directory>
</VirtualHost>
[root@localhost ~]# apachectl -t
Syntax OK
[root@localhost ~]# apachectl restart
//建立虚拟目录以后,重启httpd服务
ProxyPassMatch  ^/(.*\.php(/.*)?)$  fcgi://192.168.1.3:9000/var/www/benet/$1                  
//把以.php 结尾的文件请求发送到 php-fpm 进程,php-fpm 至少须要知道运 行的目录和 URI,因此这里直接在 fcgi://192.168.1.3:9000 后指明了这两个参数,其它的参数的传递已经被 mod_proxy_fcgi.so 进行了封装,不须要手动指定。 特别注意的是,IP地址后面的目录路径须要与<VirtualHost> 中的 DocumentRoot 后的路径一致 。ProxyPassMatch 只有知足特定正则模式的内容才会匹配并执行此规则,这里的模式是,^/(.*\.php(/.*)?)$ 从网站(虚拟主机<VirtualHost> 的根目录开始,匹配任何以 .php 结尾,或者在 .php 以后 紧跟一个 / 再跟别的内容的路径。 ^ (caret) 和 $ (dollar)标志要匹配的路径的开始和结束 ( )括号里的内容能够用 $1 来表示,以方便后面引用它。 fcgi:// 192.168.1.3:9000 经过 mod_proxy_fcgi 来转发的代理,使用 fastCGI 协议,转到 PHP-FPM 监听的端口。 /path/to/your/documentroot/ 很是重要!必须与虚拟主机的路径匹配,且必须是对应 php 文件在操做系统中的绝对路径。 不然会找不到文件。 
$1 能够从原始请求扩展成整个请求路径的变量,这里指代前面( ) 里面匹配的那个路径(uri)
  • 在php服务器上建立测试网页
[root@localhost php-5.6.27]# vim /var/www/benet/index.php
<?php
phpinfo(); 
?>
  • 用客户机访问apache的ip

基于centos 7部署LNMP动静分离以及部署Discuz论坛

[root@localhost ~]# vim a.sh
[root@localhost ~]# chmod a+x a.sh 
[root@localhost ~]# sh a.sh 
Starting MySQL. SUCCESS! 
mysql: [Warning] Using a password on the command line interface can be insecure.
\\这是警告正常现象
  • 测试 LAMP 环境

  • 在 mysql 主机上建立用于 php 服务器链接的 mysql 帐户
[root@localhost ~]# mysql -u root -p123
mysql> grant all on *.* to aaa@'192.168.148.%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)
  • 在php服务器填写测试脚本
[root@localhost php-5.6.27]# vim /var/www/benet/test1.php
<?php
$link=mysql_connect('192.168.148.131','aaa','123456');
if($link) echo "恭喜你,数据库链接成功!!!"; else echo "connect shibai";
mysql_close($link);
?>
  • 验证

基于centos 7部署LNMP动静分离以及部署Discuz论坛

看到上面两个测试页说明 apache、php、mysql 之间能够协同工做了。

压力测试

网站性能压力测试是服务器网站性能调优过程当中必不可缺乏的一环。只有让服务器处在高压 状况下,才能真正体现出软件、硬件等各类设置不当所暴露出的问题。

ab 是 apache 自带的压力测试工具。ab 很是实用,它不只能够对 apache 服务器进行网站访 问压力测试,也能够对或其它类型的服务器进行压力测试。好比 nginx、tomcat、IIS 等。
下面咱们开始介绍有关 ab 命令的使用:

1.ab 的原理
2.ab 的安装
3.ab 参数说明
4.ab 性能指标
5.ab 实际使用
6.测试 nginx 性能

1)ab 的原理 ab 是 apachebench 命令的缩写。 ab 的原理:ab 命令会建立多个并发访问线程,模拟多个访问者同时对某一 URL 地址进行访 问。它的测试目标是基于 URL 的,所以,它既能够用来测试 apache 的负载压力,也能够测 试 nginx、lighthttp、tomcat、IIS 等其它 Web 服务器的压力。 ab 命令对发出负载的计算机要求很低,它既不会占用很高 CPU,也不会占用不少内存。但 却会给目标服务器形成巨大的负载,其原理相似 CC ***。本身测试使用也须要注意,不然 一次上太多的负载。可能形成目标服务器资源耗完,严重时甚至致使死机。

2)ab 的安装

  • 查看 ab 是否安装成功,能够切换到上述目录下,使用 ab –V 命令进行检测
    [root@localhost ~]# /usr/local/http-2.4.23/bin/ab -V 
    /usr/local/http-2.4.23/bin/ab: error while loading shared libraries: libssl.so.1.0.0: cannot open shared object file: No such file or directory

解决:
若是 ab –V 命令出错,能够 exporexport LD_LIBRARY_PATH="/usr/local/openssl/lib/"

[root@localhost ~]# export  LD_LIBRARY_PATH=/usr/local/openssl/lib/   
\\//将所需模块所在路径导出为环境变量
[root@localhost ~]#  /usr/local/http-2.4.23/bin/ab -V 
\\ 这样就能够正常使用
This is ApacheBench, Version 2.3 <$Revision: 1748469 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

3)ab 参数说明

  • ab命令经常使用的参数有两个:
-n:在测试会话中所执行的请求个数(总请求数);
-c:一次产生的请求个数(即并发用户数);
[root@localhost ~]# cat /var/www/benet/index.html
asdasdasdasdasdasd
//建立Apache的首页文件
[root@localhost ~]# ab -c 500 -n 10000 http://192.168.1.129/index.html
//对192.168.1.129的Web服务器进行测试
This is ApacheBench, Version 2.3 <$Revision: 1748469 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.1.129 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests

Server Software:        Apache/2.4.23
Server Hostname:        192.168.1.129
Server Port:            80

Document Path:          /index.html                  //请求的资源名称
Document Length:        34 bytes                  //响应数据的正文长度

Concurrency Level:      500                   //并发个数
Time taken for tests:   1.727 seconds       //处理这些请求所花费的时间
Complete requests:      10000               //成功请求完成的次数
Failed requests:        0                          //失败的请求次数
Total transferred:      2780000 bytes      //全部请求的响应数据长度总和
HTML transferred:       340000 bytes         //请求的正文数据总和
Requests per second:    5788.87 [#/sec] (mean)      //吞吐量-每秒请求数(计算公式:请求的次数/用户等待时间)吞吐量越大越好
Time per request:       86.373 [ms] (mean)        //用户平均等待时间(计算方式:用户等待时间/(请求的次数/并发))
Time per request:       0.173 [ms] (mean, across all concurrent requests)       //服务器平均等待时间(计算方式:用户等待时间/完成请求的次数)
Transfer rate:          1571.59 [Kbytes/sec] received   //用户请求的数据大小(计算方式:数据总长度/用户等待时间)

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   24 138.0      4    1034
Processing:     8   50  93.8     16     822
Waiting:        0   47  93.2     13     816
Total:         12   74 168.7     20    1255

Percentage of the requests served within a certain time (ms)
  50%     20
  66%     25
  75%     31
  80%     39
  90%    222
  95%    250
  98%    832
  99%   1050
 100%   1255 (longest request)
 //这部分数据用于描述每一个请求处理时间的分布状况
  • ab压力测试工具重要的性能指标

吞吐量:服务器并发处理能力的量化描述。指的是在某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐量。

注意:吞吐量是基于并发用户数的。这句话的含义:
吞吐量和并发用户数有关;
不一样的并发用户数下,吞吐量是不一样的;
计算公式:总请求数/处理完成这些请求所花费的时间。

2.并发链接数:并发链接数指的是某个时刻服务器所接收的请求数目,简单的讲,就是一个会话。
3.并发用户数:一个用户能够同时会产生一个会话或多个会话,也就是链接数;
4.用户平均等待时间:计算公式:处理完成全部请求数所花费的时间/(总请求数/并发用户数);
5.服务器平均等待时间:计算公式:处理完成多有请求数所花费的时间/总请求数。也就是吞吐量的倒数。同时也就是用户平均等待时间/并发用户数。

  • 安装php加速软件Xcache

下载Xcache

  • CentOS7.2 下安装 php 加速软件 Xcache(在 php 主机上完成下面的操做
[root@localhost /]# tar zxf xcache-3.2.0.tar.gz 
[root@localhost /]# cd xcache-3.2.0/
[root@localhost xcache-3.2.0]# /usr/local/php5.6/bin/phpize
Configuring for:
\\须要使用phpize命令来生成configure配置文件
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226
[root@localhost xcache-3.2.0]# ./configure --enable-xcache --enable-xcache-coverager --enable-xcache-optimizer --with-php-config=/usr/local/php5.6/bin/php-config && make && make install
  • 安装后会出现一条路径很是重要后面步骤用到

基于centos 7部署LNMP动静分离以及部署Discuz论坛

  • 编译配置参数详解:
--enable-xcache:启用xcache功能;
--enable-xcache-coverager:用于测试加速器功效和附加性;
--enable-xcache-optimizer:操做代码优化;
  • 建立 xcache 缓存文件
[root@localhost xcache-3.2.0]# touch /tmp/xcache
[root@localhost xcache-3.2.0]# chmod 777 /tmp/xcache
  • 拷贝 xcache 后台管理程序到网站根目录

[root@localhost xcache-3.2.0]# cp -r htdocs/ /var/www/benet/xcache

  • 配置 php 支持 xcache
    在最后一行添加如下内容
[root@localhost xcache-3.2.0]# vim /etc/php.ini 
[xcache-common]
extension = /usr/local/php5.6/lib/php/extensions/no-debug-zts-20131226/xcache.so
[xcache.admin]
xcache.admin.enable_auth = Off
[xcache]
xcache.shm_scheme ="mmap"
xcache.size=60M
xcache.count =1
xcache.slots =8K
xcache.ttl=0
xcache.gc_interval =0
xcache.var_size=64M
xcache.var_count =1
xcache.var_slots =8K
xcache.var_ttl=0
xcache.var_maxttl=0
xcache.var_gc_interval =300
xcache.test =Off
xcache.readonly_protection = Off
xcache.mmap_path ="/tmp/xcache"
xcache.coredump_directory =""
xcache.cacher =On
  • 相关解释以下:
[xcache-common] 
extension = /usr/local/php5.6/lib/php/extensions/no-debug-zts-20131226/xcache.so 
//启用php的xcache扩展功能
[xcache.admin] 
xcache.admin.enable_auth = Off         //关闭xcache认证
[xcache] 
xcache.shm_scheme ="mmap"            //决定xcache如何从系统共享内存
//nmap是一种内存映射文件的方法
xcache.size=60M              //所用共享缓存的大小,若是设置为0,将没法使用
xcache.count =1                  //将cache切分红多少块,建议设置为cpu数 
xcache.slots =8K                //指做为hash槽个数的参考值
xcache.ttl=0                      //文件生存时间,设置为0将无限缓存
xcache.gc_interval =0          //触发垃圾回收的时间间隔,默认为0秒
xcache.var_size=64M           //针对变量的缓存
xcache.var_count =1 
xcache.var_slots =8K 
xcache.var_ttl=0 
xcache.var_maxttl=0 
xcache.var_gc_interval =300 
xcache.test =Off                   //关闭测试功能
xcache.readonly_protection = Off           //启动会下降性能,可是略微提升安全性
xcache.mmap_path ="/tmp/xcache"          //用于只读文件路径
xcache.coredump_directory =""                
//在遇到故障时,放置核心转储功能,必须是php可写入的目录,保留为空表示禁用
xcache.cacher =On            //使用opcode缓存,xcache.size=0时无效
xcache.stat=On                 //使用stat发现检查脚本的更新
xcache.optimizer =Off                 //禁用优化
[xcache.coverager] 
xcache.coverager =On           //启用代码覆盖信息采集器
xcache.coveragedump_directory =""        
//放置数据采集信息的目录位置,默认使用目录/tmp/pcovis
  • 将 xcache 目录拷贝到 apache 主机的网页文档目录下
[root@localhost xcache-3.2.0]# scp -r /var/www/benet/xcache/ root@192.168.148.129:/var/www/benet/
  • 重启php
[root@localhost xcache-3.2.0]# service php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm  done
  • 测试

基于centos 7部署LNMP动静分离以及部署Discuz论坛

部署Discuz论坛

下载Discuz软件包

  • 在php服务器上操做
[root@localhost /]# unzip Discuz_7.0.0_FULL_SC_UTF8.zip -d discus
[root@localhost /]# mv discus/Discuz_7.0.0_FULL_SC_UTF8/upload/ /var/www/benet/bbs
[root@localhost /]# chown -R nobody:nobody /var/www/benet/bbs/
[root@localhost /]# chmod -R 777 /var/www/benet/bbs/
[root@localhost /]# vim /etc/php.ini 

short_open_tag = Off  改成short_open_tag = On

基于centos 7部署LNMP动静分离以及部署Discuz论坛

[root@localhost /]# service php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm  done
  • Mysql服务器进行如下操做
[root@localhost ~]# mysql -u root -p123
mysql> create database bbs;  \\建立数据库
Query OK, 1 row affected (0.00 sec)
  • Apache服务器进行如下操做
    web 服务器也须要有静态文件

    [root@localhost /]# unzip Discuz_7.0.0_FULL_SC_UTF8.zip -d discus
    [root@localhost /]# mv discus/Discuz_7.0.0_FULL_SC_UTF8/upload/ /var/www/benet/bbs
    [root@localhost /]# cd  /var/www/benet/bbs 
    [root@localhost bbs]# chown -R daemon config.inc.php attachments/ forumdata/ uc_client/data/cache/ templates/
  • 测试

基于centos 7部署LNMP动静分离以及部署Discuz论坛

基于centos 7部署LNMP动静分离以及部署Discuz论坛

基于centos 7部署LNMP动静分离以及部署Discuz论坛

基于centos 7部署LNMP动静分离以及部署Discuz论坛

出现这个页面咱们还须要作一步

基于centos 7部署LNMP动静分离以及部署Discuz论坛

在php上操做

[root@localhost /]# scp -r /var/www/benet/bbs/ root@192.168.148.129:/var/www/benet/

把php下的bbs复制到apache中按下f5刷新一下

基于centos 7部署LNMP动静分离以及部署Discuz论坛

相关文章
相关标签/搜索