apache2.4使用fastcgi+php-fpm或内置进程管理器解析php

想把Apache上的phphandler模块换成fastcgi+php-fpm,但是由于网上的资料都比较旧。自己研究了挺久,也踩了不少坑,终于成功弄好了,把经验写出来,希望可以帮助到有需要的人。

建议卸载从软件源安装的apache,php等要用到的程序,自己去官网下载源码编译安装。

apache2 :http://mirrors.shu.edu.cn/apache//httpd/httpd-2.4.33.tar.gz
php7:http://php.net/downloads.php
fastcgi:http://mirrors.shu.edu.cn/apache//httpd/mod_fcgid/mod_fcgid-2.3.9.tar.gz

安装apache2.4

tar xzf httpd-2.4.33.tar.gz  //解压
cd httpd-2.4.33 
./configure --prefix=/usr/local/apache  //把安装路径设为/usr/local/apache 

注意,这一步如果遇到不存在apr或apr-util文件的问题,请先安装apr和apr-util。安装步骤如下
apr:http://mirrors.shu.edu.cn/apache//apr/apr-1.6.3.tar.gz
apr-util:http://mirrors.shu.edu.cn/apache//apr/apr-util-1.6.1.tar.gz
下载源码,用上面的方法解压,进入到各自对应的解压后的目录,运行如下对应的指令安装对应的程序:

./configure --prefix=/usr/local/apr  
make
make install
./configure --prefix=/usr/local/apr-util  
make
make install

安装好后回到httpd安装目录,重新运行如下命令

./configure --prefix=/usr/local/apache --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/   
#指定apr和apr-util为刚刚安装的相应目录,注意不要忘了后面的/ 
make 
make install

安装php7

解压后进入到相应的目录

./configure --prefix=/usr/local/php --enable-fpm --with-apxs2=/usr/local/apache/bin/apxs --disable-cli
#这里的/usr/local/apache/bin/apxs为之前安装的apache目录中的路径,如果不同请自行指定/your_apache_path/bin/apxs。
#-disable-cli选项禁用命令行接口,如果不禁用,可能会因为环境没配置好在编译的时候出错
make 
make install

安装mod_fcgid

解压后进入到相应目录

APXS=/usr/local/apache/bin/apxs ./configure.apxs
#这里的apxs路径同上
make
make install 

以上软件安装完毕后,配置apache使用fcgi模式,配置文件/usr/local/apache/conf/httpd.conf

采用php内置进程管理器

#LoadModule php7_module        modules/libphp7.so
LoadModule cgid_module modules/mod_cgid.so
LoadModule fcgid_module modules/mod_fcgid.so
#注释掉php7_module模块,添加cgid_module和fcgid_module模块
<IfModule fcgid_module>
AddHandler php-fastcgi .php .fcgi #添加解释器php-fastcgi解析后缀为.php的文件
Action php-fastcgi /cgi-bin/php-cgi 
#因为上面添加的解释器不是apache内置的,所以我们在这里自行定义。
#查看/usr/local/apache/cgi-bin文件夹里面是否有php-cgi程序,如果没有,从/usr/local/php/bin/php-cgi拷贝 cp /usr/local/php/bin/php-cgi /usr/local/apache/cgi-bin/
#注意/cgi-bin/php-cgi不是绝对路径而是相对路径,不要写成cgi-bin/php-cgi
AddType application/x-httpd-php .php
AddType applicaiton/x-httpd-php-source .phps
</IfModule>

注意,在重启apache的时候如果出现invalid command ‘Action’ ,取消LoadModule actions_module modules/mod_actions.so这行的注释。

以上是最基本的配置,想添加其他配置的自行查阅配置文档

《apache2.4使用fastcgi+php-fpm或内置进程管理器解析php》 image.png

采用php-fpm管理

编辑httpd.conf

#LoadModule php7_module        modules/libphp7.so
#LoadModule cgid_module modules/mod_cgid.so
LoadModule fcgid_module modules/mod_fcgid.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
<IfModule fcgid_module>
#采用mod_proxy_fcgi模块来开启php-fpm
ProxyPassMatch "^/(.*\.php(/.*)?)$" "fcgi://localhost:9000/your_DocumentRoot_Path/$1" enablereuse=on
#比如我的DocumentRoot为/usr/local/apache/htdocs,就写成
#ProxyPassMatch "^/(.*\.php(/.*)?)$" "fcgi://localhost:9000/usr/local/apache/htdocs/$1" enablereuse=on
</IfModule>

更多关于mod_proxy_fcgid模块配置:http://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html
进入php目录配置php-fpm,如 /usr/local/php/etc/php-fpm.d/www.conf (没有就把php-fpm.d目录下的www.conf.default拷贝为www.conf

user = daemon
group = daemon
#改为和httpd.conf里一样的用户和组
listen = 127.0.0.1:9000
pm = dynamic

配置完毕运行php-fpm

cd /usr/local/php/sbin
sudo ./php-fpm
#或者放到后台运行
#sudo nohup ./php-fpm & > /dev/null

关于php-fpm的配置
更多配置选项:http://php.net/manual/zh/install.fpm.configuration.php
参考配置文件:http://www.4wei.cn/archives/1002061

《apache2.4使用fastcgi+php-fpm或内置进程管理器解析php》 image.png

如果帮助了你,希望留下你的评论让我更有分享的动力O(∩_∩)O~~

    原文作者:冰粒c
    原文地址: https://www.jianshu.com/p/d5ccb4c50604
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞