web-dev-qa-db-ja.com

Debian Squeeze Apache 2.4.10 + mod_proxy_fcgi + php-fpmのVirtualHostでphp_valueを設定しますか?

サーバーをDebianJessie(8.3)に更新した後、Apache2.4.10をmpm_worker/mod_phpからmpm_event/proxy_fcgi/php-fpmに切り替えました。すべての仮想ホストに対して、次のようにハンドオフを構成しています。

# cat conf-enabled/php5-fpm.conf 
<FilesMatch \.php$>
    SetHandler "proxy:unix:/var/run/php5-fpm.sock|fcgi://localhost/"
</FilesMatch>

Mod_phpも無効にしました。そのため、ApacheではVirtualHostsファイルにphp_admin_value/php_value/php_flagディレクティブを含めることができません。

Invalid command 'php_value', perhaps misspelled or defined by a module not included in the server configuration

.user.iniファイルについて少し読みましたが、設定する必要のあるディレクティブがそこでサポートされているようには思えません。パフォーマンス上の理由から、サイトからすべての.htaccessファイルを正常に削除しただけです。これは、後方(および互換性のない)アプローチのようです。

他の一般的な提案は、VirtualHostごとに一意のプールを作成することですが、これには2つの理由があります。

  1. セットアップの複雑さ-現在、構成は非常にシンプルです
  2. ソケットからTCPに切り替えますか?プールごとに一意のTCPポートが必要であるという点で正しいですか?代わりに、プールごとに一意のソケットが必要ですか?
  3. メモリ割り当て!このサーバーには、私が望むほど多くのRAMがありません。サーバー上のあまりアクセスされていないサイトのために、大量のphp-fpmインスタンスをスピンアップするのは無駄に思えます。
1
jaydisc

最後に、/ etc/php5/fpm /php.ini構成でいくつかの[Host =]セクションを定義しました。

http://php.net/manual/en/ini.sections.php

これは、mod_envや.user.iniを使用するよりも安全だと感じました。

3
jaydisc

Apache構成ファイルからCGIプールに環境変数を渡すことができます。

    SetEnv PHP_ADMIN_VALUE "open_basedir=/path-to-your-doc-root"
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/var/run/php5-fpm.sock|fcgi://localhost/"
    </FilesMatch>

サードパーティユーザーがアップロードまたは変更できる場合は、mod_envを有効にする必要があり、.htaccessファイル処理を無効にする必要があります(AllowOverride None)。複数の変数を渡す必要がある場合は、それらを改行文字(\n)で連結する必要があります。

悪意のあるユーザーは、open_basedirまたはその他の重要なPHP構成変数(例:disable_functions)を単純な.htaccessで変更できます。この動作を防ぐことができます。

参照: https://bugs.php.net/bug.php?id=51595

2
Dinacel