web-dev-qa-db-ja.com

なぜphp-fpmのphp-cgiラッパースクリプトなのですか? (virtualhostとsuexecを使用します。)

サーバーをApache、FastCGI、およびPHP-FPMでセットアップしただけです。私の質問は/ cgi-bin /フォルダーに関するものです。異なるユーザー/グループを使用してApacheを実行するすべての仮想ホストに/ cgi-bin/php-fpmラッパーが本当に必要ですか?さらに、ユーザーがcgi-binフォルダーを削除すると、fpm/fastcgiの利点が失われます。理想的には、.confファイルの外部に何も必要とせずにPHP-FPMをセットアップしたいと思います。

私の知る限り、php-cgiバイナリ(php-fpmラッパーが実行するのはこれだけです)は、システム上のすべてのユーザーが実行できます...だから、実行されるのと同じ実行可能ファイルをラップする手間がかかるのはなぜですか?とにかくユーザー?具体的には、ラッパーを経由せずに、php-cgiバイナリを直接使用するようにこの構成を変更するにはどうすればよいですか?

私の質問に関連する関連ファイル/結果は次のとおりです。

/ etc/Apache2/modules.d/20_mod_fpm.conf 
 --------------------- -------------------------------------------------- ---------- 
 ... 
 
 FastCgiExternalServer/var/www/localhost/cgi-bin/php-fpm -Host 127.0.0.1:9000 
 
 AddHandler php-fpm .php 
アクションphp-fpm/cgi-bin/php-fpm 
 
 DirectoryIndex index.php 
 
 ... 
/ var/www/localhost/cgi-bin/php-fpm 
 ------------------- -------------------------------------------------- ------------ 
#!/ usr/bin/php-cgi 
phpinfo() 
 ------------------------------ -------------------------------------------------- -
 ... 
サーバーAPI:FPM/FastCGI 
 ... 

美しい。ベンチマークを実行すると、セットアップは実際に非常にうまく機能していることが報告されます。デフォルトのApache/PHPインタープリターセットアップを使用した場合、1秒あたり13リクエストではなく、1秒あたり最大135リクエストです。つまり、残っているのは、マルチユーザーの側面をシームレスにすることだけです。

1
Caleb Gray

例として、Redhat/centosマシンでは、php-fpmは実際には/ usr/sbin /ディレクトリ内のバイナリです。サーバー(Apache/nginx)からの呼び出しをインターセプトして、phpリクエストを処理します。 php-fpmの設定は、php-fpm.conf( http://php-fpm.org/wiki/Configuration_File )で調整できます。これにより、システムを微調整できます。 php-fpmは非常に高度であり、システムに多くの制御を提供します。

どういうわけか、システム上のphp-fpmファイルは通常のfastcgi/cgiラッパーに似ているようです。 「ご使用のバージョンのphp-fpm」の使用をバイパスしてphp-cgiを直接使用する場合は、カスタムfastcgiラッパーを使用できます。カスタムfastcgiラッパーの例は次のとおりです。

#!/bin/bash
### Set PATH ###
PHP_CGI=/usr/bin/php-cgi
PHP_FCGI_MAX_REQUESTS=1000
export PHP_FCGI_MAX_REQUESTS
exec $PHP_CGI

Php-fpm.confで設定できるオプションの1つは、別のユーザーとしてphpスクリプトを実行できるようにすることです。 Suexecもこの関数を提供し、Apacheから呼び出して、phpファイルを処理するfastcgiラッパーにリクエストを渡すことができます。一緒に、suexec + fastcgiはphp-fpmのいくつかの重要な機能を提供するため、代替として使用できます。

1
tonytz

ラッパーを使用すると、オプションで、環境変数の設定、php.iniファイルの選択などの追加の構成を行うことができます。

0
tylerl