实现php-fpm的工作机制,编译LAMP_2015092101

本次实验目的:实现httpd与php通过fpm结合。

服务器相关信息:

IP:172.16.113.16
2.6.32-504.el6.x86_64
[[email protected]~]# cat redhat-re
[[email protected]~]# cat /etc/redhat-release 
CentOSrelease 6.6 (Final)

编译安装httpd2.2

需要的源码包:

httpd-2.4.16.tar.bz2

apr-1.5.0.tar.bz2

apr-util-1.5.3.tar.bz2

准备开发环境:

[[email protected]]# yum groupinstall -y "Development tools" "ServerPlatform Development"

解决依赖关系:安装pcre-devel包

[[email protected]]# yum install -y pcre-devel    //支持perl的正则表达式

展开并安装apr

[[email protected]~]# tar xf apr-1.5.0.tar.bz2

[[email protected]~]# cd apr-1.5.0

[[email protected]]# ./configure --prefix=/usr/local/apr

[[email protected]]# make &&make install

[[email protected]]# cd ..    //切换回上一级目录

展开并安装apr-util

[[email protected]~]# tar xf apr-util-1.5.3.tar.bz2

[[email protected]~]# cd apr-util-1.5.3

[[email protected]]# ./configure --prefix=/usr/local/apr-util--with-apr=/usr/local/apr/

[[email protected]]# make && make install &&cd ..

展开并安装httpd

[[email protected]~]# tar xf httpd-2.4.16.tar.bz2

[[email protected]]# cd httpd-2.4.16

[[email protected]]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24--enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre--with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util--enable-modules=most --enable-mpms-shared=all --with-mpm=event

#--prefix=/usr/local/apache    //指明安装目录

#--sysconfdir=/etc/httpd24    //指定配置文件的安装路径,此处为了避免与rpm包所装的httpd冲突,将路径名取名为httpd24

#--enable-so        //支持httpd的模块化机制

#--enable-ssl     //启用支持ssl功能,实现https

#--enable-cgi    //支持cgi协议

#--enable-rewrite     //支持url重写

#--with-zlib     //支持传输压缩

#--with-pcre     //支持perl语言的正则表达式

#--with-apr=/usr/local/apr    //指明编译升级的apr的路径

#--with-apr-util=/usr/local/apr-util//指明编译升级的apr-util路径

#--enable-modules=most     //指明启动大多数的模块

#--enable-mpms-shared=all     //将所有mpm模块都编译进httpd(httpd2.4版本的新特性)

#--with-mpm=event    //默认使用event的MPM工作模型

[[email protected]]#  make && make install

[[email protected]]# mkdir /var/run/httpd24    //创建httpd的pid创建目录

[[email protected]]# vim /etc/httpd24/httpd.conf     //编辑配置文件

PidFile"/var/run/httpd24/httpd.pid"    //添加运行时pid文件的位置

为httpd24提供服务管理脚本:放置于/etc/rc.d/init.d/httpd24,并赋予可执行权限

[[email protected]]# vim /etc/rc.d/init.d/httpd24

#!/bin/bash

#chkconfig: - 85 15

#description: The Apache HTTP Server Management script.

./etc/rc.d/init.d/functions

apachectl=/usr/local/apache/bin/apachectl

httpd=/usr/local/apache/bin/httpd

prog=httpd

pidfile=/var/run/httpd24/httpd.pid

lockfile=/var/lock/subsys/httpd24

RETVAL=0

STOP_TIMEOUT=${STOP_TIMEOUT-10}

start() {

echo -n $"Starting $prog: "

LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd$OPTIONS

RETVAL=$?

echo

[ $RETVAL = 0 ] && touch ${lockfile}

return $RETVAL

}

stop() {

echo -n $"Stopping $prog: "

killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpd

RETVAL=$?

echo

[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}

}

reload() {

echo -n $"Reloading $prog: "

if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then

RETVAL=6

echo $"not reloading due to configuration syntaxerror"

failure $"not reloading $httpd due to configurationsyntax error"

else

# Force LSB behaviour from killproc

LSB=1 killproc -p ${pidfile} $httpd -HUP

RETVAL=$?

if [ $RETVAL -eq 7 ]; then

failure $"httpd shutdown"

fi

fi

echo

}

case"$1" in

start)

start

;;

stop)

stop

;;

status)

status -p ${pidfile} $httpd

RETVAL=$?

;;

restart)

stop

start

;;

condrestart|try-restart)

if status -p ${pidfile} $httpd >&/dev/null; then

stop

start

fi

;;

force-reload|reload)

reload

;;

graceful|help|configtest|fullstatus)

$apachectl [email protected]

RETVAL=$?

;;

*)

echo $"Usage: $prog{start|stop|restart|condrestart|try-restart|force-reload|reload|status|fullstatus|graceful|help|configtest}"

RETVAL=2

esac

exit$RETVAL

[[email protected]]# chmod +x /etc/rc.d/init.d/httpd24

[[email protected]]# chkconfig --add httpd24    //将httpd24添加至开机自动启动项

[[email protected]]# chkconfig httpd24 on    //开启开机自启动httpd24

[[email protected]]# vim /etc/profile.d/httpd24.sh    //创建此文件并添加如下信息,以为将编译的httpd24添加至环境变量

exportPATH=/usr/local/apache/bin:$PATH

编译安装mariadb

需要的源码包:

mariadb-5.5.43-linux-x86_64.tar.gz    (二进制包)

安装mariadb,可通过展开包中的“INSTALL-BINARY”查看安装步骤:

[[email protected]~]# tar -xf mariadb-5.5.43-linux-x86_64.tar.gz

[[email protected]~]# mv mariadb-5.5.43-linux-x86_64 /usr/local/mysql    //将展开目录移动至/usr/local下,并重命名为"mysql"

[[email protected]~]# cd /usr/local/mysql

[[email protected]]# groupadd -r -g 306 mysql    //创建系统用户组:mysql

[[email protected]]# useradd -r -g 306 -u 306 mysql    //创建系统用户:mysql

[[email protected]]# chown -R mysql.mysql .    //将mariadb的展开目录改为属主属组都是mysql

[[email protected]]# mkdir -pv /mydata/data       //创建数据库存放目录,此目录最好为xfs文件系统

mkdir:created directory `/mydata‘

mkdir:created directory `/mydata/data‘

[[email protected]]# scripts/mysql_install_db --user=mysql--datadir=/mydata/data    //运行程序自带脚本安装mariadb

[[email protected]]# chown -R root .    //将mariadb的展开目录及其子目录属主改为root

将mariadb自带的配置文件模板拷贝至/etc下命名为my.cnf作为mariadb的配置文件

[[email protected]]# scp support-files/my-large.cnf /etc/my.cnf

[[email protected]]# vim /etc/my.cnf    //配置下面几项参数,入没有需手动添加

thread_concurrency= 8     //此处改为服务器cpu核心数的2倍

//在[mysqld]配置池中添加下面三项参数:

datadir =/mydata/data

innodb_file_per_table= yes

skip_name_resolve= yes

为mariadb提供服务管理脚本,mariadb自带有服务管理脚本,拷贝至/etc/rc.d/init.d/下即可

[[email protected]]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld

启动mariadb,并运行mariadb的安全初始化脚本,完成初始化配置,为root添加密码等操作:

[[email protected]]# service mysqld start

[[email protected]]# bin/mysql_secure_installation

将mariadb添加至开机自动启动

[[email protected]]# chkconfig --add mysqld

[[email protected]]# chkconfig mysqld on

将mariadb目录添加至环境变量

[[email protected]]# vim /etc/profile.d/mariadb.sh

exportPATH=/usr/local/mysql/bin:$PATH

编译安装php

需要的源码包:php-5.6.13.tar.bz2

1、解决依赖关系:(事先配置好yum源)

[[email protected]]# yum install -y libmcrypt-devel mhash libxml2-devel bzip2-devel

2、安装php

[[email protected]~]# tar xf php-5.6.13.tar.bz2

[[email protected]_mariadb ~]# cd php-5.6.13

[[email protected]]# ./configure --prefix=/usr/local/php--with-mysql=/usr/local/mysql --with-openssl--with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring--with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib--with-libxml-dir=/usr --enable-xml  --enable-sockets --enable-fpm--with-mcrypt  --with-config-file-path=/etc--with-config-file-scan-dir=/etc/php.d --with-bz2

// --enable-fpm    此项参数最为关键。是表明让php运行为单独的服务

[[email protected]]# make -j 4 && make install    //开启多线程编译安装

3、提供php的配置文件:php源码包中自带配置文件模板,由于刚才编译安装时指定了php启动扫描配置文件的路径为/etc/php.d

因此:

[[email protected]]# cp php.ini-production /etc/php.d/php.ini

4、位php提供服务管理脚本:php源码包中自带

[[email protected]]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm

[[email protected]]# chmod +x /etc/rc.d/init.d/php-fpm    //为其赋予可执行权限

[[email protected]]# chkconfig --add php-fpm         //添加至开机自动启动项

[[email protected]]# chkconfig php-fpm on    //开机自动启动

5、为fpm提供配置文件

[[email protected]]# cp /usr/local/php/etc/php-fpm.conf.default/usr/local/php/etc/php-fpm.conf

[[email protected]]# vim /usr/local/php/etc/php-fpm.conf    //编辑配置文件,编辑如下几项

pid =run/php-fpm.pid

pm.max_children= 50     //服务启动的最大进程数

pm.start_servers= 10    //开启服务是启动的进程数

pm.min_spare_servers= 5    //最小空闲进程数

pm.max_spare_servers= 10    //最大空闲进程数

6、修改httpd配置文件

启用如下两个模块:

LoadModuleproxy_module modules/mod_proxy.so

LoadModuleproxy_fcgi_module modules/mod_proxy_fcgi.so

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

添加如下两项参数,在Directory中添加;若想使此项对虚拟主机生效,需添加至虚拟主机内部

ProxyRequestsOff

ProxyPassMatch^/(.*\.php)$ fcgi://127.0.0.1:9000/PATH/TO/DOCUMENT_ROOT/$1

修改   DirectoryIndex index.php index.html

添加:

AddType application/x-httpd-php .php

AddType application/x-httpd-php-source .phps

7、重启httpd24,编辑php测试

[[email protected]]# vim /usr/local/apache/htdocs/index.php

<?php

$conn=mysql_connect(‘127.0.0.1‘,‘root‘,‘root‘);

if ($conn)

echo "OK";

else

"Failure";

phpinfo();

?>

8、在浏览器输入url进行测试:

至此,php的fpm工作机制已搭建完成

时间: 2024-10-23 20:09:22

实现php-fpm的工作机制,编译LAMP_2015092101的相关文章

深入理解PHP之:Nginx 与 FPM 的工作机制

完全转载(算是一个收藏了) https://zhuanlan.zhihu.com/p/20694204 网络上有很多关于如何配置 Nginx + FPM 的文章,但它们更多从操作的角度出发,告诉我们怎么做,但却没有告诉我们为什么要这么做,本文从 Nginx 与 FPM 的工作机制出发,探讨配置背后的原理,让我们真正理解 Nginx 与 PHP 是如何协同工作的. 要说 Nginx 与 PHP 是如何协同工作的,首先得说 CGI (Common Gateway Interface) 和 FastC

BrnShop开源网上商城第三讲:插件的工作机制

这几天BrnShop的开发工作比较多,所以这一篇文章来的晚了一些,还请大家见谅呀!还有通知大家一下BrnShop1.0.312版本已经发布,此版本添加了报表统计等新功能,需要源码的园友可以点此下载.好了,我们现在进入今天的正题.关于BrnShop插件内容比较多,所以我分成两篇文章来讲解,今天先讲第一部分内容:插件的工作机制. 对于任意一种插件机制来说,基本上只要解决以下三个方面的问题,这个插件机制就算成功了.这三个方面如下: 插件程序集的加载 视图文件的路径和编译 插件的部署 首先是插件程序集的

JVM结构、GC工作机制详解

JVM结构.内存分配.垃圾回收算法.垃圾收集器. 一.JVM结构 根据<java虚拟机规范>规定,JVM的基本结构一般如下图所示: 从左图可知,JVM主要包括四个部分: 1.类加载器(ClassLoader):在JVM启动时或者在类运行时将需要的class加载到JVM中.(右图表示了从java源文件到JVM的整个过程,可配合理解. 关于类的加载机制,可以参考http://blog.csdn.net/tonytfjing/article/details/47212291) 2.执行引擎:负责执行

作业四:系统调用的工作机制

系统调用的工作机制 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 系统调用列表参见http://codelab.shiyanlou.com/xref/linux-3.18.6/arch/x86/syscalls/syscall_32.tbl 一.前情提要 系统调用 操作系统为用户态进程与硬件设备进行交互提供了一组接口 API 应用编程接口,是一个函数定义. 系统调用通过软中断向内核发出明确的请求.(eg:sysenter) 操作系统提供API和系统调用的关系 Libc库定义的

通过库函数API和C代码中嵌入汇编代码剖析系统调用的工作机制

作者:吴乐 山东师范大学<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 本次实验的主要内容就是分别采用API和gcc嵌入汇编的方式调用system_call.系统调用其实就是操作系统提供的服务.我们平时编写的程序,如果仅仅是数值计算,那么所有的过程都是在用户态完成的,但是我们想将变量打印在屏幕上,就必须调用printf,而printf这个函数内部就使用了write这个系统调用.操作系统之所以以system ca

详细深入分析 ClassLoader 工作机制

申明:本文首发于 详细深入分析 Java ClassLoader 工作机制 ,如有转载,注明原出处即可,谢谢配合. 详细深入分析 Java ClassLoader 工作机制 什么是 ClassLoader ClassLoader 作用 1ClassLoader 类结构分析 2ClassLoader 的等级加载机制 Java默认提供的三个ClassLoader ClassLoader加载类的原理 原理介绍 2为什么要使用双亲委托这种模型呢 3 但是JVM在搜索类的时候又是如何判定两个class是相

JavaScript工作机制:V8 引擎内部机制及如何编写优化代码的5个诀窍

概述 JavaScript引擎是一个执行JavaScript代码的程序或解释器.JavaScript引擎可以被实现为标准解释器,或者实现为以某种形式将JavaScript编译为字节码的即时编译器. 下面是实现了JavaScript引擎的一个热门项目列表: V8- 开源,由Google开发,用C++编写的 Rhino - 由Mozilla基金所管理,开源,完全用Java开发 SpiderMonkey-第一个JavaScript引擎,最早用在Netscape Navigator上,现在用在Firef

浏览器是怎样工作的 浏览器从头到尾的工作机制

浏览器是怎样工作的 浏览器从头到尾的工作机制 来源:互联网 作者:佚名 时间:12-12 14:44:10 [大 中 小] 前两天看到一篇不错的英文文章,叫做 How browsers work,该文概要的介绍了浏览器从头到尾的工作机制,包括HTML等的解析,DOM树的生成,节点与CSS的渲染等等,对于想学习浏览器源码的同学来说,实在是很棒的一篇科普文章,于是,我想分节挑重点翻译一下与大家分享 浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工 作原理,我们将看到,从你在地址栏输入goog

ClassLoader工作机制

本人在研究生阶段做JavaWeb开发时,当把项目发布到Tomcat上运行时,曾遇到过一个神奇的问题,这个问题由"CLassCastException"异常引起,当然这个异常很常见,其实我要说的神奇之处在于------我明明使用的是这个类本身new的对象,然后编译没有问题,但运行时却抛出这个异常.类似这样:MyClass mc=new MyClass(),异常就发生在这一句,是不是很奇怪了.为什么会类型转换失败? 一般来说,产生ClassCastException的主要原因有以下两点: