使用 FPM 进行沙盒用户的 Debian 9 Stretch LAMP 设置

使用 FPM 进行沙盒用户的 Debian 9 Stretch LAMP 设置

我正在尝试在 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/

这个对我有用。

祝你好运

相关内容