我刚刚在 Ubuntu 18.04 服务器上安装了 LAMP,但无法让 PHP fastcgi 工作。
这是我的设置:
我的 fpm PHP 文件/etc/php/7.2/fpm/pool.d/sites.mydomain.conf
::
[sites.mydomain]
...
user = sites
group = sites
...
listen = /run/php/php7.2-fpm.sites.mydomain.sock
...
listen.owner = www-data
listen.group = www-data
然后:
sudo service php7.2-fpm reload
sudo service php7.2-fpm restart
我的虚拟主机文件
/etc/apache2/sites-available/sites.mydomain.conf
:
ServerName sites.mydomain
ServerAdmin webmaster@localhost
DocumentRoot /srv/www/sites/html
<IfModule mod_fastcgi.c>
AddHandler php7-fcgi-sites .php
Action php7-fcgi-sites /php7-fcgi-sites
Alias /php7-fcgi-sites /usr/lib/cgi-bin/php7-fcgi-sites
FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi-sites -idle-timeout 60 -socket /var/run/php/php7.2-fpm.sites.mydomain.sock -pass-header Authorization
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
</IfModule>
<Directory /srv/www/sites/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Require all granted
</Directory>
然后:
sudo a2enmod actions
sudo service apache2 restart
但是PHP在运行脚本时不会被解释,页面会以纯文本的形式显示。
有人能告诉我我的设置出了什么问题吗?
注意:我在我的 Ubuntu 16.04 服务器上以完全相同的方式设置它,并且运行良好。
答案1
不幸的是,我采纳了这里答案的建议,但这些答案要么不正确,要么离题万里。
经过一番挖掘,我意识到有问题的模块(proxy_fcgi)实际上是bionic apache2-bin 包的一部分
因此需要的是:
a2enmod proxy_fcgi
答案2
最后,无需安装该libapache2-mod-fastcgi
软件包。
技巧在文件中etc/apache2/sites-available/sites.mydomain.conf
(参见我上面的例子)。将部分
替换<IfModule mod_fastcgi.c>
为
<FilesMatch "\.php$">
SetHandler "proxy:unix:///var/run/php/php7.2-fpm.sites.mydomain.sock|fcgi://sites/"
</FilesMatch>
就大功告成了。
希望这对你有帮助。
答案3
所以...我对此进行了一些挖掘。
首先,mod_fcgid 似乎是 mod_fastcgi 的免费版本,但每个流发送的请求较少,因此速度较慢。
但两者似乎都相当过时了,而且 libapache2-mod-fastcgi 包似乎由于各种原因从 Debian 中撤出:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=835374
但是,从 apache 2.4.10 开始,最好将 mod_proxy_fcgi 模块与 php fpm 一起使用。https://serverfault.com/questions/783173/differences-between-mod-fastcgi-and-mod-proxy-fcgi
希望这能帮助您理清思路。大多数 php-fpm 指南似乎尚未针对 mod_proxy_fcgi 的使用进行更新,因此可能会造成混淆。
答案4
我从 17.10 升级到 18.04,页面只是加载 php 文件的内容,而不是渲染页面。我所要做的就是使用/etc/apache2/mods-enabled/fastcgi.conf
以下内容更新我的文件:
<IfModule mod_fastcgi.c>
AddHandler php7-fcgi-sites .php
Action php7-fcgi-sites /php7-fcgi-sites
Alias /php7-fcgi-sites /usr/lib/cgi-bin/php7-fcgi-sites
FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi-sites -idle-timeout 60 -socket /var/run/php/php7.2-fpm.sock -pass-header Authorization
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
</IfModule>