Итак, мне нужно запустить несколько приложений / сайтов 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 или сказать мне, что я делаю неправильно, большое спасибо заранее.
На наших серверах есть аналогичная настройка для запуска двух версий 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 директивы, которые заставляют это работать. Тогда вы сможете добавить столько отдельных сайтов, либо с разными каталогами, либо с отдельными виртуальными хостами.
Других решений пока нет …