2015-09-08 6 views
7

Muszę więc uruchomić wiele aplikacji/witryn php na jednym serwerze. Jedna lub wiele z nich powinno działać z użyciem Apache i Mod_php5, a jeden lub wiele z nich powinno działać przy użyciu mod_fastcgi i php-fpm. Mod_php5 są obecnie w porządku, a te fastcgi działają, jeśli wyłączę mod_php5, ale mam problemy z ich uruchomieniem w tym samym czasie.Uruchamianie Apache mod_php i mod_fastcgi w oddzielnych vhostach na jednym serwerze Apache

Myślę, że można to osiągnąć za pomocą kombinacji atrybutu filesmatch, if.mod_fastcgi i if.mod_actions w apache, ale nie mogę ustalić, co to jest. W razie potrzeby możemy zainstalować dowolne moduły apache.

punkty super bonus, jeśli istnieje inna wersja vhost dla Apache 2.2 lub mniej i masz to fragment też, albo przynajmniej wiedzieć, co należy zrobić,

Im nie zamierza pisać całych vhosty mam jak wiem, że się mylisz, ale pierwsze, default, mod_php oparty vhostów wyglądają tak jak ...

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

Idealnie, chciałbym te pozostaną nietknięte, i że możemy dodać więcej gdybyśmy potrzebuję ich więcej.

Rezultat, który chciałbym, to móc wrzucić nowe vhosty skonfigurowane dla mod_php przy użyciu czegoś takiego jak pierwsza konfiguracja, a także upuść vhosts jak poniżej dla szybkiego cgi.

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

Jeśli mógłbyś opublikować drugi vhost lub powiedzieć mi, co robię źle, dziękuję z dużym wyprzedzeniem.

Odpowiedz

7

Mamy podobną konfigurację na naszych serwerach, aby uruchomić 2 wersje PHP, ale pod tym samym wirtualnym hostem. Zasadniczo jest to stara wersja oprogramowania podczas przejścia na nową wersję - 1 działa poprzez oryginalną konfigurację Apache, a druga za pośrednictwem CGI. Nasz jest oparty na katalogach, więc nieco inny, ale myślę, że powinien on nadal działać w twojej sytuacji.

Po pierwsze, mamy config FastCGI w oddzielnym pliku /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> 

Następnie w wirtualnym samej konfiguracji hosta mamy to:

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

Myślę, że kluczem rzeczą, która jest wymagana dla was jest AddHandler i SetHandler dyrektyw, które sprawiają, że działa. Wtedy powinieneś być w stanie dodać tyle oddzielnych witryn z różnymi katalogami lub pojedynczymi wirtualnymi hostami.

+0

Dziękuję kolego, to wszystko na temat handlerów. Pozdrawiam –

+0

Dobrze, że to zadziałało :) Musieliśmy dużo wypchać, żeby to wszystko działało również z PHPFarm. – JeremyB

Powiązane problemy