因此,我需要在一台服务器上运行多个php应用程序/站点。一个或多个应该使用apache和mod_php5运行,一个或多个应该可以使用mod_fastcgi和php-fpm运行。目前,mod_php5很好,如果我禁用mod_php5,则fastcgi可以工作,但是我很难让它们同时工作。
我认为可以使用文件匹配,if.mod_fastcgi和if.mod_actions在apache中的某种组合来实现,但是我无法弄清楚它是什么。如果需要,我们可以安装执行此操作所需的任何apache模块。
如果存在适用于Apache 2.2或更低版本的vhost的不同版本,并且您也具有该代码段,或者至少知道我应该怎么做,则可获得 super 加分
我不会发布我所拥有的整个虚拟主机,因为我知道它们是错误的,但是第一个默认的基于mod_php的虚拟主机看起来像这样...
#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配置的新虚拟主机,并且针对快速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>
如果您可以发布第二个虚拟主机,或者告诉我我做错了什么,请先谢谢。
最佳答案
我们在服务器上进行了类似的设置,以运行2个版本的PHP,但在同一虚拟主机上。从本质上讲,它是用于软件的旧版本,同时过渡到新版本-1通过原始Apache配置运行,另一个通过CGI运行。
我们的目录基于目录,因此略有不同,但是我认为它仍然可以根据您的情况运行。
首先,我们在单独的文件/etc/apache2/mods-enabled/fastcgi.conf中拥有fastCGI配置:
<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>
我认为您所需的关键是使它起作用的 AddHandler 和 SetHandler 指令。然后,您应该能够添加具有不同目录或单个虚拟主机的尽可能多的单独站点。
关于php - 在一台Apache服务器上的单独虚拟主机中运行Apache mod_php和mod_fastcgi,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32468735/