
我透過調整來自的指令,成功地讓 FastCGI 在 Ubuntu 16.04 上與 Apache 2.4 一起工作這個askubuntu線程,這個 HowtoForge 文檔, 和這個數位海洋教程。
所有這些消息來源都說創造 /etc/apache2/conf-available/php7.0-fpm.conf
並告訴你要放什麼進去。但安裝後php-fpm
,我已經有了該文件,其中包含以下內容:
# 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>
因此,我創建了自己的conf,並將說明中的程式碼放入其中並啟用它。
現有的有什麼php7.0-fpm.conf
用?如果我除了我的conf之外還啟用它,我的網站就會停止運作。我擔心我沒有按照預期的方式這樣做,並且將來可能會出現問題。要找到這方面好的、最新的文件確實很困難。
作為參考,這是我的整個過程:
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
內容/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>
命令繼續:
sudo a2enconf custom-fpm
sudo systemctl restart apache2 && sudo systemctl restart php7.0-fpm
在此先感謝您的幫忙。
答案1
我也遇到同樣的困惑,我感受到你的痛苦。經過大量閱讀後,我清楚大多數文章都已經過時,並且引用了以前的方法(或有時是組合)。
將 PHP-FPM 與 Ubuntu 16.04 的內建配置結合使用,您僅有的需要這樣做:
sudo a2enconf php7.0-fpm
sudo a2enmod proxy proxy_fcgi
我做了你所做的大部分事情,然後當自訂配置沒有意義時將其全部刪除。
現有的 php7.0-fpm.conf 是做什麼用的?
您發現該軟體包安裝的配置用於使用 mod_proxy_fcgi。它使用 mod_proxy,透過 Unix 域套接字,透過 mod_proxy_fcgi 將 .php 檔案綁定到 PHP FPM。據我所知,這是最新的“食譜”(現在有六個食譜中!)
您不需要安裝libapache2-mod-fastcgi
這是一種不同的舊方法。您不需要編寫該配置 - 這是直接使用 mod_fastcgi 的。您不需要actions fastcgi alias
像配置 mod_fastcgi 那樣安裝。
我確實覺得奇怪的是,沒有一篇文章 - 即使是 Ubuntu 16 的文章 - 提到新配方是為你準備好的!
這則評論為我澄清了歷史:
現在首選的方法是 fastcgi,使用以下任一方法:
(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)
此外,Apache 的這篇文章詳細介紹了使用 ProxyPassMatch 或 SetHandler + UDS 配置 mod_proxy_fcgi 連接到 FPM 的三個子選項。請注意,UDS 是從 Apache 2.4.10 開始的https://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html所以需要可信賴的向後移植或更新版本。
https://wiki.apache.org/httpd/PHP-FPM
所以我開始想像現在有六種配置方法:
大致按照歷史順序:
Apache PHP 模組:mod_php(舊方法)
透過 FastCGI - 使用 Handler/Action/Alias/FastCgiExternalServer 配置
A。 mod_fastcgi
b. mod_fcgid
透過 mod_proxy_fcgi 使用 PHP-FPM,透過以下任一方式配置:
A。 TCP 套接字(IP 和連接埠)ProxyPassMatch ... fcgi://127.0.0.1:9000/path/
b. Unix 網域套接字 (UDS) ProxyPassMatch … unix:/path/to/socket
C。 (UDS) 經 SetHandler "proxy:unix: 或 SetHandler "proxy:fcgi:
免責聲明:這對我來說是全新的,所以我可能仍然有五件事是錯的,還有十件事要學習。