Fastcgiベースのphpハンドラー
Mod_fastcgiは、apacheがfastcgi対応アプリケーションと通信できるようにするapacheモジュールです。これを使用して、fastcgiが有効になっているphp-cgiバイナリを介してfastcgi上でphpコードを実行できます。
Fastcgiには、Webサーバー内で外部プログラムを実行する従来のcgiモデルに比べて多くの改善があります。 fastcgiを使用すると、複数のプロセスが存続し、各プロセスが再利用されて複数のリクエストを次々に処理します。プロセスが処理できるリクエストの最大数を制御する設定があります。その後、プロセスは終了し、新しいリクエストが開始されます。
パッケージをインストールする
最初に行うことは、synapticから必要なパッケージをインストールすることです。 Apacheサーバー、mod_fastcgi、mpmワーカー、phpをcgiバイナリと一緒にインストールする必要があります。すでにmpmpreforkとmod-phpを使用してphpをインストールしている場合は、これらのパッケージをインストールすると削除されることに注意してください
$ sudo apt-get install apache2 libapache2-mod-fastcgi apache2-mpm-worker php5 php5-cgi
ubuntuでは、
にあるapache構成ファイル/etc/apache2/sites-enabled/000-default
phpcgiバイナリは/usr/ bin/php-cgiにあります。
fastcgiを構成する
パッケージをインストールしたら、mod_fastcgiを使用してphpスクリプトを実行するようにapacheを構成します。 cgiと同様に、fastcgiもphp-cgiバイナリを使用してphpプロセスを実行します。
まず、a2enmodコマンドでfastcgiモジュールを有効にします
$ sudo a2enmod fastcgi
a2enmodコマンドは、モジュールの構成ファイルを / etc / apache2 / mods-availableからコピーします。 ディレクトリ/etc / apache2 / mods-enabled 。この場合の構成ファイルはfastcgi.confです。このように見えます
<IfModule mod_fastcgi.c> AddHandler fastcgi-script .fcgi FastCgiIpcDir /var/lib/apache2/fastcgi </IfModule>
Mod_fastcgiは、fastcgi-scriptというハンドラーをapacheに登録します。これを使用して、mod_fastcgiを介して実行するプログラムを指定できます。
では、次に進みましょう。次に、fastcgiハンドラーを使用してphpを実行するように関連するvhostを構成します。次の構成をapache構成ファイルの目的のvhostブロック内に配置します。
<Ifmodule mod_fastcgi.c> FastCgiServer /usr/local/bin/php-fastcgi-wrapper -processes 10 -restart-delay 1 -init-start-delay 1 -pass-header HTTP_AUTHORIZATION Alias /binary /usr/local/bin <Location /binary/php-fastcgi-wrapper> Options ExecCGI SetHandler fastcgi-script </Location> AddHandler php-fastcgi .php Action php-fastcgi /binary/php-fastcgi-wrapper </IfModule>
FastCgiServerは/usr / local / bin / php-fastcgi-wrapperを登録します さまざまなオプションを備えたfastcgiアプリケーションとして。
これは、さまざまな設定でphp-cgiバイナリを起動するシェルスクリプトであることに注意してください。 FastCgiServerに10個のプロセスを作成して管理するように依頼したことに注意してください。
AddHandler行は、php-fastcgiと呼ばれる「.php」ファイルの新しいハンドラーを宣言します。これは好きな名前を付けることができます。
アクション行は、cgiプログラム/ cgi-bin/php-fastcgi-wrapperを使用してphp-fastcgiファイルを処理するようにapacheに指示します。
現在、場所/ cgi-bin/php-fastcgi-wrapperは実際の場所ではありません。ラッパースクリプトの実際の場所を指すようにするために、Aliasディレクティブが使用されます。 /cgi-binが/usr/ local/binを指します。
ラッパースクリプト
fastcgiがphpを実行するために使用するラッパースクリプトが登場しました。
#!/bin/sh # Set desired PHP_FCGI_* environment variables. # Example: # PHP FastCGI processes exit after 500 requests by default. PHP_FCGI_MAX_REQUESTS=10000 export PHP_FCGI_MAX_REQUESTS PHP_FCGI_CHILDREN=5 export PHP_FCGI_CHILDREN # Replace with the path to your FastCGI-enabled PHP executable exec /usr/bin/php-cgi
PHP_FCGI_CHILDRENの設定に注意してください。これは、各phpプロセスがさらに5つの子phpプロセスをフォークして管理する必要があることを指定します。そのため、以前のfastcgiは10個のプロセスを作成するように指示されていました。合計は10*5=50プロセスです。進行中のプロセス管理には2つのレベルがあります。 Mod_fastcgiは10個のphpプロセスを管理し、各phpプロセスはさらにそれぞれ5個のプロセスを管理します。
このファイルは次のパスに保存されます
/usr/local/bin/php-fastcgi-wrapper
ファイルが実行可能であることを確認してください。その上でchmodを実行します
/usr/local/bin# chmod +x php-fastcgi-wrapper
ファイルの場所は重要ではありません。 PHP_FCGI_MAX_REQUESTSなどのさまざまなオプションをphpプロセスに渡すには、ラッパースクリプトが必要です。
次に、Apacheを再起動し、ブラウザーでphpスクリプトを開いてセットアップをテストします。 phpで$_SERVER変数の内容を表示します。 [FCGI_ROLE] => RESPONDERが含まれている必要があります 。これは、fastcgiが動作していることを示しています。
また、htopまたはSystemMonitorを使用してプロセステーブルを確認してください。 50個のphp-cgiプロセスが実行されているはずです。
リソース
http://www.fastcgi.com/drupal/node/25
http://www.opensource.apple.com/source/apache_mod_php/apache_mod_php-12/php/sapi/cgi/README.FastCGI