Home >Backend Development >PHP Tutorial >LAMP组合 PHP以FPM模式工作

LAMP组合 PHP以FPM模式工作

WBOY
WBOYOriginal
2016-06-23 13:12:30988browse

fastcgi:php-5.3.3 之后的版本自带了fpm组件,

fpm组件能把PHP解释器工作为守护进程,并提供类似prefork模式的应用,它能够接收来自前端httpd,http-proxy-fcgi反向代理用户对动态内容请求至后端的fastcgi server

构建分离式LAMP需要注意的地方:

1、动态资源部署在应用程序服务器上(php-fpm),静态资源部署在Web服务器上

2、php以fpm工作方式时,它不会被编译成httpd模块,因此,编译时无须使用--with-apxs2=/PATH

参数,httpd的主配置文件中也无须再 LoadModule php5_module

把php编译为fpm工作模式时需要开启的重要的参数 --enable-fpm

3、编译php时,需连接mysql或其他数据库管理系统时,需要启用其相关的驱动模块。

4、php与mysql不在同一节点,连接mysql的用户账号需要有远程访问权限。

 

编译安装php

#tar xf php-5.4.0.tar.bz2

#cd php-5.4.0

#./configure --prefix=/usr/local/php --with-config-file-path=/etc/php/php.ini --with-config-file-scan-dir=/etc/php.d/ --enable-mbstring --with-freetype-dir--with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-xml--with-mcrypt --with-bz2 --with-openssl --with-curl --with-xsl --with-iconv=/usr/local/libiconv --enable-sockets --enable-short-tags --enable-static --enable-gd-native-ttf --enable-ftp --enable-maintainer-zts --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --enable-fpm

#make && make install

为php提供配置文件

#mkdir /etc/{php,php.d} �pv

#cp php.ini-production /etc/php/php.ini

配置php-fpm

#cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm  (服务脚本)

#chmod +x /etc/rc.d/init.d/php-fpm (添加执行权限)

#chkconfig �add php-fpm (添加到服务列表中)

#chkconfig php-fpm on

为php-fpm提供配置文件

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

编辑php-fpm的配置文件,配置fpm的相关选项为你所需要的值,并启用pid文件(如下最后一行):

# vim /usr/local/php/etc/php-fpm.conf

listen = 192.168.100.114:9000

pm.max_children = 50   ###静态方式下开启的php-fpm进程数量

pm.start_servers = 5   ###动态方式下的起始php-fpm进程数量

pm.min_spare_servers = 2   ###动态方式下的最小php-fpm进程数量

pm.max_spare_servers = 8   ###动态方式下的最大php-fpm进程数量

pid = /usr/local/php/var/run/php-fpm.pid    ###PID文件路径

 

说明:如果dm设置为static,那么其实只有pm.max_children这个参数生效。系统会开启设置数量的php-fpm进程。

如果dm设置为 dynamic,那么pm.max_children参数失效,后面3个参数生效。

系统会在php-fpm运行开始的时候启动pm.start_servers个php-fpm进程,然后根据系统的

需求动态在pm.min_spare_servers 和pm.max_spare_servers之间调整php-fpm进程数。

当php-fpm工作为独立守护进程时,默认监听在127.0.0.1:9000 端口上,即默认至允许本机上的

httpd进程访问,当前环境是httpd和php分别在不同服务器安装,因此要修改监听端口,让其他主机

能够访问。

各自以fast-cgi方式工作时,前端的Web服务器必须以fcgi模块跟后端主机进行通信。

 

启动php-fpm

#service php-fpm start

验证是否启动成功

#netstat �tnlp|grep php-fpm

tcp        0      0 192.168.100.114:9000        0.0.0.0:*                   LISTEN      32873/php-fpm

 

httpd相关配置

1、启用httpd的相关模块

在Apache httpd2.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

开启虚拟主机开关

Include /etc/httpd/extra/httpd-vhosts.conf

2、配置虚拟主机支持使用fcgi

在相应的虚拟主机中添加类似如下两行:

ProxyRequests Off

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

ProxyRequests Off:关闭正向代理

ProxyPassMatch:把以.php结尾的文件请求发送到php-fpm进程,php-fpm至少需要知道运行的目录和URI

所以这里直接在fcgi://127.0.0.1:9000 后指明了这两个参数

其它的参数的传递已经被mod_proxy_fcgi.so进行了封装,不需要手动指定。

需要注意的问题:

动态资源需要放在PHP服务器上,当httpd服务器接收到客户端浏览器请求的是动态页面内容时,

会把请求发往指定的PHP服务器上处理,但是静态页面例如:html、jpg等还是会在httpd服务器上

处理,不然图片等信息可能就无法显示,因此在部署网站时,需要把网站的资源分开部署在两边。

分别在HTTPD服务器和PHP服务器上各自创建同样路径的目录,不然启动httpd服务时会报错。

编辑虚拟主机配置文件:

# vim /etc/httpd/extra/httpd-vhosts.conf

ServerAdmin admin@luanyh.com

DocumentRoot "/data/web/www/"

ServerName phpinfo.luanyh.com

ServerAlias luanyh.com

ProxyRequests Off

ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.100.114:9000/data/web/www/$1

ErrorLog "/usr/local/apache/logs/phpinfo-error_log"

CustomLog"/usr/local/apache/logs/phpinfo-access_log" common

AllowOverride None

Options None

Require all granted

DirectoryIndex index.php index.html

创建虚拟主机主页(在PHP Server上),测试httpd能否支持php

# vim /data/web/www/index.php

编辑如下内容:

phpinfo();

?>

客户端浏览器上测试:

此时,Server API 工作模式为:FPM/FastCGI

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn