我正在尝试在 Debian 9 上设置 Apache 和 FPM,就像我们之前在 Debian 7 和 8 上所做的那样。我认为,由于 Apache 2.4 中 mod_fastcgi 被弃用,取而代之的是 mod_proxy_fcgi,并且随后将其从 Debian 9 apt 存储库中删除,我无法完成之前的设置。基本上,我们使用 FPM 在单个服务器(暂存/开发服务器)上对多个站点进行沙盒处理。最终结果是每个站点都归每个用户所有并分组,并且 FPM 在该特定用户的进程下运行该站点。
下面是我们使用的 Apache vhost 示例:
FastCgiExternalServer /home/siteusername/www/php5-fcgi -socket /tmp/php5-fpm-siteusername.sock -pass-header Authorization
<VirtualHost *:80>
DocumentRoot /home/username/www/domain.com/public_html/
ServerName www.domain.com
<Directory /home/siteusername/www/domain.com/public_html/>
AllowOverride all
</Directory>
<Directory /home/siteusername/www/>
Require all granted
AllowOverride all
</Directory>
AddHandler php5-fcgi .php
Action php5-fcgi /php5-fcgi
Alias /php5-fcgi /home/siteusername/www/php5-fcgi
<ifModule mod_headers.c>
Header set X-Robots-Tag "noindex"
</ifModule>
</VirtualHost>
以下是我们使用的 FPM 配置示例:
[siteusername]
listen = /tmp/php5-fpm-siteusername.sock
listen.allowed_clients = 127.0.0.1
listen.owner = www-data
listen.group = www-data
user = siteusername
group = siteusername
pm = ondemand
pm.max_children = 50
php_admin_value[upload_tmp_dir] = /home/siteusername/tmp/upload
php_admin_value[session.save_path] = /home/siteusername/tmp/session
在装有 Apache 2.4、PHP 7.0、FPM 7.0 和 mod_proxy_fcgi(以及更新的版本号)的 Debian 9 上进行上述精确设置会导致启动 Apache 时出现错误:
Invalid command 'FastCgiExternalServer', perhaps misspelled or defined by a module not included in the server configuration
我假设该命令是 mod_fastcgi 的一部分,没有它,我似乎无法在自己的用户下运行这些网站。相反,它们在 www-data 下运行,就像任何正常配置的 Apache 网站一样。
到目前为止,我还没有找到有关如何完成此配置的文档。有人知道 mod_proxy_fcgi 的更新配置是什么吗?
答案1
尝试这个。
在您的 FPM 定义中,调整套接字名称以匹配正确的 php 版本
[siteusername]
listen = /tmp/php7-fpm-siteusername.sock
(在 Debian 9 中不再是 php5 而是 php7)
在您的 Vhost 定义中删除以下内容
FastCgiExternalServer /home/siteusername/www/php5-fcgi -socket /tmp/php5-fpm-siteusername.sock -pass-header Authorization
...
AddHandler php5-fcgi .php
Action php5-fcgi /php5-fcgi
Alias /php5-fcgi /home/siteusername/www/php5-fcgi
在同一个 vhost 定义中添加以下内容
<FilesMatch \.php$>
SetHandler "proxy:unix:/tmp/php7-fpm-siteusername.sock|fcgi://localhost"
</FilesMatch>
另外,您可以在 vhost 定义中添加以下内容
ProxyPassMatch "^/(.*\.php(/.*)?)$" "unix:/tmp/php7-fpm-siteusername.sock|fcgi://localhost/home/siteusername/www/"
确保已启用模块 mod_proxy 和 mod_proxy_fcgi
a2enmod proxy proxy_fcgi
答案2
我和你的情况一样,并且我找到了这个解决方案。
https://www.devops.zone/webserver/installing-php7-fpm-with-apache2-worker-on-ubuntu/
这个对我有用。
祝你好运