设为首页 收藏本站
查看: 1157|回复: 0

[经验分享] LAMP组合 PHP以FPM模式工作

[复制链接]

尚未签到

发表于 2018-12-17 08:31:14 | 显示全部楼层 |阅读模式
  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
  编辑如下内容:
  
  客户端浏览器上测试:
  此时,Server API 工作模式为:FPM/FastCGI




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-652226-1-1.html 上篇帖子: PHP 中获取当前url地址 下篇帖子: php7 编写函数[1]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表