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


Sono relativamente nuovo al mondo della gestione / amministrazione del server web della riga di comando di Unix.

Molti host con le opzioni di amministrazione del pannello di controllo consentono di modificare il modo in cui PHP viene eseguito con una semplice opzione.

Le opzioni più comuni sono:

  • modulo apache
  • Applicazione CGI
  • Applicazione FastCGI

La mia domanda è semplicemente, come si cambia questo 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 per il mio sistema operativo (Ubuntu 12.04).

Sono piuttosto sconcertato di come non sembri essere una guida chiara che riesco a trovare nei dettagli questo processo per qualcosa che sembra essere così comune. Perdonami se questo esiste ... se è così, per favore indicami la giusta direzione.


34
2017-11-17 02:33


origine


La cosa più vicina che ho trovato è questa domanda su SO Quel sito Web non è Stack Overflow. - ta.speot.is
Questosu Fastcgi lo spiega abbastanza bene.
@ ta.speot.is forgivaness, pleaassuh.. Grazie Matt, ovviamente ho guardato a fastcgi.com, ma ho trovato quelle istruzioni un po 'difficili da seguire. - Evan Mattson
@ ta.speot.is, semplice errore di battitura. Intendeva "SE" non "SO". - Pacerier


risposte:


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

Per tua informazione sto usando Ubuntu 14.04, Apache 2.4, e avevo anche il modphp in esecuzione di default, le precedenti istruzioni lasciavano anche da parte la necessità di disabilitare modphp.

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

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

Per prima cosa installa i pacchetti necessari (escludo php5 poiché questo presuppone che sia già installato, riaggiungilo per una prima installazione). Nota anche da Apache 2.4 up puoi usare event-mpm invece di worker see http://www.vps.net/blog/2013/04/08/apache-mpms-prefork-worker-and-event/. Il mio esempio mostra worker, ma sostituisci 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 necessarie e disabilita quelle che non hai.

sudo a2dismod php5 mpm_prefork

sudo a2enmod actions fastcgi alias mpm_worker

Crea il file php5.fcgi e dai il permesso al web server 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 di un 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 il conf php5-fpm

sudo a2enconf php5-fpm

Riavvia apache e fpm

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

Come per le altre istruzioni, incollare quanto segue in un nuovo file php navigabile sul server web.

<?php phpinfo();

Apri il file che hai appena modificato in un browser web, se vedi "FPM / FastCGI" accanto a Server API, ora stai servendo PHP con FastCGI!


48
2017-09-22 22:01



Questo è un salvagente. Le istruzioni per l'apache più vecchio non funzionavano su Ubuntu 14.04 e apache 2.4; ma questo ha funzionato come un fascino. +100 !! - Bhavin Doshi
@ bkd.online Non avrei potuto dirlo meglio. @ JDawgg Bello quello :) - Gadgetroid
L'ho seguito esattamente, ma ho ricevuto l'errore "Non hai il permesso di accedere a /php5.fcgi/index" ... E nel log degli errori, "client negato dalla configurazione del server: / usr / lib / cgi-bin /php5.fcgi '... Qualche idea? - Just Lucky Really
Capito ... Stavo usando il vecchio ordine negare, consentire 'configurazione per root per qualche motivo ... Tutto risolto ora: D - Just Lucky Really
Ho ricevuto l'errore seguente dopo l'installazione dei pacchetti e la configurazione "apache2: errore di sintassi sulla riga 216 di /etc/apache2/apache2.conf: Errore di sintassi sulla riga 9 di /etc/apache2/conf-enabled/php5-fpm.conf: previsto </ Directory> ma ha visto </ IfModule> " - Farooq


Finalmente ho trovato un bel tutorial per fare proprio questo. Illustrerò i passaggi che ho seguito poiché ho già installato il mio stack LAMP ma è possibile trovare il tutorial completo Qui.

Nota per il nuovo:

Nel tutorial, inizia passando all'utente root con:

sudo su

Nel mio caso ho semplicemente prefisso quei comandi sudo invece di cambiare utente, quindi documenterò i miei passi in questo modo.

Inizio

Fase 1: installare Apache Worker MPM (Multi-Procesing Modules)

sudo apt-get install apache2-mpm-worker

Questo sostituisce il prefork che avevo installato, che è il default quando si installa Apache.

Passaggio 2: Installa PHP5 e i moduli necessari

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

A questo punto potresti avere un errore nell'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 multiverse repository deve essere aggiunto alle fonti apt.

Per fare questo:

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

precise in questo caso si riferisce alla mia versione di Ubuntu "Pangolino preciso".

Quindi ora, salva queste modifiche e torna al terminale:

sudo apt-get update

e di nuovo:

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

quale (dovrebbe) ora funziona.

Ora abilita questi moduli Apache:

sudo a2enmod actions fastcgi alias

riavviare 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 utilizzando una versione precedente di Apache (2.3.x o precedente), lascia la linea

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

È possibile controllare la versione installata con il comando

apache2 -version

Puoi metterlo nella configurazione globale di Apache (quindi è abilitato per tutti i vhost), per 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 percorrere la rotta globale, quindi:

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

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

riavviare Apache:

sudo service apache2 restart

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

sudo nano /var/www/info.php

Inserisci:

<?php phpinfo();

salva e esci.

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

Sotto API del server in alto dovresti vedere FPM/FastCGI.

Successo!

Per maggiori informazioni su come modificare PHP-FPM per utilizzare un socket unix invece della porta TCP predefinita o come configurarlo per singoli host virtuali anziché tutti, vedi il tutorial sorgente collegato in alto.


19
2017-12-16 15:43



Ho dovuto aggiungere questo prima </ IfModule>: <Directory / usr / lib / cgi-bin> Richiede tutto garantito </ Directory> - Rimu Atkinson
@RimuAtkinson è corretto, per impostazione predefinita tutte le directory saranno proibite nelle versioni più recenti, quindi dovrai concedere specificatamente l'accesso alla directory cgi-bin. Questo dovrebbe essere aggiunto alla risposta, in quanto senza di esso otterrai un 403. - johnrom
Grazie per questo howto! Si noti che il Require all granted cosa è richiesta solo da quando Apache 2.4. Se lo metto nel file di configurazione con Apache 2.2, fallisce. - leemes
Ho aggiunto una nota. (Sentiti libero di modificarlo bene, è il tuo post.;)) Per i dettagli, vedi stackoverflow.com/a/22040167/592323 - leemes
Questa risposta non funziona su Ubuntu 14.04. Fai riferimento alla risposta di JDawgg per farlo in 14.04. - Bhavin Doshi


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 esegui

#sudo a2enconf php5-fpm
#sudo apache2 restart

1
2017-09-21 15:34





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

servizio sudo apache2 restart && sudo service php5-fpm restart to:

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

Spero che questo aiuti altri neofiti come me :)


0
2017-10-22 23:35