2015-06-10 12 views
5

Ok, andando leggermente fuori di testa cercando di capirlo. (Ho letto centinaia di domande/risposte, e articoli di Google, ma nessuno ha risposto)Specificare il file ini PHP per vhost, con la configurazione FastCGI/PHP-fpm

ho appena cambiato da utilizzare mod_php al utilizzando PHP tramite FastCGI e FPM, utilizzando il metodo descritto in this question, semplicemente perché ero sotto l'impressione è stato 'facile' specificare i file php.ini per i singoli vhosts usando questo set-up.

Quello che sto tirando fuori i miei capelli, è come posso specificare un file PHP ini personalizzato ogni vhost utilizza?

Per fortuna, è solo il mio banco di prova finora ... ma spero di fare lo stesso sul mio server di produzione se riesco mai a capire questo fuori

+0

Per quanto riguarda la mia esperienza: puoi definire configurazioni di host virtuali per vhost (chiamate 'vhost.conf' sul nostro server) anche se abbiamo 1 php.ini per l'intero server. – tvgemert

risposta

4

ho pensato che forse come-bene inviare l'intero processo ho preso per configurare fpm con piscine, come detto @ChristianM, perché non ho ancora trovato una spiegazione completa su come farlo.

La prima parte di questo è per lo più una copia di un messaggio Ask Ubuntu: https://askubuntu.com/questions/378734/how-to-configure-apache-to-run-php-as-fastcgi-on-ubuntu-12-04-via-terminal/527227#comment905702_527227

L'ultima parte è come configurare piscine, e di ottenere il vhost per utilizzare le impostazioni del pool relevent

qui va :

Installare il lavoratore apache mpm (Spiegazione di prefork/wroker ed evento a http://www.vps.net/blog/2013/04/08/apache-mpms-prefork-worker-and-event/):

sudo apt-get install apache2-mpm-worker 

Installare FastCGI e PHP5-FPM:

sudo apt-get install libapache2-mod-fastcgi php5-fpm 

Ora consentono mods si ha bisogno, e disattivare quelli che non lo fai:

sudo a2dismod php5 mpm_prefork 
sudo a2enmod actions fastcgi alias mpm_worker 

Creare il file php5.fcgi e dare il permesso di utilizzare server web esso.

sudo touch /usr/lib/cgi-bin/php5.fcgi 
sudo chown -R www-data:www-data /usr/lib/cgi-bin 

Creare una configurazione globale per php5-fpm

sudo nano /etc/apache2/conf-available/php5-fpm.conf 

incollare il seguente (useremo un socket invece dell'indirizzo IP)

<IfModule mod_fastcgi.c> 
  AddHandler php5.fcgi .php 
  Action php5.fcgi /php5.fcgi 
  Alias /php5.fcgi /usr/lib/cgi-bin/php5.fcgi 
  FastCgiExternalServer /usr/lib/cgi-bin/php5.fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization -idle-timeout 3600 
  <Directory /usr/lib/cgi-bin> 
  Require all granted 
    </Directory> 
</IfModule> 

Nota: Assicurarsi che tutte le configurazioni segui la stessa sintassi 'Require all granted'/'Require all denied' ... Altrimenti sentirai il dolore dopo il riavvio ...

Attivare la conf php5-fpm

sudo a2enconf php5-fpm 

Riavviare apache e FPM

sudo service apache2 restart && sudo service php5-fpm restart 

Questa impostazione essenzialmente crea una configurazione FastCGI globale per PHP, che utilizza il file/etc/php5/FPM/file php.ini.

Se si dispone di più vhosts, che stanno andando ad avere bisogno di diverse configurazioni di PHP, continuare con l'esempio qui sotto

In primo luogo, all'interno della dir /etc/php5/fpm/pool.d, si trova il www di default file .conf. Copia questo, chiamandolo qualcosa relevent:

sudo cp /etc/php5/fpm/pool.d/www.conf /etc/php5/fpm/pool.d/domain2.conf 

Modifica questo file, cambiando il nome del pool:

[...] 

[domain2] 

[...] 

E cambiare il nome del socket ascoltare qualcosa relevent:

[...] 

listen = /var/run/php5-fpm-domain2.sock 

[...] 

Poi copia il file /usr/lib/cgi-bin/php5.fcgi, ancora una volta nominandolo qualcosa di rilevante:

cp /usr/lib/cgi-bin/php5.fcgi /usr/lib/cgi-bin/php5-domain2.fcgi 

Ora sei pronto per aggiungere il modulo mod_fastcgi al dominio vhost. E 'quasi la stessa di quella descritta sopra, a meno di notare i cambiamenti per 'Alias', 'FastCgiServer' e '-socket'

<VirtualHost *:80> 
     ServerName domain2.com 

     [...] 

     <IfModule mod_fastcgi.c> 
     AddHandler php5.fcgi .php 
    Action php5.fcgi /php5.fcgi 
     Alias /php5.fcgi /usr/lib/cgi-bin/php5-domain2.fcgi 
     FastCgiExternalServer /usr/lib/cgi-bin/php5-domain2.fcgi -socket /var/run/php5-fpm-domain2.sock -pass-header Authorization -idle-timeout 3600 
    <Directory /usr/lib/cgi-bin> 
     Require all granted 
    </Directory> 
    </IfModule> 

    [...] 

</VirtualHost> 

Riavviare apache e FPM

sudo service apache2 restart && sudo service php5-fpm restart 

ora per testare le modifiche.

nel nuovo file /etc/php5/fpm/pool.d/domain2.conf, aggiungere un cambio di valore php (ho scelto il valore session.name):

[...] 

php_admin_value[session.name] = 'DOMAIN2' 

[...] 

testare la configurazione prima di riavviare FPM:

sudo php5-fpm -t 

vi dirà se la configurazione non riesce, ma soprattutto vi dirà se la configurazione va bene. Poi si può andare avanti e riavviare FPM:

sudo service php5-fpm restart 

E, infine, se si vuole essere super sicuro che il valore php è stato impostato, creare info.php all'interno del tuo sito, e basta aggiungere:

<?php 
 phpinfo(); 
?> 
4

Purtroppo non è possibile impostare un php. file ini per vhost. Quello che puoi fare è configurare diversi php-fpm pool e dare a ciascuno una serie di valori di configurazione php che impostano/sovrascrivono qualcosa dalla configurazione predefinita (condivisa). Vedi fpm configuration su come farlo.

Example config with different pools

+0

Questa sembra essere la risposta effettiva. No, non puoi. Puoi aggirare il problema inserendoli nelle impostazioni di fpm come descritto nella risposta accettata, ma non puoi specificare un php.ini. – DM8

Problemi correlati