Podařilo se mi přimět FastCGI pracovat s Apache 2.4 na Ubuntu 16.04 úpravou pokynů z tohoto vlákna askubuntu, tohoto dokumentu HowtoForge a tohoto výukového programu Digital Ocean.
Všechny tyto zdroje říkají vytvořit /etc/apache2/conf-available/php7.0-fpm.conf
a řeknu ti, co do něj máš dát. Ale po instalaci php-fpm
, již mám tento soubor s následujícím obsahem:
# Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php7.c>
# Enable http authorization headers
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
<FilesMatch ".+\.ph(p[3457]?|t|tml)$">
SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost"
</FilesMatch>
<FilesMatch ".+\.phps$">
# Deny access to raw php sources by default
# To re-enable it's recommended to enable access to the files
# only in specific virtual host or directory
Require all denied
</FilesMatch>
# Deny access to files without filename (e.g. '.php')
<FilesMatch "^\.ph(p[3457]?|t|tml|ps)$">
Require all denied
</FilesMatch>
</IfModule>
Místo toho jsem vytvořil svůj vlastní conf a vložil do něj kód z pokynů a povolil jej.
Co je stávající php7.0-fpm.conf
pro? Pokud to povolím navíc ke svému conf, přestanou mi fungovat webové stránky. Obávám se, že to nedělám tak, jak je zamýšleno, a v budoucnu bych mohl mít problémy. Je opravdu těžké najít k tomu dobrou a aktuální dokumentaci.
Pro informaci zde je celý můj postup:
sudo apt install libapache2-mod-fastcgi php-fpm
sudo a2dismod php7.0 mpm_prefork
sudo a2enmod actions fastcgi alias mpm_worker
sudoedit /etc/apache2/conf-available/custom-fpm.conf
Obsah /etc/apache2/conf-available/custom-fpm.conf
:
<IfModule mod_fastcgi.c>
AddHandler php7-fcgi .php
Action php7-fcgi /php7-fcgi virtual
Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
</IfModule>
Pokračování příkazů:
sudo a2enconf custom-fpm
sudo systemctl restart apache2 && sudo systemctl restart php7.0-fpm
Předem děkujeme za vaši pomoc.
Přijatá odpověď:
Zasáhl jsem stejný zmatek, cítím tvou bolest. Po dlouhém čtení mi začalo být jasné, že většina článků je zastaralá a odkazuje na předchozí metody (nebo někdy na jejich kombinace).
Pomocí PHP-FPM s vestavěnou konfigurací Ubuntu 16.04 můžete pouze musíte udělat toto:
sudo a2enconf php7.0-fpm
sudo a2enmod proxy proxy_fcgi
Udělal jsem většinu toho, co vy, a pak jsem to všechno odstranil, když tato vlastní konfigurace nedávala smysl.
K čemu je stávající php7.0-fpm.conf?
Konfigurace, kterou jste našli nainstalovanou v balíčku, je pro použití mod_proxy_fcgi. Sváže soubory .php přes mod_proxy_fcgi na PHP FPM, pomocí mod_proxy, přes Unix Domain Socket. Pokud vím, toto je nejaktuálnější „recept“ (ze šesti, které jsou nyní k dispozici!)
Nemusíte instalovat libapache2-mod-fastcgi
to je jiná, starší metoda. Tuto konfiguraci nemusíte psát – to je pro přímé použití mod_fastcgi. Nemusíte instalovat actions fastcgi alias
jak mají konfigurovat mod_fastcgi.
Připadá mi zvláštní, že žádný z článků – ani ty pro Ubuntu 16 – nezmiňuje, že nový recept je celý nastaven pro vás!
Tento komentář mi objasnil historii:
Preferovanou metodou je nyní fastcgi s použitím některého z těchto receptů:
(mod_fastcgi, httpd 2.2) http://wiki.apache.org/httpd/php-fastcgi
(mod_fcgid, httpd 2.2) http://wiki.apache.org/httpd/php-fcgid
(mod_proxy_fcgi, httpd 2.4) http://wiki.apache.org/httpd/PHP-FPM
http://php.net/manual/en/install.unix.debian.php#112544 (2013)
Kromě toho tento článek od Apache podrobně popisuje tři dílčí možnosti pro konfiguraci mod_proxy_fcgi pro připojení k FPM pomocí buď ProxyPassMatch nebo SetHandler + UDS. Všimněte si, že UDS je od verze Apache 2.4.10 na https://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html, takže potřebujete důvěryhodné zpětné porty nebo novější.
https://wiki.apache.org/httpd/PHP-FPM
Přišel jsem si tedy představit, že nyní existuje šest způsobů, jak jej nakonfigurovat:
Zhruba v historickém pořadí:
-
Modul Apache PHP:mod_php (starý způsob)
-
Přes FastCGI – pomocí konfigurace Handler/Action/Alias/FastCgiExternalServer
A. mod_fastcgi
b. mod_fcgid
-
Použití PHP-FPM přes mod_proxy_fcgi, nakonfigurované buď pomocí:
A. TCP socket (IP a port) ProxyPassMatch … fcgi://127.0.0.1:9000/path/
b. Unix domain socket (UDS) ProxyPassMatch … unix:/path/to/socket
C. (UDS) přes SetHandler “proxy:unix:NEBO SetHandler “proxy:fcgi:
Zřeknutí se odpovědnosti:je to pro mě všechno nové, takže mám pravděpodobně stále pět věcí špatně a deset věcí, které se musím naučit.