![使用 ProxyPassMatch 复制 mod_fastcgi(PHP-FPM 设置)](https://linux22.com/image/630451/%E4%BD%BF%E7%94%A8%20ProxyPassMatch%20%E5%A4%8D%E5%88%B6%20mod_fastcgi%EF%BC%88PHP-FPM%20%E8%AE%BE%E7%BD%AE%EF%BC%89.png)
我想从 Apache 2.2 迁移到 Apache 2.4,但没有mod_fastcgi
,推荐的升级路径是mod_proxy_fcgi
但是我不知道如何完成以下任务:
<IfModule mod_fastcgi.c>
Alias /php5.fcgi /usr/local/www/fastcgi/php5.fcgi
FastCGIExternalServer /usr/local/www/fastcgi/php5.fcgi -flush -host 127.0.0.1:9000
AddType application/x-httpd-fastphp5 .php
Action application/x-httpd-fastphp5 /php5.fcgi
<Directory "/usr/local/www/fastcgi/">
Order deny,allow
Deny from all
<Files "php5.fcgi">
Order allow,deny
Allow from all
</Files>
</Directory>
</IfModule>
这允许所有虚拟主机和所有需要 PHP 的内容使用单个 PHP-FPM 进程,新ProxyPassMatch
要求我为每个 vhost 设置单独的条目,这很耗时并且容易出错......
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/path/to/vhost/$1
现在我已经恢复到 Apache 2.2,但我很想找到解决此问题的方法。
答案1
您可以使用服务器变量来实现您想要的:这个问题的答案可能会对您有所帮助:
答案2
首先,您需要明确是否要为每个域设置单独的进程池。如果要,则需要将域映射到每个池的单独 fastgi 端口。
如果您要为每个域设置一个 php 进程池,则建议的配置方法或类似方法是必不可少的。如果您不这样做,那么您的所有域都必须使用相同的用户 ID 运行,这使得它们彼此之间非常暴露,例如,如果这些是单独的托管客户端。如果它们都是您自己的东西,并且没有太多需要保护的东西,那么您可能不太在意。例如,如果您只是停放域名,那么每个域一个用户可能是一种愚蠢的资源浪费。
如果您托管许多人的网站,那么我认为负责任的做法是,您应该转向为每个用户设置一个进程池。但我并不是说这将是一个简单的过渡,是的,存在资源问题,尽管配置管理部分应该相对容易。您需要某种脚本系统来生成配置。我选择的工具是 puppet,但还有很多替代方案。
无论您是否采纳该建议,您首先都要做出决定,然后重新表述有关如何实现目标的机制的问题。