Come configurare Apache per eseguire PHP come FastCGI su Ubuntu 12.04 tramite terminale?


36

Sono relativamente nuovo nel mondo della gestione / amministrazione di server web da riga di comando unix.

Molti host con opzioni di amministrazione del pannello di controllo consentono di modificare la modalità di esecuzione di PHP con una semplice opzione.

Le opzioni più comuni sono:

  • modulo apache
  • Applicazione CGI
  • Applicazione FastCGI

La mia domanda è semplicemente, come si cambia tramite la riga di comando? So che ci sono molti file di configurazione per apache.

La cosa più vicina che ho trovato è questa domanda , tuttavia la struttura della directory non sembra corrispondere al mio sistema operativo (Ubuntu 12.04).

Sono abbastanza sconcertato dal fatto che non sembra esserci una guida chiara sul fatto che posso trovare quei dettagli in questo processo per qualcosa che sembra essere così comune. Perdonami se esiste ... in tal caso, per favore, indicami la giusta direzione.


La cosa più vicina che ho trovato è questa domanda su SO Quel sito web non è Stack Overflow.
ta.speot.is il

1
Questo su FastCGI lo spiega abbastanza bene.

1
@ ta.speot.is perdono, piacere . . Grazie Matt, ovviamente ho guardato fastcgi.com, ma ho trovato quelle istruzioni un po 'difficili da seguire.
Evan Mattson,

@ ta.speot.is, errore di battitura semplice. Intendeva "SE", non "SO".
Pacerier,

Risposte:


49

Grazie per le risposte precedenti mi hanno aiutato per la maggior parte del tempo, ma per far funzionare le cose ho dovuto combinare le istruzioni da alcuni punti, quindi ho pensato di scrivere un set completo di comandi.

Cordiali saluti, sto eseguendo Ubuntu 14.04, Apache 2.4 e anche modphp è in esecuzione per impostazione predefinita, le istruzioni precedenti hanno anche escluso la necessità di disabilitare modphp.

Ho anche trovato http://blog.starcklin.com/2013/08/install-mod-fastcgi-and-php5-fpm-on-ubuntu/ molto informativo e diretto.

Basta eseguire i seguenti comandi in un terminale uno dopo l'altro.

Prima installa i pacchetti necessari (tralascio php5 poiché si presume che sia già installato, aggiungilo nuovamente per la prima volta). Nota anche da Apache 2.4 in poi puoi usare event-mpm invece di worker, vedi http://www.vps.net/blog/2013/04/08/apache-mpms-prefork-worker-and-event/ . Il mio esempio mostra worker, ma sostituisco semplicemente la parola worker con event se preferisci usarlo.

sudo apt-get install apache2-mpm-worker

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

Ora abilita le mod che ti servono e disabilita quelle che non ti servono.

sudo a2dismod php5 mpm_prefork

sudo a2enmod actions fastcgi alias mpm_worker

Crea il file php5.fcgi e dai il permesso al server web di usarlo.

sudo touch /usr/lib/cgi-bin/php5.fcgi

sudo chown -R www-data:www-data /usr/lib/cgi-bin

Crea una configurazione globale per php5-fpm

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

incolla quanto segue (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>

Abilita la configurazione di php5-fpm

sudo a2enconf php5-fpm

Riavvia apache e fpm

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

Come da altre istruzioni incolla quanto segue in un nuovo file php sfogliabile sul tuo server web.

<?php phpinfo();

Apri il file che hai appena modificato in un browser Web. Se vedi "FPM / FastCGI" accanto all'API del server, stai ora offrendo PHP con FastCGI!


4
Questo è un vero toccasana. Le istruzioni per il vecchio apache non funzionavano su Ubuntu 14.04 e apache 2.4; ma questo ha funzionato come un fascino. +100 !!
Bhavin Doshi,

L'ho seguito esattamente, ma viene visualizzato l'errore "Non si dispone dell'autorizzazione per accedere a /php5.fcgi/index" ... E nel registro degli errori "client negato dalla configurazione del server: / usr / lib / cgi-bin /php5.fcgi '... Qualche idea?
Just Lucky Davvero il

Capito ... Stavo usando la vecchia configurazione 'nega ordine, consenti' per root per qualche motivo ... Tutto risolto ora: D
Just Lucky Really

Ho ricevuto il seguente errore dopo l'installazione dei pacchetti e la configurazione "apache2: errore di sintassi sulla linea 216 di /etc/apache2/apache2.conf: errore di sintassi sulla linea 9 di /etc/apache2/conf-enabled/php5-fpm.conf: previsto </Directory> ma visto </IfModule> "
Farooq,


20

Alla fine ho trovato un bel tutorial orientato a fare proprio questo. Descriverò i passaggi che ho fatto poiché avevo già installato il mio stack LAMP, ma il tutorial completo è disponibile qui .

Nota per il nuovo:

Nel tutorial, inizia passando all'utente root con:

sudo su

Nel mio caso ho semplicemente prefissato quei comandi sudoinvece di cambiare utente, quindi documenterò i miei passi in quel modo.

Inizio

Fase 1: installare Apache Worker MPM (moduli multi-processione)

sudo apt-get install apache2-mpm-worker

Questo sostituisce il prefork che avevo installato, che è l'impostazione predefinita durante l'installazione di Apache.

Passaggio 2: installare PHP5 e i moduli necessari

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

A questo punto potresti ricevere un errore durante l'installazione di 'libapache2-mod-fastcgi':

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package libapache2-mod-fastcgi is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or is only available from another source

E: Package 'libapache2-mod-fastcgi' has no installation candidate

Questa parte non è nel tutorial sopra

Per riconciliare questo, il multiverserepository deve essere aggiunto alle origini apt.

Per farlo:

sudo nano /etc/apt/sources.list

A cui ho aggiunto le seguenti righe:

deb http://archive.ubuntu.com/ubuntu precise multiverse
deb http://archive.ubuntu.com/ubuntu precise-updates multiverse
deb http://security.ubuntu.com/ubuntu precise-security multiverse

precisein questo caso si riferisce alla mia versione di Ubuntu " Precise Pangolin ".

Quindi ora, salva quelle modifiche e torna al terminale:

sudo apt-get update

e di nuovo:

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

che ora dovrebbe (dovrebbe) funzionare.

Ora abilita questi moduli Apache:

sudo a2enmod actions fastcgi alias

riavvia apache

sudo service apache2 restart

Passaggio 3: configurazione di Apache

Per far funzionare Apache con PHP-FPM, abbiamo bisogno della seguente configurazione:

<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 -host 127.0.0.1:9000 -pass-header Authorization
    <Directory /usr/lib/cgi-bin>
        Require all granted 
    </Directory>
    #directory statement mult be on multiple lines
</IfModule>

Nota:

Se stai usando una versione precedente di Apache (2.3.xo precedente), lascia fuori la linea

   <Directory /usr/lib/cgi-bin> Require all granted </Directory>

Puoi controllare la tua versione installata con il comando

apache2 -version

Puoi inserirlo nella configurazione globale di Apache (quindi è abilitato per tutti i vhosts), ad esempio in /etc/apache2/conf.d/php5-fpm.conf(questo file non esiste, quindi devi crearlo), oppure puoi inserirlo in ogni vhost che dovrebbe usare PHP-FPM.

Ho scelto di seguire la strada globale, quindi:

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

incolla il blocco di codice sopra e salva, esci. Questo nuovo file verrà caricato automaticamente dalla configurazione predefinita di Apache che carica tutti i file nella /etc/apache2/conf.d/directory.

riavvia Apache:

sudo service apache2 restart

Ora crea il seguente file PHP nella radice del documento /var/www:

sudo nano /var/www/info.php

Inserisci:

<?php phpinfo();

salva ed esci.

Ora chiamiamo quel file in un browser (ad es. http://your-server-ip/info.php)

Sotto Server API in alto dovresti vedere FPM/FastCGI.

Successo!

Per ulteriori informazioni su come modificare PHP-FPM in modo da utilizzare un socket unix anziché la porta TCP predefinita o come configurarlo per singoli host virtuali anziché tutti, consultare l'esercitazione di origine collegata in alto.


Ho dovuto aggiungerlo prima </IfModule>: <Directory / usr / lib / cgi-bin> Richiedi tutto concesso </Directory>
Rimu Atkinson

@RimuAtkinson è corretto, per impostazione predefinita tutte le directory saranno vietate nelle versioni più recenti, quindi dovrai concedere in modo specifico l'accesso alla directory cgi-bin. Questo dovrebbe essere aggiunto alla risposta, poiché senza di essa otterrai un 403.
johnrom,

Grazie per questo howto! Nota che la Require all grantedcosa è richiesta solo da Apache 2.4. Se lo inserisco nel file di configurazione con Apache 2.2, non riesce.
saluta il

Ho aggiunto una nota (Sentitevi liberi di messa a modificarlo: è tuo post;).) Per ulteriori informazioni, vedere stackoverflow.com/a/22040167/592323
leemes

1
Questa risposta non funziona su Ubuntu 14.04. Consultare la risposta di JDawgg per farlo in 14.04.
Bhavin Doshi,

1

In Ubuntu 14.04 dopo aver eseguito i passaggi della risposta accettata, modifica /etc/apache2/conf-available/php5-fpm.conf

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

Quindi eseguire

#sudo a2enconf php5-fpm
#sudo apache2 restart

0

Nel caso in cui qualcuno lo stia facendo su Ubuntu 16.04 e abbia effettuato il downgrade da php 7 a php 5.6 (Ondrej), è necessario sostituire alcune righe (in base alla risposta di JDawgg):

sudo apt-get installa libapache2-mod-fastcgi php5-fpm a:

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

sudo a2dismod php5 mpm_prefork a:

sudo a2dismod php5.6 mpm_prefork

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

sudo vim /etc/apache2/conf-available/php5.6-fpm.conf

Il processo di installazione di php5.6-fpm ha già creato il file, quindi non è necessario crearne uno. Tuttavia, ho rimosso tutto il testo esistente su quel file come era inteso per mod_php5.

<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/php/php5.6-fpm.sock -pass-header Authorization -idle-timeout 3600 
   <Directory /usr/lib/cgi-bin>
       Require all granted
   </Directory> 
</IfModule>

Ho cambiato il percorso da /var/run/php5-fpm.sock a /var/run/php/php5.6-fpm.sock poiché il file si trovava lì.

sudo a2enconf php5-fpm a:

sudo a2enconf php5.6-fpm

sudo service apache2 restart && sudo service php5-fpm riavvia a:

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

Spero che questo aiuti altri neofiti come me :)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.