Apache 設定 · 2 min read · Dec 03, 2025

Mandriva 2009.1 に mod_fcgid と PHP5 を使って Apache2 を設定する方法

Mandriva 2009.1 に mod_fcgid と PHP5 を使って Apache2 を設定する方法

Version 1.0
Author: Falko Timme
Follow me on Twitter

このチュートリアルでは、Mandriva 2009.1 に mod_fcgid と PHP5 を使って Apache2 をインストールする方法を説明します。mod_fcgid は、古い mod_fastcgi の互換性のある代替手段です。これにより、Apache ユーザーの代わりに所有者の権限で PHP スクリプトを実行できます。

私はこれがあなたにとって機能するという保証はしません!

1 前提条件

このチュートリアルでは、ホスト名 server1.example.com と IP アドレス 192.168.0.100 の Mandriva 2009.1 サーバーを使用しています。

このチュートリアルでは、mod_fcgid の使用を示すために、www.example1.com と www.example2.com の 2 つの Apache vhosts を作成します。

2 Apache2/mod_fcgi/PHP5 のインストール

まず、パッケージデータベースを更新します:

urpmi.update -a

次のようにして Apache2、mod_fcgid、および PHP5 をインストールできます(mod_fcgid は apache-mpm-prefork の代わりに apache-mpm-worker を必要とするため、現在 apache-mpm-prefork がインストールされている場合、それに依存する Apache モジュールは削除されます。たとえば apache-mod_php):

urpmi apache-mpm-worker apache-mod_fcgid php-fcgi

[root@server1 ~]# urpmi apache-mpm-worker apache-mod_fcgid php-fcgi
次のパッケージは他のパッケージをアップグレードするために削除する必要があります:
apache-mod_perl-2.0.4-5mdv2009.1.x86_64
(apache-mpm-worker-2.2.11-10.5mdv2009.1.x86_64 との競合のため)
apache-mod_php-5.2.9-1mdv2009.1.x86_64
(apache-mpm-worker[>= 2.2.8] との競合のため) (y/N) <– y
依存関係を満たすために、次のパッケージがインストールされます:
Package Version Release Arch
(medium “Main Updates”)
apache-base 2.2.11 10.5mdv2009.1 x86_64
apache-mod_ssl 2.2.11 10.5mdv2009.1 x86_64
apache-modules 2.2.11 10.5mdv2009.1 x86_64
apache-mpm-prefork 2.2.11 10.5mdv2009.1 x86_64
apache-mpm-worker 2.2.11 10.5mdv2009.1 x86_64
php-fcgi 5.2.9 6.2mdv2009.1 x86_64
(medium “Contrib”)
apache-mod_fcgid 2.2 6mdv2009.1 x86_64
6MB のディスクスペースが解放されます。
977KB のパッケージが取得されます。
7 パッケージのインストールを続行しますか? (Y/n) <– Y

次に、/etc/php.ini を開きます…

vi /etc/php.ini

… そしてファイルの最後に cgi.fix_pathinfo = 1 の行を追加します:

| [...] cgi.fix_pathinfo = 1 |

その後、Apache を再起動します:

/etc/init.d/httpd restart

3 www.example1.com と www.example2.com のための Vhosts の作成

これから、www.example1.com(ドキュメントルート /var/www/web1/web)と www.example2.com(ドキュメントルート /var/www/web2/web)の 2 つの vhosts を作成します。www.example1.com はユーザーおよびグループ web1 に、www.example2.com はユーザーおよびグループ web2 に所有されます。

まず、ユーザーとグループを作成します:

groupadd web1  
groupadd web2  
useradd -s /bin/false -d /var/www/web1 -m -g web1 web1  
useradd -s /bin/false -d /var/www/web2 -m -g web2 web2  
chmod 755 /var/www/web1  
chmod 755 /var/www/web2

次に、ドキュメントルートを作成し、それをユーザー/グループ web1 および web2 に所有させます:

mkdir -p /var/www/web1/web  
chown web1:web1 /var/www/web1/web  
mkdir -p /var/www/web2/web  
chown web2:web2 /var/www/web2/web

PHP を suExec を使用して実行します。suExec のドキュメントルートは /var/www であり、次のコマンドが示しています:

/usr/sbin/suexec -V
[root@server1 ~]# /usr/sbin/suexec -V  
 -D AP_DOC_ROOT="/var/www"  
 -D AP_GID_MIN=100  
 -D AP_HTTPD_USER="apache"  
 -D AP_LOG_EXEC="/var/log/httpd/suexec_log"  
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"  
 -D AP_SUEXEC_UMASK=077  
 -D AP_UID_MIN=100  
 -D AP_USERDIR_SUFFIX="public_html"  
[root@server1 ~]#

したがって、PHP バイナリ(/usr/bin/php-fcgi)を直接呼び出すことはできません。なぜなら、それは suExec のドキュメントルートの外にあるからです。suExec はシンボリックリンクを許可しないため、問題を解決する唯一の方法は、/var/www のサブディレクトリに各ウェブサイトのラッパースクリプトを作成することです。ラッパースクリプトは PHP バイナリ /usr/bin/php-fcgi を呼び出します。ラッパースクリプトは各ウェブサイトのユーザーおよびグループに所有される必要があるため、各ウェブサイトごとに 1 つのラッパースクリプトが必要です。私は /var/www/php-fcgi-scripts のサブディレクトリにラッパースクリプトを作成します。たとえば、/var/www/php-fcgi-scripts/web1 と /var/www/php-fcgi-scripts/web2 です。

mkdir -p /var/www/php-fcgi-scripts/web1  
mkdir -p /var/www/php-fcgi-scripts/web2
vi /var/www/php-fcgi-scripts/web1/php-fcgi-starter

| #!/bin/sh PHPRC=/etc/ export PHPRC export PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_CHILDREN=8 exec /usr/bin/php-fcgi |

vi /var/www/php-fcgi-scripts/web2/php-fcgi-starter

| #!/bin/sh PHPRC=/etc/ export PHPRC export PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_CHILDREN=8 exec /usr/bin/php-fcgi |

PHPRC 行には php.ini ファイルがあるディレクトリ(すなわち、/etc/ は /etc/php.ini に変換されます)が含まれています。PHP_FCGI_MAX_REQUESTS は、fcgid プロセスが停止し、新しいプロセスが起動される前の最大リクエスト数を定義します。PHP_FCGI_CHILDREN は起動される PHP 子プロセスの数を定義します。

php-fcgi-starter スクリプトは実行可能でなければならず、それら(およびそれらが含まれるディレクトリ)はウェブサイトのユーザーおよびグループに所有されている必要があります:

chmod 755 /var/www/php-fcgi-scripts/web1/php-fcgi-starter  
chmod 755 /var/www/php-fcgi-scripts/web2/php-fcgi-starter  
chown -R web1:web1 /var/www/php-fcgi-scripts/web1  
chown -R web2:web2 /var/www/php-fcgi-scripts/web2

次に、www.example1.com と www.example2.com のための Apache vhosts を作成します。/etc/httpd/conf/httpd.conf の最後に次の 2 つの vhosts を追加します:

vi /etc/httpd/conf/httpd.conf

| [...] NameVirtualHost *:80 ServerName www.example1.com ServerAlias example1.com ServerAdmin [email protected] DocumentRoot /var/www/web1/web/ SuexecUserGroup web1 web1 PHP_Fix_Pathinfo_Enable 1 Options +ExecCGI AllowOverride All AddHandler fcgid-script .php FCGIWrapper /var/www/php-fcgi-scripts/web1/php-fcgi-starter .php Order allow,deny Allow from all # ErrorLog /var/log/apache2/error.log # CustomLog /var/log/apache2/access.log combined ServerSignature Off ServerName www.example2.com ServerAlias example2.com ServerAdmin [email protected] DocumentRoot /var/www/web2/web/ SuexecUserGroup web2 web2 PHP_Fix_Pathinfo_Enable 1 Options +ExecCGI AllowOverride All AddHandler fcgid-script .php FCGIWrapper /var/www/php-fcgi-scripts/web2/php-fcgi-starter .php Order allow,deny Allow from all # ErrorLog /var/log/apache2/error.log # CustomLog /var/log/apache2/access.log combined ServerSignature Off |

正しいパス(および SuexecUserGroup 行の正しいユーザーとグループ)を入力してください。

その後、Apache を再読み込みします:

/etc/init.d/httpd reload
Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。