web-dev-qa-db-ja.com

FPMを使用したサンドボックスユーザーによるDebian9ストレッチランプのセットアップ

以前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の更新された構成が何であるかを誰かが知っていますか?

1
Josh Janusch

これを試して。

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
2