在一个Apache服务器上分别运行Apache mod_php和mod_fastcgi的方法,使用不同的虚拟主机(vhosts)。

10

所以,我需要在一个服务器上运行多个php应用/站点。其中一个或多个应使用apache和mod_php5运行,另外一个或多个应使用mod_fastcgi和php-fpm运行。目前,mod_php5的站点已经可以正常工作,如果禁用mod_php5,fastcgi的站点也可以正常工作,但是我无法让它们同时正常工作。

我认为可以通过在Apache中使用filesmatch、if.mod_fastcgi和if.mod_actions的某种组合来实现这一点,但我无法弄清楚具体方法。如果需要,我们可以安装任何必要的apache模块来完成此操作。

如果有适用于Apache 2.2或更低版本的不同版本的vhost,并且您也具有该片段,那将获得额外的奖励分数,或者至少知道我该怎么做。

我不会发布我拥有的所有vhosts,因为我知道它们是错误的,但第一个默认的基于mod_php的vhosts看起来像这样...

#NameVirtualHost 127.0.0.1:80     < Apache 2.2 or less    
 <VirtualHost 127.0.0.1:80>
   ServerAdmin webmaster@localhost
   ServerName some.site.tld
   DocumentRoot /var/www/some/site/
   <Directory /var/www/some/site/>
     Options Indexes FollowSymLinks MultiViews
     Require all granted
#               Order deny,allow     < Apache 2.2 or less
#               Allow from all     < Apache 2.2 or less
   </Directory>
   ErrorLog /var/log/apache2/error.log
   CustomLog /var/log/apache2/access.log combined
 </VirtualHost>

理想情况下,我希望这些保持不变,并且如果需要更多这样的内容,我们可以添加更多。

我想要的结果是能够像第一个配置那样轻松添加为mod_php配置的新虚拟主机,并且还可以像以下这样添加fast cgi虚拟主机。

# NameVirtualHost 0.0.0.0:80  < Apache 2.2 or Less
<VirtualHost 0.0.0.0:80>
   ServerAdmin webmaster@localhost
   ServerName some.application.tld
   DocumentRoot /opt/some/app/dir/
   ErrorLog /var/log/apache2/error.log
   CustomLog /var/log/apache2/access.log combined
   <IfModule mod_fastcgi.c>
     #     php_admin_flag engine off    < I tried to use this to disable PHP
     AddType application/x-httpd-fastphp5 .php
     Action application/x-httpd-fastphp5 /php5-fcgi
     Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi_someapp
     FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi_someapp -socket /var/run/php5-fpm_ptbuild.sock -pass-header Authorization
     <Directory /usr/lib/cgi-bin>
       Options Indexes FollowSymLinks MultiViews ExecCGI
       Require all granted
     </Directory>
     <Directory /opt/some/app/dir/>
       #Options Indexes FollowSymLinks MultiViews ExecCGI
       Require all granted
     </Directory>         
   </IfModule>
#    I tried to use the below alongside mod_php, didnt work
#    <IfModule mod_php5.c>
#        php_admin_flag engine off
#        AddType application/x-httpd-fastphp5 .php
#       <Directory /opt/some/app/dir/>
#               Options Indexes FollowSymLinks MultiViews ExecCGI
#               Require all granted
#       </Directory>
#    </IfModule>
</VirtualHost>
如果您可以发布第二个虚拟主机配置,或者告诉我我做错了什么,非常感谢您的提前帮助。
1个回答

8
我们的服务器上有类似的设置,可以运行两个版本的PHP,但在同一个虚拟主机下。基本上是为了在过渡到新版本的同时保持旧版本的软件 - 一个通过原始的Apache配置运行,另一个通过CGI运行。 我们的设置是基于目录的,所以稍有不同,但我认为它仍然适用于您的情况。
首先,我们将fastCGI配置保存在单独的文件/etc/apache2/mods-enabled/fastcgi.conf中:
<IfModule mod_fastcgi.c>
    #  AddHandler fastcgi-script .fcgi
    FastCgiWrapper /usr/lib/apache2/suexec
    FastCgiIpcDir /var/lib/apache2/fastcgi
    FastCgiConfig -idle-timeout 110 -killInterval 120 -pass-header HTTP_AUTHORIZATION -autoUpdate
    ScriptAlias /php-fcgi/ /var/www/cgi-bin/
</IfModule>

然后,在虚拟主机配置中我们有以下内容:
<VirtualHost *:80>
    ServerName sitename
    ...
    # Original non-CGI site
    <Directory "/sites/webroot/site1/">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride all
        Order allow,deny
        Allow from all
    </Directory>

    # FastCGI version
    <Directory "/sites/webroot/site2/">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
        AddHandler php-cgi .php
        Action php-cgi /php-fcgi/php562.fcgi
        <FilesMatch "\.php$">
            SetHandler php-cgi
        </FilesMatch>
    </Directory>
</VirtualHost>

我认为对你来说最重要的是使用AddHandlerSetHandler指令,这些指令可以使其正常工作。然后,您应该能够添加许多不同的站点,无论是具有不同目录还是单独的虚拟主机。

谢谢伙计,这都是关于处理程序的。干杯 - Pharaoh Tools
很高兴听到它起作用了 :) 我们不得不做很多工作才能让它与PHPFarm一起正常工作。 - JeremyB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接