我使用 Ubuntu-16.04 搭建 apache 服务器,使用 php-fpm 处理 php 文件,我遵循这个帖子。配置后,我的 apache2 和 php7.0-fpm 服务正确重启。但是当我浏览 php 文件时,我得到的是一个纯文本文件。似乎没有 php cgi 来处理 php 文件。我怎么了?
我是 Apache 新手。所以我不知道该粘贴什么配置。我会根据您的回答发布必要的配置。谢谢!
我的安装步骤:
安装 PHP 和 PHP-fpm:
sudo apt-get install php libapache2-mod-php
sudo apt-get install libapache2-mod-fastcgi php7.0-fpm
启用 fastcgi 模式
sudo a2dismod php mpm_prefork
sudo a2enmod actions fastcgi alias mpm_worker
为 php7.0-fpm 创建全局配置
sudo vim /etc/apache2/conf-available/php7.0-fpm.conf
并在配置中写入:
<IfModule mod_fastcgi.c>
AddHandler php7.0-fcgi .php
Action php7.0.fcgi /php7.0.fcgi
Alias /php7.0-fcgi /usr/lib/cgi-bin/php7.0.fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php7.0.fcgi -socket /var/run/php7.0.fpm.sock -pass-header Authorization
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
</IfModule>
然后启用 php7.0-fpm 配置
sudo a2enconf php7.0-fpm
重新启动 apache 和 fpm
sudo service apache2 restart && sudo service php7.0-fpm restart
编辑/var/www/html/index.php
:
<?php
phpinfo();
?>
然后浏览http://localhost/index.php
,但得到的是文件内容而不是打印的页面。
答案1
您的配置有点不对。尝试以下操作:
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
<IfModule mod_fastcgi.c>
AddHandler php7-fcgi .php
Action php7-fcgi /php7-fcgi
Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header Authorization
</IfModule>
我在这里添加了它,并且效果很好:/etc/apache2/sites-available/000-default.conf
答案2
我在 Ubuntu 16.04 中安装 php7.0 时遇到了类似的问题。不要责怪我,但我认为问题与权限有关。我将 www-data 设为 /var/www 文件夹中所有文件的所有者和组,并将 chmod 权限更改为 drwxrwxr-x。这只是在我自己的开发服务器上,我在这方面没有那么多经验,所以使用时请自担风险。不过,它们可以很容易地撤消,也可以很容易地更改。