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

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

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

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

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

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


person Pharaoh Tools    schedule 08.09.2015    source источник


Ответы (1)


У нас есть аналогичная настройка на наших серверах для запуска двух версий 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, которые заставят его работать. Затем вы сможете добавить столько отдельных сайтов либо с разными каталогами, либо с отдельными виртуальными хостами.

person JeremyB    schedule 09.09.2015
comment
Спасибо, приятель, все дело в обработчиках. Ваше здоровье - person Pharaoh Tools; 09.09.2015
comment
Приятно слышать, что это сработало :) Нам пришлось проделать много работы, чтобы все это заработало и с PHPFarm. - person JeremyB; 09.09.2015