2015-09-08 33 views
7

Quindi, ho bisogno di eseguire più app/siti php su un server. Uno o molti dovrebbero funzionare usando apache e mod_php5, e uno o molti dovrebbero essere in grado di funzionare usando mod_fastcgi e php-fpm. I mod_php5 sono corretti e quelli fastcgi funzionano se disattivo mod_php5, ma ho difficoltà a farli funzionare allo stesso tempo.Esecuzione di Apache mod_php e mod_fastcgi in vhosts separati su un server Apache

Penso che questo possa essere ottenuto utilizzando una combinazione di filesmatch, if.mod_fastcgi e if.mod_actions in apache, ma non riesco a capire cosa sia. Possiamo installare tutti i moduli Apache necessari per farlo, se necessario.

punti bonus Super se c'è una versione diversa del vhost per Apache 2.2 o meno e hai questo frammento di troppo, o almeno sapere che cosa devo fare

Im non andando a inviare l'intero vhosts i hanno come so che si sbagliano, ma le prime, di default, vhosts mod_php basato stanno cercando in questo modo ...

#NameVirtualHost 127.0.0.1:80  < Apache 2.2 or less  
<VirtualHost 127.0.0.1:80> 
    ServerAdmin [email protected] 
    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> 

Idealmente, vorrei questi rimangano intatti, e che possiamo aggiungere di più se ci bisogno di più di questi

Il risultato che mi piacerebbe, è quello di poter rilasciare nuovi vhosts configurati per mod_php usando qualcosa come la prima configurazione, e anche rilasciare vhosts come il seguente per cgi veloce.

# NameVirtualHost 0.0.0.0:80 < Apache 2.2 or Less 
<VirtualHost 0.0.0.0:80> 
    ServerAdmin [email protected] 
    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> 

Se potessi pubblicare il secondo vhost o dirmi cosa sto facendo male, grazie molto in anticipo.

risposta

7

Abbiamo una configurazione simile sui nostri server per eseguire 2 versioni di PHP, ma con lo stesso host virtuale. Essenzialmente si tratta di una vecchia versione del software mentre si passa a una nuova versione: 1 esegue la configurazione originale di Apache e l'altra tramite CGI. La nostra è basata su directory, quindi leggermente diversa ma penso che dovrebbe funzionare ancora per la tua situazione.

In primo luogo, abbiamo la configurazione di FastCGI in un file separato /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> 

Poi, nella configurazione dell'host virtuale per sé abbiamo questo:

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

Penso che la cosa fondamentale che è necessario per voi è la AddHandler e SetHandler direttive che farlo funzionare. Quindi dovresti essere in grado di aggiungere tanti siti separati con directory diverse o singoli host virtuali.

+0

Grazie amico, è tutto sugli handler. Cheers –

+0

Buono a sentirlo ha funzionato :) Abbiamo dovuto fare un sacco di cose da fare per far funzionare tutto questo anche con PHPFarm. – JeremyB