Ubuntu 16.04でApacheで動作するようにphp7.0-fpmを構成しましたが、正しく構成されて機能しているかどうかわかりません。
私が理解しているように、インストールと構成後、php情報ファイルの出力には「サーバーAPI-> FPM/FastCGI」と表示されますが、それでも「サーバーAPI-> Apache2.0ハンドラー」と表示されます。
これは私がphp7.0-fpmをインストールして設定した方法です:
Sudo apt-get install libapache2-mod-fastcgi php7.0-fpm
Sudo a2enmod actions fastcgi alias
Sudo a2enconf php7.0-fpm
Sudo service php7.0-fpm restart
Sudo systemctl status php7.0-fpm
Sudo systemctl restart Apache2.service
以下は、Sudo systemctl statusphp7.0-fpmの出力です。
php7.0-fpm.service - The PHP 7.0 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.0-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2017-11-25 11:57:33 UTC; 23h ago
Process: 1149 ExecStartPre=/usr/lib/php/php7.0-fpm-checkconf (code=exited, status=0/SUCCESS)
Main PID: 1336 (php-fpm7.0)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3
Memory: 37.8M
CPU: 3.089s
CGroup: /system.slice/php7.0-fpm.service
├─1336 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)
├─1340 php-fpm: pool www
└─1341 php-fpm: pool www
Nov 25 11:57:33 ip-10-0-0-126 systemd[1]: Starting The PHP 7.0 FastCGI Process Manager...
Nov 25 11:57:33 ip-10-0-0-126 systemd[1]: Started The PHP 7.0 FastCGI Process Manager.
私は何が間違っているのですか?いくつかの助けとアドバイスをいただければ幸いです。
以下は私の/etc/Apache2/conf-enabled/php7.0-fpm.conf
ファイルの内容です。
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
<IfModule mod_fastcgi.c>
AddHandler php7-fcgi .php
Action php7-fcgi /php7-fcgi
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 Authorization
</IfModule>
Koen Reiniersの開発ブログ の指示に従うことで、あまり問題なくこれを機能させることができました。私はほぼ正確に指示に従いましたが、ブログ投稿のコメントに記載されている1つの例外を除いて、完全に機能しました。 mod_fastcgi、および他のいくつかのモジュールが必要になります。このレシピを使用すると、それぞれが独立したphp7fpm構成を使用する複数のvhostをセットアップできます。 phpinfo()が「FPM/FastCGI」のサーバーAPIを表示していない限り、マークを見逃していることに注意してください。これは、スタックが機能していることを示す酸テストです。チェックとして、「<?php touch( '/ tmp/fpmtest');」も実行しました。仮想ホスト用に開始されたプロセスが指定されたユーザー/グループとして実行されていることを確認します(実行されていました)。
このレシピは、Koenのブログからいくつかの変更を加えてコピーされたものであり、彼の明確で効果的な方向性が評価されています。
その中のセキュリティ関連のスタンザを除いて、notはのApacheconfを有効にしません。このレシピを使用する場合はphp7.0-fpm。グローバルに実行する必要がある唯一のコードは次のとおりです。
<Directory "/usr/lib/cgi-bin">
Require all granted
</Directory>
Apache2構成でmod_cgi.cが有効になっている場合、これはおそらくモジュールのデフォルトのconfファイルですでに処理されています。それ以外の場合、このモジュール(またはmod_cgid.c)がまだ有効になっていない場合、これはApache2の起動時に実行される任意のconfファイルに追加できます。ただし、サーバー環境によっては、PHP-FPMが有効になっている各<VirtualHost>にのみ追加する方が安全な場合があります。 php7.0-fpm.confのセキュリティ関連コードも同じ場所にコピーするか、グローバルに有効にすることができます。
このガイドでは、UbuntuサーバーでPHP 7.0。*とApache(仮想ホストを使用)が実行されていることを前提としています。また、適切なバックアップがない本番環境ではこれを試さないでください。所定の位置に。
まず、php7.0-fpmがシステムにインストールされていることを確認します。
$ Sudo apt-get install php7.0-fpm
インストール後、サービスが自動的に開始されていない場合はサービスを開始し、サービスが実行されていることを確認します。
$ Sudo service php7.0-fpm start && ps aux | grep php-fpm
仮想ホストのすべてにPHP-FPMを使用するには、仮想ホストを複数のリソースプールに分割する必要があります。1つは個別の<VirtualHost>ユーザーごとに1つです。つまり、1つのユーザーに複数のホストが割り当てられている場合は、そのユーザー用に1つのリソースプールを作成します。
PHP-FPMのプール構成のデフォルトの場所は次のとおりです。
/etc/php/7.0/fpm/pool.d/
ユーザーの1人に新しい構成を作成するには、新しい.confファイルを作成するだけです。構成ファイルの名前としてユーザーのユーザー名を使用しました。
$ Sudo vim /etc/php/7.0/fpm/pool.d/username.conf
そして、これを構成として使用します(「username」を実際のユーザー名に置き換えます)。
[username]
user = username
group = username
listen = /run/php/php7.0-fpm.username.sock
listen.owner = username
listen.group = username
listen.mode = 0666
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
最初の7行が最も重要です。それらがApache仮想ホストユーザーと同じであることを確認してください。最後の5行は、プロセスマネージャのデフォルト設定です。わかりやすくするためにそのままにしておきますが、お好みに合わせて変更することもできます。これらの設定の詳細については、次の場所にあるデフォルトの構成ファイルを参照してください。
/etc/php/7.0/fpm/pool.d/www.conf
残っているのは、mod_phpの代わりにPHP-FPMを使用するようにApacheに指示することだけです。まず、mod_actionsとmod_fastcgiの両方が有効になっていることを確認します。
$ Sudo a2enmod actions fastcgi
$ Sudo service Apache2 restart
PHP-FPMfastcgiハンドラーをApacheに追加します。 PHP-FPMを使用できるようにするすべてのユーザーに対してこれを行う必要があります。通常は次の場所で、ユーザー名の仮想ホストごとのファイルを編集します。
/etc/Apache2/sites-available/username.conf
上部に以下を追加します。
<IfModule mod_fastcgi.c>
AddHandler php7-fcgi-username .php
Action php7-fcgi-username /php7-fcgi-username
Alias /php7-fcgi-username /usr/lib/cgi-bin/php7-fcgi-username
FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi-username -socket /run/php/php7.0-fpm.username.sock -pass-header Authorization
</IfModule>
ここでも、「username」を仮想ホストのユーザーの実際の名前に置き換えます。
.phpファイルに実際に使用するようにvhostに指示する必要があるため、同じファイルで、ただし<VirtualHost>ディレクティブに次の行を追加します。
<IfModule mod_fastcgi.c>
<FilesMatch ".+\.ph(p[3457]?|t|tml)$">
SetHandler php7-fcgi-username
</FilesMatch>
</IfModule>
「username」を実際のvhostユーザーの名前に再度置き換えて、ファイルを保存します。 SetHandlerディレクティブがApache条件付きファイルシステムコンテナタグのサブセット<Location>、<LocationMatch>、<Files>で記述されることは非常に重要ですまたは<FilesMatch>。これを省略すると、SetHandlerが無視されます。 <Directory>タグは明らかにそれをカットしません。
PHP-FPMの「ステータス」および「ping」機能を利用し、/ etc/php/7.0/fpmのvhostごとのプールファイルでそれらをオンにしたい場合/pool.dディレクトリ(/ etc/php/7.0/fpm/pool.d/www.confを参照)詳細)Apache2の設定に2つの追加の変更を加える必要があります。 vhostごとの.confファイルの先頭にあるActionディレクティブは、「仮想」で終了する必要があります。
Action php7-fcgi-username /php7-fcgi-username virtual
さらに、SetHandlerラッパーは、これらの仮想ファイルを含む正規表現を指定する必要があります。私は以下を使用します:
<LocationMatch ".+\.ph(p[3457]?|t|tml)|/(ping|status)$">
SetHandler ....
</LocationMatch>
あとは、Apacheに設定ファイルをリロードさせるだけです。
$ Sudo service Apache2 reload
変更が有効になっているかどうかを確認するには、Webサイトのパブリックディレクトリにphpinfo.phpファイルを作成し、ブラウザでアクセスします。
<?php phpinfo();
ページの上部に表示されるサーバーAPIには、「FPM/FastCGI」と表示されます。
プロセスを完了するには、仮想ホストごとに手順を繰り返す必要があります。 mod_phpがもう使用されていないことを完全に確信している場合は、次の方法で無効にすることができます。
$ Sudo a2dismod php7.0
これを行うまで、Apacheにはすべてのリクエストに対してPHPプロセスが含まれます。つまり、メモリ使用量は同じままで、場合によってはさらに高くなります。
ストックproxy_fcgi
confファイルを有効にするには、mod_php7
モジュールを有効にし、php7.0-fpm
を無効にする必要があります。
/etc/Apache2/conf-enabled/php7.0-fpm.conf
を見ると、上部に次のように表示されます。
<IfModule !mod_php7.c>
<IfModule proxy_fcgi_module>