使用 ProxyPassMatch 复制 mod_fastcgi(PHP-FPM 设置)

使用 ProxyPassMatch 复制 mod_fastcgi(PHP-FPM 设置)

我想从 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

您可以使用服务器变量来实现您想要的:这个问题的答案可能会对您有所帮助:

与 apaches 代理密码匹配使用时,0 不会被服务器名称替换

答案2

首先,您需要明确是否要为每个域设置单独的进程池。如果要,则需要将域映射到每个池的单独 fastgi 端口。

如果您要为每个域设置一个 php 进程池,则建议的配置方法或类似方法是必不可少的。如果您不这样做,那么您的所有域都必须使用相同的用户 ID 运行,这使得它们彼此之间非常暴露,例如,如果这些是单独的托管客户端。如果它们都是您自己的东西,并且没有太多需要保护的东西,那么您可能不太在意。例如,如果您只是停放域名,那么每个域一个用户可能是一种愚蠢的资源浪费。

如果您托管许多人的网站,那么我认为负责任的做法是,您应该转向为每个用户设置一个进程池。但我并不是说这将是一个简单的过渡,是的,存在资源问题,尽管配置管理部分应该相对容易。您需要某种脚本系统来生成配置。我选择的工具是 puppet,但还有很多替代方案。

无论您是否采纳该建议,您首先都要做出决定,然后重新表述有关如何实现目标的机制的问题。

相关内容