FastCGI模式编译安装LAMP+Xcache
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(); ?>
FastCGI模式编译安装LAMP+Xcache的更多相关文章
- 二、编译安装LAMP之httpd-2.4.4
		
回顾 PHP:脚本编程语言,php解释器 Webapp:面向对象的特性 Zend: 第一段:词法分析.句法分析.编译为Opcode: opcode放置于内存中 第二段:执行opcode: opcode ...
 - CentOS 6编译安装lamp,并分别安装event模块方式和FPM方式的PHP
		
任务目标: 编译安装LAMP 要求(1) 安装一个模块化的PHP 要求(2) 安装一个FPM的PHP 注意PHP需要最后一个安装,因为需要前两者的支持. 所以这里的安装次序为 1.httpd 2.Ma ...
 - CentOS6.3 编译安装LAMP(2):编译安装 Apache2.2.25
		
所需源码包: /usr/local/src/Apache-2.2.25/httpd-2.2.25.tar.gz 编译安装 Apache2.2.25 #切换到源码目录 cd /usr/local/src ...
 - CentOS6.3 编译安装LAMP(2):编译安装 Apache2.4.6
		
Apache官方说: 与Apache 2.2.x相比,Apache 2.4.x提供了很多性能方面的提升,包括支持更大流量.更好地支持云计算.利用更少的内存处理更多的并发等.除此之外,还包括性能提升.内 ...
 - 2-21-源码编译安装LAMP
		
编译安装LAMP所需要及其所使用的源码版本: httpd version:httpd-2.4.16 apr version:apr-1.5.2 pcre version:pcre-8.37 apr ...
 - centos7源码编译安装lamp/lnmp
		
centos7源码编译安装lamp/lnmp 进程:是包工头(相当于是个门,只管开门关门,不管门内的事儿) 线程:是各种工种(cpu调度的是线程) 进程 是一件事情, 线程 是 同一个时间范围内 同时 ...
 - ubuntu10.04编译安装LAMP
		
ubuntu10.04编译安装LAMP以及简单wordpress的使用 : http://linuxme.blog.51cto.com/1850814/971631 一.源码安装LAMP 网上有一堆关 ...
 - CentOS6.3 编译安装LAMP(1):准备工作
		
卸载yum或rpm安装的amp软件 #在编译安装lamp之前,首先先卸载已存在的rpm包. rpm -e httpd rpm -e mysql rpm -e php yum -y remove htt ...
 - CentOS6.3 编译安装LAMP(3):编译安装 MySQL5.5.25
		
所需源码包: /usr/local/src/MySQL-5.5.25/cmake-2.8.8.tar.gz /usr/local/src/MySQL-5.5.25/mysql-5.5.25.tar.g ...
 
随机推荐
- 运维CMDB建设思路
			
在我们日常的运维工作中,面对着大量的基础设施和软件服务,该如何管理?这个管理的原则又是什么?粒度该如何控制?我们是否可以建立一个统一的标准模型来管理以上对象?管理过程中,如何降低人力成本?资源对象的生 ...
 - 小知识——c++关于指针的理解
			
参考文章: 简介: 指针可以简化c++编程,在一些任务中没有指针是无法完成的(动态内存分配) 使用 & 可以获得变量在内存中的地址: eg: #include <iostream> ...
 - 使用$.getJSON("xx.json" ,function(data){ console.logy(data); })在本地获取 json数据
			
使用 $.getJSON() 在本地获取 json数据 默认在谷歌,火狐等其他浏览器,不允许在本地获取服务器数据 所以不能在本地中使用 但是可以IE 11 中又可以使用,所以,测试时建议在IE浏览器 ...
 - transitionend事件 监听 fadeIn fadeOut 两个方法无效(动画结束时无法执行transitionend里面的代码)
			
//下面的例子证明 fadeIn() fadeOut() 不能使用transitionend事件进行监听. //说白了在fadeIn fadeOut 后面监听动画结束时,transitionend是不 ...
 - 原生JS实现简易随机点名功能
			
定时器的工作原理,这里将用引用How JavaScript Timers Work中的例子来解释定时器的工作原理,该图为一个简单版的原理图.· 上图中,左侧数字代表时间,单位毫秒:左侧文字代表某一个操 ...
 - python 调用未绑定的超类构造方法
			
class Bird: def __init__(self): self.hungry = True def eat(self): if self.hungry: print('Aaaaah') se ...
 - js 读xml文件
			
参考 http://www.w3school.com.cn/xmldom/dom_document.asp A.xml <?xml version="1.0" encodin ...
 - Ubuntu输入ifconfig找不到IP地址,只有lo问题
			
首先我的问题是这样的 然后一顿神百度,要找到你之前用的网卡或者设备,ifconfig -a,然后好用,出来了 但是并没有IP地址什么的,网上给的重启命令也没有用 输入的命令是:ifconfig ens ...
 - OpenCV:Python下OpenCV安装和入门最强详细攻略
			
一.关于OpenCV简介 OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效— ...
 - P1850 换教室——期望DP
			
题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 2n2n2n 节课程安排在 nnn 个时间段上.在第 iii(1≤i≤n1 \leq i ...
 
			
		