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

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

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

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

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

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

В результате я хотел бы иметь возможность добавить новых vhosts, настроенных для mod_php, используя что-то вроде первой конфигурации, а также добавить vhosts, как показано ниже, для быстрого 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>

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

8

Решение

На наших серверах есть аналогичная настройка для запуска двух версий PHP, но под одним и тем же виртуальным хостом. По сути, это для старой версии программного обеспечения при переходе на новую версию — 1 проходит через исходную конфигурацию 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>

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

8

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]