Fcgi模式编译安装LAMP+XCache(搭建BBS论坛)

PHP的工作模式:

php在lamp环境下有三种工作模式:CGI模式、Apache模块、Fastcgi模式。CGI模式下运行PHP性能并不是很好,作为Apache的模块方式运行。FastCGI的方式和Apache模块的不同点在于:FastCGI方式php是一处独立的进程,所有的子进程都是由php的一个叫做php-fpm的组件负责管理,而apache模块化方式运行php,则是apache负责调用php完成工作,php的FastCGI方式性能要比apache模块化的方式要强的多,本章就以FastCGI方式编译安装LAMP


FastCGI 工作机制:
首先客户端发起请求,请求分为 2 种,一种是静态请求它可以直接由 Apache 直接响应返回;另一种是动态的请求,如其中包含中 php 或者 Perl这种脚本解释性语言,则由 Apache 服务器通过 fastcgi 协议调用 php 服务器执行并返回给Apache由 Apache返回解释执行后的结果,如果这个过程中涉及到对数据的操作,此时 php 服务器还会还会通过 mysql 协议调用 mysql服务器


编译环境及各软件版本:


本次测试最少需要三台服务器,操作系统都是Centos7.4,网段都在192.168.146.0/24 网关192.168.146.2分配如下:

一台httpd服务器(192.168.146.100)

一台php服务器(192.168.146.110)

一台Mysql服务器(192.168.146.120)

在测试过程中关闭全部主机的防火墙

编译安装LAMP

在安装Apache大家可以参考我的这篇文章:http://blog.csdn.net/qq_39591494/article/details/78726580

同时也可以尝试一键安装脚本来安装,如下:

#!/bin/bash
#this ia a yankerp

systemctl stop firewalld.service && setenforce 0

rm -rf /var/run/yum.pid  && systemctl stop firewalld ;setenforce 0 && yum install gcc gcc-c++ -y
wget http://mirrors.hust.edu.cn/apache//apr/apr-1.5.2.tar.gz
tar zxf apr-1.5.2.tar.gz ;cd apr-1.5.2/ ;./configure --prefix=/usr/local/apr && make && make install ;cd
wget http://mirrors.hust.edu.cn/apache//apr/apr-util-1.5.4.tar.gz
tar zxf apr-util-1.5.4.tar.gz && cd apr-util-1.5.4/ ;./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr ;make && make install ;cd
wget http://www.zlib.net/fossils/zlib-1.2.8.tar.gz
tar zxf zlib-1.2.8.tar.gz && cd zlib-1.2.8/ ;./configure --prefix=/usr/local/zlib && make && make install ;cd
wget https://ftp.pcre.org/pub/pcre/pcre-8.39.tar.gz
tar zxf pcre-8.39.tar.gz && cd pcre-8.39/ ;./configure --prefix=/usr/local/pcre && make;make install ;cd
wget https://www.openssl.org/source/old/1.0.1/openssl-1.0.1u.tar.gz
tar zxf openssl-1.0.1u.tar.gz && cd openssl-1.0.1u/ ;./config -fPIC --prefix=/usr/local/openssl enable-shared && make;make install ;cd
mv /usr/bin/openssl /usr/bin/openssl.1.0.1e ;ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
wget http://mirrors.shuosc.org/apache//httpd/httpd-2.4.23.tar.gz && tar zxf httpd-2.4.23.tar.gz
sed  -i 's/#define AP_SERVER_BASEVENDOR "Apache Software Foundation"/#define AP_SERVER_BASEVENDOR "yyankep"/g' /root/httpd-2.4.23/include/ap_release.h
sed  -i 's/#define AP_SERVER_BASEPROJECT "Apache HTTP Server"/#define AP_SERVER_BASEPROJECT "yankerp"/g'  /root/httpd-2.4.23/include/ap_release.h
sed  -i 's/#define AP_SERVER_BASEPRODUCT "Apache"/#define AP_SERVER_BASEPRODUCT "Yankai"/g'  /root/httpd-2.4.23/include/ap_release.h
cd httpd-2.4.23/ && ./configure --prefix=/usr/local/http-2.4.23 --enable-so --enable-cgi --enable-cgid --enable-ssl --with-ssl=/usr/local/openssl --enable-rewrite --with-pcre=/usr/local/pcre --with-z=/usr/local/zlib --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mods-shared=most  --enable-mpms-shared=all  --with-mpm=event  --enable-proxy --enable-proxy-fcgi --enable-expires  --enable-deflate && make;make install
sed -i 's/#ServerName www.example.com:80/ServerName www.yankerp.com/g' /usr/local/http-2.4.23/conf/httpd.conf
ln -s /usr/local/http-2.4.23/bin/* /usr/local/bin/ ;cp /usr/local/http-2.4.23/bin/apachectl /etc/init.d/httpd
sed -i '1a # chkconfig: 35 85 21' /etc/init.d/httpd ;sed -i '2a # description: apache 2.4.23' /etc/init.d/httpd
chkconfig --add httpd ;chkconfig httpd on ;systemctl start httpd ;netstat -anpt | grep httpd

将以上的脚本复制到notepad++编辑器中,再次复制到Linux下运行即可!



2、安装Mysql大家可以参考我的这篇文章:http://blog.csdn.net/qq_39591494/article/details/78255286

这边我提前安装好了!



3、FastCGI方式安装PHP(PHP主机操作)

1.解决依赖关系

[root@php ~]# yum -y install libxml2-devel lzip2-devel libcurl-devel libmcrypt-devel  openssl-devel bzip2-devel
安装Libmcrypt
[root@php ~]# wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/libmcrypt-2.5.7.tar.gz


2.编译安装PHP

[root@php ~]# tar zxf php-5.6.25.tar.gz 
[root@php ~]# cd php-5.6.25/
./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


相关选项的解释:
--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 选项


3.提供PHP的主配置文件及提供脚本

[root@php php-5.6.25]# cp php.ini-production /etc/php.ini
[root@php php-5.6.25]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@php php-5.6.25]# chmod +x /etc/init.d/php-fpm 
[root@php php-5.6.25]# chkconfig --add php-fpm
[root@php php-5.6.25]# chkconfig php-fpm on



4.提供 php-fpm 配置文件并编辑:

[root@php php-5.6.25]# cp /usr/local/php5.6/etc/php-fpm.conf.default /usr/local/php5.6/etc/php-fpm.conf
[root@php php-5.6.25]# vim /usr/local/php5.6/etc/php-fpm.conf
修改内容如下:

pid = run/php-fpm.pid
listen = 192.168.146.110:9000 
//PHP主机的IP地址
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35

启动PHP-FPM服务


在php主机上新建虚拟主机目录用于存放网页文件

[root@php ~]# mkdir -p /var/www/yankerp
在此PHP正式安装完毕


5.配置Apache服务器(Apache主机操作)

在 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

打开Apache主配置文件开启模块 (#)去掉即可



建立一个目录作为虚拟主机的家目录

[root@apache ~]# mkdir -p /var/www/yankerp
编辑主配置文件 httpd.conf,开启虚拟主机

启用Include conf/extra/httpd-vhosts.conf

同时定位 AddType;添加下面两行:让 apache 能识别 php 格式的页面
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps


并且定位至 DirectoryIndex:支持 php 格式的主页
DirectoryIndex index.php index.html #添加 index.php(最好添加在最前面



配置虚拟主机支持使用 fcgi 如下:

[root@apache ~]#vim /usr/local/http-2.4.23/conf/extra/httpd-vhosts.conf 

<VirtualHost *:80>
 ServerAdmin webmaster@yankerp.com
 DocumentRoot "/var/www/yankerp"
 ServerName www.yankerp.com
 ServerAlias yankerp.com
 ErrorLog "logs/yankerp.com-error_log"
 CustomLog "logs/yankerp.com-access_log" common
 ProxyRequests Off
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://192.168.146.110:9000/var/www/yankerp/$1  
<Directory "/var/www/yankerp">
 Options FollowSymLinks
 AllowOverride None
 Require all granted
</Directory>
</VirtualHost>


解释如下:

其中:
ProxyRequests off #关闭正向代理
ProxyPassMatch:把以.php 结尾的文件请求发送到 php-fpm 进程,php-fpm 至少需要知道运行的目录和 URI,所以这里直接在 fcgi://192.168.146.110:9000 后指明了这两个参数,其它的参数的传递已经被mod_proxy_fcgi.so 进行了封装,不需要手动指定。
特别注意的是,红色字体部分需要与<VirtualHost >中的 DocumentRoot 后的路径一致ProxyPassMatch只有满足特定正则模式的内容才会匹配并执行此规则,这里的模式是,^/(.*\.php(/.*)?)$
从网站(虚拟主机<VirtualHost >的根目录开始,匹配任何以 .php 结尾,或者在 .php 之后紧跟一个 / 再跟别的内容的路径。^ (caret) 和 $ (dollar)标志要匹配的路径的开始和结束( )括号里的内容可以用 $1 来表示,以方便后面引用它。
fcgi:// 192.168.146.110:9000 通过 mod_proxy_fcgi 来转发的代理,使用 fastCGI 协议,转到PHP-FPM 监听的端口。


6.在 mysql 主机上创建用于 php 服务器连接的 mysql 账户(Mysql服务器操作)

mysql> grant all on *.* to yankerp@'%' identified by '123';   


在 php 服务器上的/var/www/yankerp 目录下创建.php 的测试页:(PHP操作)



测试访问 php 测试页:http://ApacheIP地址/  出现以下界面证明LAMP正式搭建成功!



看到上面两个测试页说明 apache、php、mysql 之间可以协同工作了。


7.安装ab压力测试(Mysql主机操作)

ab 是 apache 自带的压力测试工具。ab 非常实用,它不仅可以对 apache 服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如 nginx、tomcat、IIS 等。

[root@mysql ~]# yum install -y  httpd-tools

-n:在测试会话中所执行的请求个数(即总请求数)。
-c:一次产生的请求个数(即并发用户数)。

Requests per second:    2909.06 [#/sec] (mean)  //吞吐量,每秒的请求数 多测试几次,确定范围


8.CentOS7.4下安装 php 加速软件 Xcache(在 php 主机上完成下面的操作)

1)下载xcache

[root@php ~]# wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz
[root@php ~]# tar zxf xcache-3.2.0.tar.gz  //解压
[root@php ~]# cd xcache-3.2.0/                  //进入解压路径

[root@php xcache-3.2.0]# /usr/local/php5.6/bin/phpize  //使用phpize生成./configure配置文件

[root@php 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


安装完成之后,出现下面的界面,记住以下路径,后面会用到


2)创建 xcache 缓存文件


3)拷贝 xcache 后台管理程序到网站根目录

[root@php xcache-3.2.0]# cp -r htdocs/ /var/www/yankerp/xcache


4)配置 php 支持 xcache  

vi / 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.stat=On
xcache.optimizer =Off
[xcache.coverager]
xcache.coverager =On
xcache.coveragedump_directory =""



将 xcache 目录拷贝到 apache 主机的网页文档目录下

[root@php xcache-3.2.0]# scp -r /var/www/yankerp/xcache/ 192.168.146.100:/var/www/yankerp/


9.测试
service php-fpm restart #重启 php-fpm 浏览器打开网站根目录下面的 xcache

http://ApacheIP地址/xcache 如下:


至此,Linux 下安装 php 加速软件 Xcache完成


执行 ab 压力测试:执行第一次压力测试:

[root@mysql ~]#ab -c 500 -n 10000 http://192.168.146.100/index.php



执行第二次压力测试:



查看 xcache 的命中率:



xcache也是很不错的,接下来我们部署BBS论坛!使用Discuz(PHP服务端操作)

1.Discuz文件解压并且将 upload所有文件放置到网站目录

[root@php src]# unzip Discuz_7.0.0_FULL_SC_UTF8.zip 
[root@php src]# mv upload/ /var/www/yankerp/bbs
设置 php-fpm 的服务用户为下面文件的属主或者对其设置写权限,否则安装时会报错



修改 php.ini 文件

vim /etc/php.ini


修改完成后重启PHP-FPM

[root@php bbs]# service php-fpm restart 

web 服务器也需要有静态文件(apache 服务器上操作)

[root@apache bbs]# unzip Discuz_7.0.0_FULL_SC_UTF8.zip 
[root@apache ~]# mv upload/ /var/www/yankerp/bbs
[root@apache ~]# cd /var/www/yankerp/bbs/
[root@apache bbs]# chown -R daemon config.inc.php attachments/ forumdata/ uc_client/data/cache/ templates/


在数据库服务器上创建 bbs 数据库及授权帐户(Mysql服务器操作)

mysql> create database bbsdb;
mysql> grant all on bbsdb.* to runbbs@'%' identified by '123';


验证:输入 httd://192.168.146.100/bbs/install 即可安装,如下:



这时候出现以下界面


是不是感觉有点.....Lou 

出现上面这种情况是由于 php 服务器安装了 discuz 之后导致程序发生变化从而导致动态服务器和静态服务器的程序不一致,只需要手动把 bbs 服务器的文件和 web 服务器进行一次同步即可 如下:(php操作)

[root@php bbs]# scp -r /var/www/yankerp/bbs/* root@192.168.146.100:/var/www/yankerp/bbs/

再次访问 bbs 的网址就正常了。



2017年倒计时!!!

这个图片插的就是很累,希望对您有所帮助,再见~

相关文章
相关标签/搜索