ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

FastCGI模式编译安装LAMP+Xcache

2019-05-29 16:02:25  阅读:249  来源: 互联网

标签:Xcache benet fpm phpserver LAMP mysql php root FastCGI


PHP的工作模式:
php在lamp环境下共有三种工作模式:CGI模式、apache模块、FastCGI模式。
CGI模式下运行PHP,性能不是很好。(已淘汰)
FastCGI的方式和apache模块的不同点在于:
FastCGI方式PHP是一处独立的进程,所有PHP子进程都由PHP的一个叫作php-fpm的组件负责管理;
而apache模块化方式运行的PHP,则是apache负责调用PHP完成工作。
PHP的FastCGI方式性能要比apache模块化方式强很多,今天我们以FastCGI方式编译安装lamp。

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

主机规划

至少3台主机,操作系统都是centos7.2.网段在192.168.197.0/24 网关192.168.197.2

分配如下:

1台httpd服务器(192.168.31.83)

1台php服务器(192.168.31.141)

1台mysql服务器(192.168.31.225)

1、解决依赖关系

[root@phpserver~]# yum -y install libxml2-devel libcurl-devel openssl-devel bzip2-devel

安装libmcrypt

[root@phpserver~]# tar zxf libmcrypt-2.5.7.tar.gz

[root@phpserver~]# cd libmcrypt-2.5.7/

[root@phpserverlibmcrypt-2.5.7]# ./configure --prefix=/usr/local/libmcrypt && make&& make install

2、编译安装php

[root@phpserver~]# tar zxf php-5.6.27.tar.gz

[root@phpserver~]# cd php-5.6.27/

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

相关选项的解释:

--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@phpserverphp-5.6.27]# cp php.ini-production /etc/php.ini

4、为php-fpm提供脚本

[root@phpserverphp-5.6.27]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

[root@phpserverphp-5.6.27]# chmod +x /etc/init.d/php-fpm

[root@phpserverphp-5.6.27]# chkconfig --add php-fpm

[root@phpserverphp-5.6.27]# chkconfig php-fpm on

5、提供php-fpm配置文件并编辑:

# cp/usr/local/php5.6/etc/php-fpm.conf.default /usr/local/php5.6/etc/php-fpm.conf

[root@phpserver~]# vi /usr/local/php5.6/etc/php-fpm.conf

修改内容如下:

pid =run/php-fpm.pid

listen = 192.168.31.141:9000

pm.max_children= 50

pm.start_servers= 5

pm.min_spare_servers= 5

pm.max_spare_servers= 35

启动php-fpm服务:

[root@phpserver~]# service php-fpm start

Startingphp-fpm done

[root@phpserver~]# netstat -anpt | grep php-fpm

tcp 0 0 0.0.0.0:9000 0.0.0.0:* LISTEN 25456/php-fpm: mast

[root@phpserver~]# firewall-cmd --permanent --add-port=9000/tcp

success

[root@phpserver~]# firewall-cmd --reload

Success

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

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

至此php安装配置完毕,下面配置apache通过fastcgi协议调用php

6、配置apache(切换到apache主机上操作)

在Apache2.4以后已经专门有一个模块针对FastCGI的实现,此模块为mod_proxy_fcgi.so,它其实是作为mod_proxy.so模块的扩充,因此,这两个模块都要加载

LoadModuleproxy_module modules/mod_proxy.so

LoadModuleproxy_fcgi_module modules/mod_proxy_fcgi.so

[root@www~]# apachectl -M | grep proxy

proxy_module (shared)

proxy_fcgi_module (shared)

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

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

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

启用Includeconf/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@www~]# vi /usr/local/http-2.4.23/conf/extra/httpd-vhosts.conf

<VirtualHost*:80>

ServerAdmin webmaster@benet.com

DocumentRoot "/var/www/benet"

ServerName www.benet.com

ServerAlias benet.com

ErrorLog"logs/benet.com-error_log"

CustomLog"logs/benet.com-access_log" common

ProxyRequests Off

ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://192.168.31.141:9000/var/www/benet/$1

#<LocationMatch"^(.*\.php(/.*)?)$">

#ProxyPassfcgi://192.168.31.141:9000/var/www/benet

#</LocationMatch>

<Directory"/var/www/benet">

Options FollowSymLinks

AllowOverride None

Require all granted

</Directory>

</VirtualHost>

其中:

ProxyRequestsoff #关闭正向代理

ProxyPassMatch:把以.php结尾的文件请求发送到php-fpm进程,php-fpm至少需要知道运行的目录和URI,所以这里直接在fcgi://192.168.31.141:9000后指明了这两个参数,其它的参数的传递已经被mod_proxy_fcgi.so进行了封装,不需要手动指定。

特别注意的是,红色字体部分需要与<VirtualHost>中的 DocumentRoot后的路径一致

ProxyPassMatch
只有满足特定正则模式的内容才会匹配并执行此规则,这里的模式是,^/(.*\.php(/.*)?)$
从网站(虚拟主机<VirtualHost>的根目录开始,匹配任何以 .php 结尾,或者在.php 之后紧跟一个 / 再跟别的内容的路径。^ (caret) 和 $ (dollar)标志要匹配的路径的开始和结束。( )括号里的内容可以用 $1 来表示,以方便后面引用它。

fcgi:// 192.168.31.141:9000通过 mod_proxy_fcgi 来转发的代理,使用 fastCGI 协议,转到 PHP-FPM 监听的端口。

/path/to/your/documentroot/

非常重要!必须与虚拟主机的路径匹配,且必须是对应 php文件在操作系统中的绝对路径。否则会找不到文件。

$1可以从原始请求扩展成整个请求路径的变量,这里指代前面( ) 里面匹配的那个路径(url)

充:Apache httpd 2.4以前的版本中,要么把PHP作为Apache的模块运行,要么添加一个第三方模块支持PHP-FPM实现。

测试LAMP环境:

在mysql主机上创建用于php服务器连接的mysql账户

mysql>grant all on *.* to ceshi@'%' identified by '123456;

注意防火墙要允许mysql连接。

在php服务器上的/var/www/benet目录下创建.php的测试页:

[root@phpserver~]# cat /var/www/benet/index.php

<?php

phpinfo();

?>

[root@phpserver~]# cat /var/www/benet/test.php

<?php

$link=mysql_connect('192.168.31.225','ceshi','123456');

if($link)echo "connection success......";

mysql_close();

?>

标签:Xcache,benet,fpm,phpserver,LAMP,mysql,php,root,FastCGI
来源: https://www.cnblogs.com/peteremperor/p/10944300.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有