Запуск Apache mod_php и mod_fastcgi в отдельных vhosts на одном сервере Apache

Итак, мне нужно запустить несколько php-приложений/сайтов на одном сервере. Один или многие должны запускаться с использованием apache и mod_php5, и один или многие из них должны работать с использованием mod_fastcgi и php-fpm. В настоящее время mod_php5 отлично работает, а fastcgi работают, если я отключил mod_php5, но мне трудно заставить их работать одновременно.

Я думаю, что это может быть достигнуто с использованием некоторой комбинации filesmatch, if.mod_fastcgi и if.mod_actions в apache, но я не могу понять, что это такое. Мы можем установить любые модули apache, необходимые для этого, если это необходимо.

Супер бонусные очки, если есть другая версия vhost для Apache 2.2 или меньше, и у вас есть этот фрагмент, или, по крайней мере, знаете, что я должен делать

Я не собираюсь публиковать все 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>

В идеале, я бы хотел, чтобы они остались нетронутыми, и что мы можем добавить больше, если нам нужно больше.

В результате я хочу, чтобы у вас появились новые vhosts, настроенные для mod_php, используя что-то вроде первой конфигурации, а также для добавления быстрых cgi в vhosts, как показано ниже.

# 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>

Если бы вы могли опубликовать второй vhost или сказать мне, что я делаю неправильно, спасибо очень многое заранее.

1 ответ

У нас есть аналогичная настройка на наших серверах для запуска 2-х версий PHP, но под тем же виртуальным хостом. По сути, это для старой версии программного обеспечения при переходе на новую версию - 1 проходит через исходную конфигурацию Apache, а другая через CGI. Наш каталог основан, поэтому немного отличается, но я думаю, что он должен работать для вашей ситуации.

Сначала у нас есть конфигурация fastCGI в отдельном файле /etc/apache 2/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>

Я думаю, что ключевая вещь, которая вам нужна, это директивы AddHandler и SetHandler, которые заставляют ее работать. Затем вы сможете добавить столько отдельных сайтов либо с разными каталогами, либо с отдельными виртуальными хостами.

licensed under cc by-sa 3.0 with attribution.