Jak skonfigurować Apache do uruchamiania PHP jako FastCGI na Ubuntu 12.04 przez terminal?

35

Jestem stosunkowo nowy w świecie zarządzania / administrowania serwerem WWW w linii poleceń Unix.

Wiele hostów z opcjami administrowania panelem sterowania umożliwia zmianę sposobu działania PHP za pomocą prostej opcji.

Najczęstsze opcje to:

  • moduł apache
  • Aplikacja CGI
  • Aplikacja FastCGI

Moje pytanie brzmi: jak to zmienić za pomocą wiersza poleceń? Wiem, że istnieje wiele plików konfiguracyjnych dla apache.

Najbliższą rzeczą, jaką znalazłem, jest to pytanie , jednak struktura katalogów wydaje się nie pasować do mojego systemu operacyjnego (Ubuntu 12.04).

Jestem dość zdezorientowany, że nie wydaje się, aby istniał jasny przewodnik, w którym mogę znaleźć szczegóły tego procesu dla czegoś, co wydaje się tak powszechne. Wybacz mi, jeśli to istnieje ... jeśli tak, proszę skieruj mnie we właściwym kierunku.

Evan Mattson
źródło
Najbliższą rzeczą, jaką znalazłem, jest to pytanie na stronie SO. Ta witryna nie jest przepełnieniem stosu.
ta.speot.is
1
To na fastcgi wyjaśnia to całkiem dobrze.
1
@ ta.speot.is wybaczenie, pleaassuh . . Dzięki Matt, oczywiście spojrzałem na fastcgi.com, ale instrukcje te były dla mnie trochę trudne.
Evan Mattson,
@ ta.speot.is, Prosta literówka. Miał na myśli „SE”, a nie „SO”.
Pacerier

Odpowiedzi:

49

Dziękuję za poprzednie odpowiedzi, które dały mi większość możliwości, ale aby wszystko działało, musiałem połączyć instrukcje z kilku miejsc, więc pomyślałem, że napiszę pełny zestaw poleceń.

Do Twojej wiadomości używam Ubuntu 14.04, Apache 2.4, a także miałem domyślnie działający modphp, poprzednie instrukcje również pomijały potrzebę wyłączenia modphp.

Uważam również, że http://blog.starcklin.com/2013/08/install-mod-fastcgi-and-php5-fpm-on-ubuntu/ jest bardzo pouczający i prosty.

Wystarczy uruchomić następujące polecenia w terminalu jeden po drugim.

Najpierw zainstaluj niezbędne pakiety (pomijam php5, ponieważ zakładam, że jest już zainstalowany, dodaj go ponownie po raz pierwszy). Uwaga: od wersji Apache 2.4 w górę możesz używać event-mpm zamiast pracownika, patrz http://www.vps.net/blog/2013/04/08/apache-mpms-prefork-worker-and-event/ . Mój przykład pokazuje pracownika, ale po prostu zamień słowo pracownik na zdarzenie, jeśli wolisz go użyć.

sudo apt-get install apache2-mpm-worker

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

Teraz włącz potrzebne mody i wyłącz te, których nie potrzebujesz.

sudo a2dismod php5 mpm_prefork

sudo a2enmod actions fastcgi alias mpm_worker

Utwórz plik php5.fcgi i daj serwerowi sieciowemu pozwolenie na jego użycie.

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

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

Utwórz globalną konfigurację dla php5-fpm

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

wklej poniżej (użyjemy gniazda zamiast adresu 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>

Włącz konf. Php5-fpm

sudo a2enconf php5-fpm

Uruchom ponownie apache i fpm

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

Zgodnie z innymi instrukcjami wklej poniższe elementy do nowego, przeglądalnego pliku php na swoim serwerze internetowym.

<?php phpinfo();

Otwórz plik, który właśnie edytowałeś w przeglądarce internetowej. Jeśli zobaczysz „FPM / FastCGI” obok API serwera, teraz obsługujesz PHP z FastCGI!

JDawgg
źródło
4
To ratownik. Instrukcje dla starszego apache nie działały na Ubuntu 14.04 i apache 2.4; ale ten działał jak urok. +100 !!
Bhavin Doshi
Postępowałem dokładnie tak, ale pojawia się błąd „Nie masz uprawnień dostępu do /php5.fcgi/index” ... A w dzienniku błędów klient odmówiony przez konfigurację serwera: / usr / lib / cgi-bin /php5.fcgi '... Jakieś pomysły?
Po prostu szczęście naprawdę
Zrozumiałem ... Korzystałem ze starej konfiguracji „odmowa, zezwól” na rootowanie z jakiegoś powodu ... Wszystko naprawione teraz: D
Just Lucky Really
Dostałem następujący błąd po instalacji pakietów i konfiguracji "apache2: błąd składni w linii 216 /etc/apache2/apache2.conf: Błąd składni w linii 9 /etc/apache2/conf-enabled/php5-fpm.conf: Oczekiwany </Directory>, ale widział </IfModule> ”
Farooq,
Stworzono GitHub Gist dla tego gist.github.com/efarem/4a8fc03dc69d81998f6e518620f63421
Frank Martin
20

W końcu znalazłem fajny samouczek mający na celu właśnie to zrobić. Przedstawię kroki, które podjąłem, ponieważ mam już zainstalowany stos LAMP, ale pełny samouczek można znaleźć tutaj .

Uwaga do nowego:

W samouczku zaczyna się od przejścia do użytkownika root za pomocą:

sudo su

W moim przypadku po prostu prefiksowałem te polecenia sudozamiast przełączania użytkowników, więc w ten sposób dokumentuję swoje kroki.

Zaczynać

Krok pierwszy: zainstaluj moduł Apache Worker MPM (moduły wieloprocesowe)

sudo apt-get install apache2-mpm-worker

Zastępuje to prefork, który zainstalowałem, który jest domyślny podczas instalacji Apache.

Krok 2: Zainstaluj PHP5 i niezbędne moduły

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

W tym momencie może pojawić się błąd podczas instalowania „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

Ta część nie znajduje się w powyższym samouczku

Aby to pogodzić, multiverserepozytorium musi zostać dodane do źródeł apt.

Aby to zrobić:

sudo nano /etc/apt/sources.list

Do którego dołączyłem następujące wiersze:

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

precisew tym przypadku odnosi się do mojej wersji Ubuntu „ Precise Pangolin ”.

Teraz zapisz te zmiany i wróć do terminalu:

sudo apt-get update

i jeszcze raz:

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

które będą (powinny) teraz działać.

Teraz włącz te moduły Apache:

sudo a2enmod actions fastcgi alias

uruchom ponownie apache

sudo service apache2 restart

Krok 3: Konfiguracja Apache

Aby Apache działał z PHP-FPM, potrzebujemy następującej konfiguracji:

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

Uwaga:

Jeśli używasz starszej wersji Apache (2.3.x lub starszej), pomiń linię

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

Możesz sprawdzić zainstalowaną wersję za pomocą polecenia

apache2 -version

Możesz umieścić go w globalnej konfiguracji Apache (więc jest włączony dla wszystkich vhostów), na przykład w /etc/apache2/conf.d/php5-fpm.conf(ten plik nie istnieje, więc musisz go utworzyć), lub możesz umieścić go w każdym vhostie, który powinien używać PHP-FPM.

Wybieram globalną trasę, więc:

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

wklej powyższy blok kodu i zapisz, wyjdź. Ten nowy plik zostanie automatycznie załadowany przez domyślną konfigurację Apache, która ładuje wszystkie pliki w /etc/apache2/conf.d/katalogu.

uruchom ponownie Apache:

sudo service apache2 restart

Teraz utwórz następujący plik PHP w katalogu głównym dokumentu /var/www:

sudo nano /var/www/info.php

Dodaj:

<?php phpinfo();

wyjście bezpieczeństwa.

Teraz nazywamy ten plik w przeglądarce (np. http://your-server-ip/info.php)

W górnej części interfejsu API serwera powinieneś zobaczyć FPM/FastCGI.

Sukces!

Aby uzyskać więcej informacji, takich jak sposób zmiany PHP-FPM, aby używał gniazda unix zamiast domyślnego portu TCP lub jak skonfigurować to dla indywidualnych hostów wirtualnych zamiast wszystkich, zobacz samouczek źródłowy połączony u góry.

Evan Mattson
źródło
Musiałem to dodać przed </IfModule>: <Directory / usr / lib / cgi-bin> Wymagaj wszystkich przyznanych </Directory>
Rimu Atkinson
@RimuAtkinson jest poprawny, domyślnie wszystkie katalogi będą zabronione w nowszych wersjach, więc musisz specjalnie udzielić dostępu do katalogu cgi-bin. Należy to dodać do odpowiedzi, ponieważ bez niej dostaniesz 403.
johnrom
Dzięki za to howto! Zauważ, że Require all grantedrzecz jest wymagana tylko od Apache 2.4. Jeśli wstawię go do pliku konfiguracyjnego z Apache 2.2, to się nie powiedzie.
leemes
Dodałem notatkę. (Nie krępuj się go precyzyjnie edytować; to twój post.;)) Aby uzyskać szczegółowe informacje, zobacz stackoverflow.com/a/22040167/592323
leem
1
Ta odpowiedź nie działa na Ubuntu 14.04. Zobacz odpowiedź JDawgga, aby to zrobić w 14.04.
Bhavin Doshi
1

W Ubuntu 14.04 po wykonaniu kroków przyjętej odpowiedzi, edytuj /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>

Następnie wykonaj

#sudo a2enconf php5-fpm
#sudo apache2 restart
marcanuy
źródło
0

Jeśli ktoś robi to na Ubuntu 16.04 i obniżył wersję z php 7 do php 5.6 (Ondrej), musisz wymienić niektóre linie (w oparciu o odpowiedź JDawgga):

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

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

sudo a2dismod php5 mpm_prefork to:

sudo a2dismod php5.6 mpm_prefork

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

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

Proces instalacji php5.6-fpm już utworzył plik, więc nie trzeba go tworzyć. Jednak usunąłem cały istniejący tekst z tego pliku, ponieważ był przeznaczony dla 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>

Zmieniłem ścieżkę z /var/run/php5-fpm.sock na /var/run/php/php5.6-fpm.sock, gdy plik się tam znajdował.

sudo a2enconf php5-fpm do:

sudo a2enconf php5.6-fpm

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

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

Mam nadzieję, że pomoże to innym początkującym, takim jak ja :)

Nazq
źródło