web-dev-qa-db-ja.com

Ubuntu 16.04でFastCGIを使用してApache 2.4を構成する-php7.0-fpm.confを使用してどうすればよいですか?

このaskubuntuスレッドこのHowtoForgeドキュメント 、および このDigital Oceanチュートリアル =。

それらのソースはすべてcreate/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に加えて有効にすると、Webサイトが機能しなくなります。私は、これを意図された方法で実行しておらず、将来問題が発生する可能性があることを心配しています。これに関する優れた最新のドキュメントを見つけることは本当に困難です。

参考までに、ここに私の手順全体を示します。

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

よろしくお願いします。

5
Keen Mouse

私は同じ混乱を経験し、あなたの痛みを感じます。多くの記事を読んだ後、ほとんどの記事が古く、以前の方法(または組み合わせ)を参照していることが明らかになりました。

Ubuntu 16.04のビルトイン設定でPHP-FPMを使用する場合、onlyでこれを行う必要があります:

Sudo a2enconf php7.0-fpm
Sudo a2enmod proxy proxy_fcgi

そのカスタム設定が意味をなさない場合、私はあなたがしたことのほとんどを行い、それからすべてを削除しました。

既存のphp7.0-fpm.confは何のためですか?

パッケージによってインストールされた構成は、mod_proxy_fcgiを使用するためのものです。 mod_proxy_fcgiを介して.modファイルをPHP FPMにバインドし、Unixドメインソケットを介してmod_proxyを使用します。私が知る限り、これは最新の「レシピ」です(現在利用可能な6つのうちの1つです!)

別の古い方法であるlibapache2-mod-fastcgiをインストールする必要はありません。その構成を記述する必要はありません-これはmod_fastcgiを直接使用するためのものです。 mod_fastcgiを構成するためにactions fastcgi aliasをインストールする必要はありません。

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のいずれかを使用してFPMに接続するようにmod_proxy_fcgiを構成するための3つのサブオプションについて詳しく説明しています。 UDSは https://httpd.Apache.org/docs/2.4/mod/mod_proxy_fcgi.html ごとにApache 2.4.10以降であるため、trusty-backports以降が必要であることに注意してください。

https://wiki.Apache.org/httpd/PHP-FPM

だから、私はそれを構成するための6つの方法があることを視覚化するようになりました:

おおよそ歴史的な順序で:

  1. Apache PHPモジュール:mod_php(古い方法)

  2. FastCGI経由-Handler/Action/Alias/FastCgiExternalServer configを使用

    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:OR SetHandler" proxy:fcgi:

免責事項:これは私にとってまったく新しいことなので、おそらくまだ5つの間違いと10の学ぶべきことがあります。

12
scipilot