在一台服务器上部署应用,发现已有的php版本较老,直接升级又怕影响现有应用,于是决定两个版本并存,并通过fastcgi方式调用php。
安装和设置过程简要如下:
# 安装fastcgi模块
yum install mod_fcgid
设置apache通过fastcgi方式调用php:
<Location /php54>
Options +ExecCGI
Require all granted
AddHandler fcgid-script .php
FcgidWrapper "/bin/php-cgi" .php
</Location>
设置好后,写一个测试文件hello.php放到对应目录下:
<?php
var_dump(PHP_SAPI);
一访问,发现无法用,症状是浏览器一直在等待服务器响应。这说明配置已经生效,而问题应该出在apache与php之间的交互上。
检查日志/var/log/httpd/error_log
,果然发现有很多像这样的错误行:
[fcgid:error] [pid 21678] (13)Permission denied: mod_fcgid: couldn't bind unix domain socket /run/mod_fcgid/21678.0
查看了一下目录/run/mod_fcgid
,发现创建者是root,其它用户没有写权限。于是将该目录的所有者或权限更新一下,然后就能够成功访问了:
# 改为apache使用的用户,比如www:
chown -R www:www /run/mod_fcgid
# 或者加读写权限:
chmod 777 /run/mod_fcgid