问题现象如下:
1. `info.php`文件在`/var/www/tp5/public/`目录下,访问`info.php`时,显示空白
2. `phpmyadmin`是个软链接,在`/var/www/tp5/public/`目录下,访问时,直接显示主页的原代码
3. `test.html`是个静态文件,访问时,可正常访问
mod_fcgid
、actions
模块,关闭了php_mod
模块/etc/apache2/mod-enalbed/fcgid.conf
<IfModule mod_fcgid.c>
FcgidConnectTimeout 20
<IfModule mod_mime.c>
AddHandler fcgid-script .fcgi
</IfModule>
</IfModule>
/etc/apache2/site-enabled/default.conf
### 注意,以下去掉注释为正确配置
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/tp5/public
DirectoryIndex index.php index.html
KeepAlive off
#FcgidWrapper /usr/lib/cgi-bin/php7.0 //这是指定php-cgi解析器的,没这个将服务器将返回500
<Directory "/var/www/tp5/public/">
Options +FollowSymLinks
#Options +ExecCGI //没这个选项,将返回403,被禁止
#AddHandler fcgid-script .php //没这个句,或着fcgid-script写错,页面无法显示任何东西
AllowOverride All
Require all Granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error_ctc.log
CustomLog ${APACHE_LOG_DIR}/access_ctc.log combined
</VirtualHost>
AddHandler fcgid-script .php
写成以 AddHandler fcgi-script .php
导致只能访问html,php无法访问,页面显示为空FcgidWrapper /usr/lib/cgi-bin/php7.0
时,html可正常访问,php文件访问:返回500
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator at webmaster@localhost to inform them of the time this error occurred, and the actions you performed just before this error.
More information about this error may be available in the server error log.
这个500问题如何解决呢,看下面
FcgidWrapper /usr/lib/cgi-bin/php7.0
这个坑很大这个里是指定fcgid的解析器,网上找了很久,都没找到这个解析器在本地的哪里。以为直接用/usr/bin/php
即可,用$ apache2ctl -t
测试配置文档是没问题的,然而返回的是500,报错更上成的是一样的,就好像没设置一样。
最后找了很,在这里mod_fcgid官网及fcgid的一个配置 发现FcgidWrapper
是怎么用的。于是猜想,是不是需要安装一个叫php-cgi
的东西呢? 于是式了一下 apt-get install php-cgi 真的有。安装后/usr/bin/php-cgi
与/usr/lib/cgi-bin/php7.0
都有可以用。松了一大口气
当时问题又来,查看了下phpinfo();发现php.ini没加载,如下;
Configuration File (php.ini) Path /etc/php/7.0/cgi
Loaded Configuration File (none)
心里,只要把php.ini放在 /etc/php/7.0/cgi
下就可以。打开该目录,里面是空的,奇怪。于是把php.ini 放到这里,结果又是显示上面的500错误。
猜想,是不是安装php-cgi时那些报错引起的?果然去另一台机安装时,发现里面真的有东西。(后来修复了php-cgi安装报错的问题,有了php.ini 发现还是一样报错,找到原因了,关闭beast.so扩展后,可正常访问,这个坑大了)
phpmyadmin
是站点内的软链接,访问时,主页的php原代码直接显示又是什么问题呢?根据上面的经验猜想,原来phpmyadmin在mod_php
模式下可正常访问。现在不可以访问说明路径是没问题,但是无法解析。于是猜想phpmyadmin的配置文件设置问题。/etc/apahce2/conf-avaiable/phpmyadmin
要是没有则把/etc/phpmyadmin/apache2.conf
拷贝过去AddHandler fcgid-script .php
重启apache2后,访问页面发现变成403了Options +ExecCGI
重启后,终于可正确解析php(但是我的报错了,说缺少模块,但是显然是执行了php,原因是我的php.ini配置问题,后来重新正确安装了php-cgi,把php.ini配置正常,就可正确显示了)/app/module/meth
通过路由规则的方式,访问url则无法访问,这个与mod_fcgid加php-fpm的方案好像是一样的问题。这个应该是路由重写的问题,使用index.php/app/module/meth
则可正常路由。因此需要解决路由的问题。暂进没解,原来在php_mod模式下可正常重写路由,而在php_fcgid中路由重写出问题了。
sudo apt-get install libapache2-mod-fcgid
sudo apt-get install php-cgi
sudo a2dismod php7.0
sudo a2enmod fcgid actions
关键配置
# 以下两条指令可放在公共conf下,如fcgid.conf中
FcgidWrapper /usr/lib/cgi-bin/php7.0 //这是指定php-cgi解析器的,没这个将服务器将返回500
AddHandler fcgid-script .php //没这个句,或着fcgid-script写错,页面无法显示任何东西 或显示原代码
# 以下指令必须放在指定目录下
#Options +ExecCGI //没这个选项,将返回403,被禁止,这表必须放在虚拟目录下
成功配置完成后的phpinfo()信息 中的 Server API
显示 CGI/FastCGI