在 Ubuntu 16.04 上使用 FastCGI 配置 Apache 2.4 - 我該如何使用 php7.0-fpm.conf?

在 Ubuntu 16.04 上使用 FastCGI 配置 Apache 2.4 - 我該如何使用 php7.0-fpm.conf?

我透過調整來自的指令,成功地讓 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

所以我開始想像現在有六種配置方法:

大致按照歷史順序:

  1. Apache PHP 模組:mod_php(舊方法)

  2. 透過 FastCGI - 使用 Handler/Action/Alias/FastCgiExternalServer 配置

    A。 mod_fastcgi

    b. mod_fcgid

  3. 透過 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:

免責聲明:這對我來說是全新的,所以我可能仍然有五件事是錯的,還有十件事要學習。

相關內容