想把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这行的注释。
以上是最基本的配置,想添加其他配置的自行查阅配置文档
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
image.png
如果帮助了你,希望留下你的评论让我更有分享的动力O(∩_∩)O~~