
私はUbuntu 16.04上のApache 2.4でFastCGIを動作させることに成功しました。この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 に加えてこれを有効にすると、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
ご協力をよろしくお願いいたします。
答え1
私も同じ混乱に陥り、あなたの苦しみがよくわかります。たくさん読んだ結果、ほとんどの記事が古く、以前の方法 (または組み合わせ) を参照していることが明らかになりました。
Ubuntu 16.04の組み込み設定でPHP-FPMを使用すると、のみこれを実行する必要があります:
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 にバインドします。私が知る限り、これは最新の「レシピ」です (現在利用可能な 6 つのレシピのうち)。
これは別の古い方法なのでインストールする必要はありません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のこの記事では、mod_proxy_fcgiをProxyPassMatchまたはSetHandler + UDSを使用してFPMに接続するための3つのサブオプションについて詳しく説明しています。UDSはApache 2.4.10以降で有効です。Apache 2.4 の mod モジュールは、以下の URL からダウンロードできます。そのため、trusty-backports 以降が必要です。
PHP の最新バージョンは http://www.apache.org/php/php_fpm にあります。
つまり、設定方法は 6 つあることがわかりました。
大まかな歴史的な順序は次のとおりです。
Apache PHP モジュール: mod_php (従来の方法)
FastCGI経由 - Handler/Action/Alias/FastCgiExternalServer 設定を使用
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: 経由
免責事項: これは私にとってすべて新しいことなので、おそらくまだ 5 つの点が間違っており、10 の点が学ぶ必要があるでしょう。