以前Debian7および8で行っていた方法でDebian9にApacheおよびFPMをセットアップしようとしています。これは、Apache 2.4でmod_proxy_fcgiを優先してmod_fastcgiが非推奨になり、その後削除されたためです。 Debian 9 aptリポジトリ、以前のセットアップを実行できませんでした。基本的に、FPMを使用して、単一のサーバー(ステージング/開発サーバー)上の複数のサイトをサンドボックス化していました。その結果、各サイトが所有され、それぞれ1人のユーザーにグループ化され、FPMはその特定のユーザーのプロセスの下でサイトを実行しました。
これが私たちが使用していたApache仮想ホストの例です:
FastCgiExternalServer /home/siteusername/www/php5-fcgi -socket /tmp/php5-fpm-siteusername.sock -pass-header Authorization
<VirtualHost *:80>
DocumentRoot /home/username/www/domain.com/public_html/
ServerName www.domain.com
<Directory /home/siteusername/www/domain.com/public_html/>
AllowOverride all
</Directory>
<Directory /home/siteusername/www/>
Require all granted
AllowOverride all
</Directory>
AddHandler php5-fcgi .php
Action php5-fcgi /php5-fcgi
Alias /php5-fcgi /home/siteusername/www/php5-fcgi
<ifModule mod_headers.c>
Header set X-Robots-Tag "noindex"
</ifModule>
</VirtualHost>
使用していたFPM構成の例を次に示します。
[siteusername]
listen = /tmp/php5-fpm-siteusername.sock
listen.allowed_clients = 127.0.0.1
listen.owner = www-data
listen.group = www-data
user = siteusername
group = siteusername
pm = ondemand
pm.max_children = 50
php_admin_value[upload_tmp_dir] = /home/siteusername/tmp/upload
php_admin_value[session.save_path] = /home/siteusername/tmp/session
Apache 2.4、PHP 7.0、FPM 7.0、mod_proxy_fcgi(および更新されたバージョン番号)を使用したDebian 9での正確なセットアップでは、Apacheの起動時にエラーが発生します。
Invalid command 'FastCgiExternalServer', perhaps misspelled or defined by a module not included in the server configuration
コマンドはmod_fastcgiの一部であり、それがないと、自分のユーザーでサイトを実行できないようです。代わりに、通常構成されているApacheサイトと同じようにwww-dataで実行されます。
これまで、この構成を実行する方法に関するドキュメントを見つけることができませんでした。 mod_proxy_fcgiの更新された構成が何であるかを誰かが知っていますか?
これを試して。
FPM定義で、正しいphpバージョンと一致するようにソケット名をADAPTします
[siteusername]
listen = /tmp/php7-fpm-siteusername.sock
(Debian 9では、php5ではなくphp7になりました)
Vhost定義で、以下を削除します
FastCgiExternalServer /home/siteusername/www/php5-fcgi -socket /tmp/php5-fpm-siteusername.sock -pass-header Authorization
...
AddHandler php5-fcgi .php
Action php5-fcgi /php5-fcgi
Alias /php5-fcgi /home/siteusername/www/php5-fcgi
同じ仮想ホスト定義に以下を追加します
<FilesMatch \.php$>
SetHandler "proxy:unix:/tmp/php7-fpm-siteusername.sock|fcgi://localhost"
</FilesMatch>
別の方法として、vhost定義に以下を追加できます
ProxyPassMatch "^/(.*\.php(/.*)?)$" "unix:/tmp/php7-fpm-siteusername.sock|fcgi://localhost/home/siteusername/www/"
モジュールmod_proxyおよびmod_proxy_fcgiが有効になっていることを確認してください
a2enmod proxy proxy_fcgi