Mod Fcgid
Mod Fcgidは、fastcgi対応アプリケーションとの通信を可能にするApacheモジュールです。これは、fastcgi上でphpを実行するためにapacheでセットアップするために使用できます。これは古いmod_fastcgiの代替であり、いくつかの違いがあります。
この投稿では、このモジュールを使用してphpでapacheを設定します。 mod_fastcgiを使用してapache+phpを設定することもできます。
fastcgiはphpの実行をapacheから遠ざけるので、mpmworkerのようなスレッドベースのmpmを自由に使用できます。
インストール
セットアップには、apache、php(cgiバイナリを使用)、mod_fcgid、mpmワーカーが必要です。コマンドラインからすぐにインストールします。
# sudo apt-get install apache2 libapache2-mod-fcgid apache2-mpm-worker php5 php5-cgi
mod_fcgidを有効にする
# sudo a2enmod fcgid
構成ファイルを見つける
必要なパッケージをインストールしたら、mod_fcgidを構成します。構成は主にさまざまな構成ファイルを介して行われます。したがって、構成ファイルがどこにあるかを知ることが重要です。
ubuntu/debianのapache構成ファイルは次のパスにあります
/etc/apache2/sites-available/default
ディストリビューションのApache構成ファイルの場所を見つけるには、apache2 / httpd/apachectlコマンドを使用します。
# apachectl -S apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName VirtualHost configuration: wildcard NameVirtualHosts and _default_ servers: *:80 is a NameVirtualHost default server 127.0.1.1 (/etc/apache2/sites-enabled/000-default:1) port 80 namevhost 127.0.1.1 (/etc/apache2/sites-enabled/000-default:1) Syntax OK
したがって、構成ファイルは / etc / apache2 / sites-enabled / 000-defaultにあります。 。
Fcgidの構成
Apacheは、すべての「.php」ファイルを処理するためにmod_fcgidを使用するように構成する必要があり、mod_fcgidは、phpfastcgiバイナリの場所を通知する必要があります。
/usr/bin/php-cgi
次の構成をvhostブロックのルートディレクトリセクションに追加します
<Ifmodule mod_fcgid.c> # FCGID registers a handler named fcgid-script AddHandler fcgid-script .php Options +ExecCGI FcgidWrapper /usr/local/bin/php-fcgid-wrapper </IfModule>という名前のハンドラーを登録します。
これは、ラッパースクリプトを使用してfastcgiプロセスphp-cgiを起動するようにapacheに指示します。また、fcgidハンドラーを使用して.phpファイルを実行するようにapacheに指示します。
プロセスの最大数などのfcgid設定を制御するには、vhostブロックの外部に関連する設定を追加します。
<Ifmodule mod_fcgid.c> # Context - server config FcgidMaxProcesses 150 # Otherwise php output shall be buffered FcgidOutputBufferSize 0 </IfModule>
これらの設定はサーバーコンテキストに適用されるため、Vhostブロックの外部にある必要があります。
ラッパースクリプト
これで、mod_fcgidがphp-cgiプロセスを起動するために使用するラッパースクリプトが追加されました。
#!/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 # Replace with the path to your FastCGI-enabled PHP executable exec /usr/bin/php-cgi
ラッパースクリプトは/usr / local / bin / php-fcgid-wrapperに保存しています。 ただし、どこにでも保存でき、パスはapache構成で指定する必要があります。
chmodを使用してラッパースクリプトを実行可能にします
/usr/local/bin# chmod +x php-fcgid-wrapper
そうしないと、apacheログに次のようなエラーが表示されます
[Tue Jun 11 02:53:20 2013] [warn] [client 127.0.0.1] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server [Tue Jun 11 02:53:20 2013] [error] [client 127.0.0.1] Premature end of script headers: server.php
また、「PHP_FCGI_CHILDREN」設定を使用しないように注意してください。 php-cgiバイナリは複数の子プロセスをフォークして管理できますが、fcgidは一度に複数のリクエストをphp-cgiバイナリに渡さないため、子プロセスは使用されません。これはドキュメントで説明されています
PHP child process management (PHP_FCGI_CHILDREN) should always be disabled with mod_fcgid, which will only route one request at a time to application processes it has spawned; thus, any child processes created by PHP will not be used effectively. (Additionally, the PHP child processes may not be terminated properly.) By default, and with the environment variable setting PHP_FCGI_CHILDREN=0, PHP child process management is disabled. The popular APC opcode cache for PHP cannot share a cache between PHP FastCGI processes unless PHP manages the child processes. Thus, the effectiveness of the cache is limited with mod_fcgid; concurrent PHP requests will use different opcode caches.
また、fcgidでAPCを使用することはできません。