由于有一个需求,希望前端请求后服务器可以直接返回,不用等待服务器端长时间的处理,查找一番发现PHP有fastcgi_finish_request()函数可以满足需求,但需要运行在FastCGI模式时,并且是需要PHP-FPM进程管理器才有这个功能。于是乎网上找了资料,发现没有比较完整的记录,折腾了一下午才搞掂,做个总结吧。
1.环境
Ubuntu 18.04 64位
Apache2.4.29(apt自动挡安装)
PHP 7.2(apt自动挡安装)
2.过程
2.1.安装fastcgi
1 | $ sudo apt install libapache2-mod-fcgid |
一个坑
对应的模块是mod_fcgid,网上搜到很多教程用的实际是mod_fastcgi,结果配置老是不对,版本的区别可以看[这里][1]。
2.2.安装php-cgi、php-fpm
1 | $ sudo apt install php-cgi |
Tips
php-fpm会开启多个php-cgi程序进行管理,需要安装php-cgi。
2.3.启用模块
1 | $ sudo a2dismod php7.2 |
Tips
php7.2 mod是内置进程管理器,需要关闭。安装php-fpm会加入/etc/apache2/conf-enabled/php7.2-fpm.conf,包含了mod_proxy_fcgi模块的设置,不需要额外设置。
2.4.配置fcgid模块
编辑/etc/apache2/mods-enabled/fcgid.conf,加入以下配置
1 | <IfModule mod_fcgid.c> |
2.5.配置目录权限
编辑/etc/apache2/apche2.conf,给网址目录加上ExecCGI权限
1 | <Directory /var/www> |
!!! info 目录
包含有FCGI脚本的目录要加上,否则可省略。
!!!
2.6.重启apache2生效
1 | $ sudo service apache2 restart |