Wie konfiguriere ich Apache, um PHP als FastCGI unter Ubuntu 12.04 über das Terminal auszuführen?

35

Ich bin relativ neu in der Welt der Verwaltung / Administration von Unix-Kommandozeilen-Webservern.

Bei vielen Hosts mit Verwaltungsoptionen für das Control Panel können Sie die Ausführung von PHP mit einer einfachen Option ändern.

Die häufigsten Optionen sind:

  • Apache-Modul
  • CGI-Anwendung
  • FastCGI-Anwendung

Meine Frage ist einfach, wie ändert man das über die Kommandozeile? Ich weiß, dass es viele Konfigurationsdateien für Apache gibt.

Das Nächste, was ich gefunden habe, ist diese Frage , aber die Verzeichnisstruktur scheint für mein Betriebssystem (Ubuntu 12.04) nicht zu passen.

Ich bin ziemlich verwirrt darüber, dass es keinen klaren Leitfaden zu geben scheint, dass ich Einzelheiten dieses Prozesses für etwas finden kann, das so häufig zu sein scheint. Verzeihen Sie mir, wenn dies der Fall ist. Wenn ja, weisen Sie mich bitte in die richtige Richtung.

Evan Mattson
quelle
Das Nächste, was ich gefunden habe, ist diese Frage auf SO. Diese Website ist kein Stapelüberlauf.
ta.speot.is
1
Dies auf fastcgi erklärt es ziemlich gut.
1
@ ta.speot.is Vergebung, bitte . . Vielen Dank Matt, natürlich habe ich mich bei fastcgi.com umgesehen, aber ich fand es etwas schwierig, diesen Anweisungen zu folgen.
Evan Mattson
@ ta.speot.is, einfacher Tippfehler. Er meinte "SE" nicht "SO".
Pacerier

Antworten:

49

Vielen Dank für die vorherigen Antworten, aber um die Dinge zum Laufen zu bringen, musste ich Anweisungen von einigen Stellen aus kombinieren, sodass ich dachte, ich würde einen vollständigen Satz von Befehlen schreiben.

Zu Ihrer Information: Ich verwende Ubuntu 14.04, Apache 2.4 und habe auch standardmäßig Modphp ausgeführt. Die vorherigen Anweisungen haben auch die Notwendigkeit ausgelassen, Modphp zu deaktivieren.

Ich fand auch http://blog.starcklin.com/2013/08/install-mod-fastcgi-and-php5-fpm-on-ubuntu/ sehr informativ und unkompliziert.

Führen Sie einfach die folgenden Befehle nacheinander in einem Terminal aus.

Installieren Sie zuerst die erforderlichen Pakete (ich lasse php5 aus, da dies voraussetzt, dass es bereits installiert ist, und füge es bei der Erstinstallation wieder hinzu). Beachten Sie auch, dass Sie ab Apache 2.4 die event-mpm anstelle von worker verwenden können (siehe http://www.vps.net/blog/2013/04/08/apache-mpms-prefork-worker-and-event/) . Mein Beispiel zeigt worker, aber ersetze einfach das Wort worker durch event, wenn du das lieber verwenden möchtest.

sudo apt-get install apache2-mpm-worker

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

Aktivieren Sie nun die Mods, die Sie benötigen, und deaktivieren Sie die Mods, die Sie nicht benötigen.

sudo a2dismod php5 mpm_prefork

sudo a2enmod actions fastcgi alias mpm_worker

Erstellen Sie die Datei php5.fcgi und erteilen Sie dem Webserver die Berechtigung, diese zu verwenden.

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

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

Erstelle eine globale Konfiguration für php5-fpm

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

Füge folgendes ein (wir verwenden einen Socket anstelle der IP-Adresse)

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

Aktiviere die php5-fpm conf

sudo a2enconf php5-fpm

Starten Sie Apache und Fpm neu

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

Fügen Sie gemäß den anderen Anweisungen Folgendes in eine neue durchsuchbare PHP-Datei auf Ihrem Webserver ein.

<?php phpinfo();

Öffnen Sie die soeben bearbeitete Datei in einem Webbrowser. Wenn neben der Server-API "FPM / FastCGI" angezeigt wird, bedienen Sie PHP jetzt mit FastCGI!

JDawgg
quelle
4
Das ist ein Lebensretter. Anweisungen für den älteren Apache funktionierten nicht auf Ubuntu 14.04 und Apache 2.4; aber dieser wirkte wie ein Zauber. +100 !!
Bhavin Doshi
Ich habe dies genau befolgt, erhalte jedoch die Fehlermeldung "Sie haben keine Berechtigung zum Zugriff auf /php5.fcgi/index" ... und im Fehlerprotokoll "Client verweigert durch Serverkonfiguration: / usr / lib / cgi-bin /php5.fcgi '... Irgendwelche Ideen?
Just Lucky Really
Es herausgefunden ... Ich war nach dem alten ‚bestellen leugnen, erlauben‘ Konfiguration für root aus irgendeinem Grund ... Alle Fest jetzt: D
einfach Glück Wirklich
Nach der Installation der Pakete und der Konfiguration "apache2: Syntaxfehler in Zeile 216 von /etc/apache2/apache2.conf: Syntaxfehler in Zeile 9 von /etc/apache2/conf-enabled/php5-fpm.conf: Erwartet </ Directory> aber sah </ IfModule> "
Farooq
Einen GitHub Gist für diesen gist.github.com/efarem/4a8fc03dc69d81998f6e518620f63421
Frank Martin
20

Ich habe endlich ein nettes Tutorial gefunden, das genau darauf ausgelegt ist. Ich werde die Schritte skizzieren, die ich unternommen habe, da ich meinen LAMP-Stack bereits installiert habe, aber das vollständige Tutorial finden Sie hier .

Hinweis für den neuen:

Im Tutorial beginnt der Wechsel zum Root-Benutzer mit:

sudo su

In meinem Fall habe ich diesen Befehlen lediglich ein Präfix vorangestellt, sudoanstatt die Benutzer zu wechseln, sodass ich meine Schritte auf diese Weise dokumentiere.

Start

Schritt eins: Installieren Sie das Apache Worker MPM (Multi-Procesing Modules)

sudo apt-get install apache2-mpm-worker

Dies ersetzt den von mir installierten Prefork, der der Standard bei der Installation von Apache ist.

Schritt 2: Installieren Sie PHP5 und die erforderlichen Module

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

An dieser Stelle kann ein Fehler bei der Installation von 'libapache2-mod-fastcgi' auftreten:

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

Dieser Teil ist nicht im obigen Tutorial enthalten

Um dies multiverseabzustimmen, muss das Repository den apt-Quellen hinzugefügt werden.

Um dies zu tun:

sudo nano /etc/apt/sources.list

Daran habe ich folgende Zeilen angehängt:

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 diesem Fall bezieht sich auf meine Version von Ubuntu " Precise Pangolin ".

Speichern Sie nun die Änderungen und kehren Sie zum Terminal zurück:

sudo apt-get update

und wieder:

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

was wird (sollte) jetzt funktionieren.

Aktivieren Sie nun diese Apache-Module:

sudo a2enmod actions fastcgi alias

starte Apache neu

sudo service apache2 restart

Schritt 3: Apache-Konfiguration

Damit Apache mit PHP-FPM funktioniert, benötigen wir die folgende Konfiguration:

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

Hinweis:

Wenn Sie eine ältere Version von Apache (2.3.x oder älter) verwenden, lassen Sie die Zeile weg

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

Sie können Ihre installierte Version mit dem Befehl überprüfen

apache2 -version

Sie können es in die globale Apache-Konfiguration einfügen (damit es für alle vhosts aktiviert ist), z. B. in /etc/apache2/conf.d/php5-fpm.conf(diese Datei ist nicht vorhanden, Sie müssen sie also erstellen), oder Sie können es in jeden vhost einfügen, der PHP-FPM verwenden soll.

Ich entscheide mich für den globalen Weg, also:

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

Fügen Sie den obigen Codeblock ein, und speichern Sie den Vorgang. Beenden Sie den Vorgang. Diese neue Datei wird automatisch von der Standardkonfiguration von Apache geladen, die alle Dateien im /etc/apache2/conf.d/Verzeichnis lädt .

starte Apache neu:

sudo service apache2 restart

Erstellen Sie nun die folgende PHP-Datei im Dokumentenstamm /var/www:

sudo nano /var/www/info.php

Hinzufügen:

<?php phpinfo();

sicherer Ausgang.

Jetzt rufen wir diese Datei in einem Browser auf (zB http://your-server-ip/info.php)

Unter Server API sollten Sie oben sehen FPM/FastCGI.

Erfolg!

Weitere Informationen, wie Sie PHP-FPM so ändern, dass anstelle des Standard-TCP-Ports ein Unix-Socket verwendet wird, oder wie Sie dies für einzelne virtuelle Hosts anstatt für alle konfigurieren, finden Sie im oben verlinkten Quellentutorial.

Evan Mattson
quelle
Ich musste dies hinzufügen, bevor </ IfModule>: <Directory / usr / lib / cgi-bin> Erfordert alle gewährten </ Directory>
Rimu Atkinson
@RimuAtkinson ist korrekt. Standardmäßig sind alle Verzeichnisse in neueren Versionen verboten, daher müssen Sie den Zugriff auf das Verzeichnis cgi-bin ausdrücklich gewähren. Dies sollte zur Antwort hinzugefügt werden, da Sie ohne eine 403 erhalten.
Johnrom
Danke für dieses Howto! Beachten Sie, dass das Require all grantedDing erst seit Apache 2.4 benötigt wird. Wenn ich es mit Apache 2.2 in die Konfigurationsdatei stecke, schlägt es fehl.
Leemes
Ich habe eine Notiz hinzugefügt. (Fühlen Sie sich frei, es zu bearbeiten; es ist Ihr Beitrag.;) Weitere Informationen finden Sie unter stackoverflow.com/a/22040167/592323
leemes
1
Diese Antwort funktioniert unter Ubuntu 14.04 nicht. Siehe Antwort von JDawgg, um es in 14.04 zu tun.
Bhavin Doshi
1

Bearbeiten Sie in Ubuntu 14.04 nach den Schritten der akzeptierten Antwort /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>

Dann ausführen

#sudo a2enconf php5-fpm
#sudo apache2 restart
marcanuy
quelle
0

Falls jemand dies unter Ubuntu 16.04 tut und von PHP 7 auf PHP 5.6 (Ondrej) heruntergestuft hat, müssen Sie einige Zeilen ersetzen (basierend auf der Antwort von JDawgg):

sudo apt-get installiere libapache2-mod-fastcgi php5-fpm um:

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

sudo a2dismod php5 mpm_prefork um:

sudo a2dismod php5.6 mpm_prefork

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

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

Der Installationsprozess von php5.6-fpm hat die Datei bereits erstellt, es ist also nicht erforderlich, eine zu erstellen. Ich habe jedoch den gesamten vorhandenen Text in dieser Datei entfernt, da er für mod_php5 bestimmt war.

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

Ich habe den Pfad von /var/run/php5-fpm.sock zu /var/run/php/php5.6-fpm.sock geändert, da sich die Datei dort befand.

sudo a2enconf php5-fpm an:

sudo a2enconf php5.6-fpm

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

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

Ich hoffe das hilft anderen Neulingen wie mir :)

Nazq
quelle