我已成功通过改编以下说明使 FastCGI 在 Ubuntu 16.04 上与 Apache 2.4 配合使用:这个 askubuntu 线程,此 HowtoForge 文档, 和这个 Digital Ocean 教程。
所有这些消息来源都表示创造 /etc/apache2/conf-available/php7.0-fpm.conf
并告诉你要放什么进去。但安装后php-fpm
,我已经有了这个文件,内容如下:
# Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php7.c>
# Enable http authorization headers
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
<FilesMatch ".+\.ph(p[3457]?|t|tml)$">
SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost"
</FilesMatch>
<FilesMatch ".+\.phps$">
# Deny access to raw php sources by default
# To re-enable it's recommended to enable access to the files
# only in specific virtual host or directory
Require all denied
</FilesMatch>
# Deny access to files without filename (e.g. '.php')
<FilesMatch "^\.ph(p[3457]?|t|tml|ps)$">
Require all denied
</FilesMatch>
</IfModule>
因此我创建了自己的 conf,并将说明中的代码放入其中并启用它。
现有的功能有什么php7.0-fpm.conf
用?如果我在配置中启用它,我的网站就会停止工作。我担心我没有按照预期的方式进行操作,将来可能会出现问题。很难找到关于此问题的良好、最新的文档。
作为参考,这是我的整个过程:
sudo apt install libapache2-mod-fastcgi php-fpm
sudo a2dismod php7.0 mpm_prefork
sudo a2enmod actions fastcgi alias mpm_worker
sudoedit /etc/apache2/conf-available/custom-fpm.conf
内容/etc/apache2/conf-available/custom-fpm.conf
:
<IfModule mod_fastcgi.c>
AddHandler php7-fcgi .php
Action php7-fcgi /php7-fcgi virtual
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
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
</IfModule>
命令继续:
sudo a2enconf custom-fpm
sudo systemctl restart apache2 && sudo systemctl restart php7.0-fpm
在此先感谢您的帮助。
答案1
我也遇到过同样的困惑,我理解你的痛苦。经过大量阅读,我发现大多数文章都已经过时了,而且引用了以前的方法(有时是组合)。
使用 PHP-FPM 和 Ubuntu 16.04 的内置配置,你可以仅有的需要这样做:
sudo a2enconf php7.0-fpm
sudo a2enmod proxy proxy_fcgi
我做了你所做的大部分事情,然后当那个自定义配置没有意义时,它就全部被删除了。
现有的 php7.0-fpm.conf 是做什么用的?
您发现软件包安装的配置用于使用 mod_proxy_fcgi。它通过 mod_proxy_fcgi 将 .php 文件绑定到 PHP FPM,使用 mod_proxy,通过 Unix 域套接字。据我所知,这是最新的“配方”(目前有六种可用配方!)
您不需要安装,libapache2-mod-fastcgi
这是另一种更老的方法。您不需要编写该配置 - 这是为了直接使用 mod_fastcgi。您不需要actions fastcgi alias
像配置 mod_fastcgi 那样进行安装。
我确实觉得很奇怪,没有任何文章 - 甚至是针对 Ubuntu 16 的文章 - 提到新的配方都是为你设置的!
这条评论为我澄清了历史:
现在首选的方法是 fastcgi,使用以下任一方法:
(mod_fastcgi,httpd 2.2) http://wiki.apache.org/httpd/php-fastcgi
(mod_fcgid,httpd 2.2) http://wiki.apache.org/httpd/php-fcgid
(mod_proxy_fcgi,httpd 2.4) http://wiki.apache.org/httpd/PHP-FPM
http://php.net/manual/en/install.unix.debian.php#112544(2013 年)
此外,Apache 的这篇文章详细介绍了使用 ProxyPassMatch 或 SetHandler + UDS 配置 mod_proxy_fcgi 连接到 FPM 的三个子选项。请注意,UDS 自 Apache 2.4.10 以来一直https://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html因此需要 trusty-backports 或更新版本。
https://wiki.apache.org/httpd/PHP-FPM
因此我认为现在有六种方法可以配置它:
大致按照历史顺序:
Apache PHP 模块:mod_php(旧方法)
通过 FastCGI - 使用 Handler/Action/Alias/FastCgiExternalServer 配置
mod_fastcgi 的用法和样例:
mod_fcgid 是用于将用户连接到计算机的单一设备。
通过 mod_proxy_fcgi 使用 PHP-FPM,可通过以下方式配置:
a. TCP 套接字(IP 和端口)ProxyPassMatch ... fcgi://127.0.0.1:9000/path/
b.Unix 域套接字 (UDS) ProxyPassMatch … unix:/path/to/socket
c. (UDS)通过 SetHandler "proxy:unix: 或 SetHandler "proxy:fcgi:
免责声明:这对我来说都是新的,所以我可能还有五件错误的事情和十件需要学习的事情。