このチュートリアルでは、OpenSUSE11.3にmod_fcgidとPHP5を使用してApache2をインストールする方法について説明します。 mod_fcgidは、古いmod_fastcgiの互換性のある代替手段です。 Apacheユーザーの代わりに所有者の権限でPHPスクリプトを実行できます。
1予備メモ
このチュートリアルでは、ホスト名server1.example.comとIPアドレス192.168.0.100のOpenSUSE11.3サーバーを使用しています。
このチュートリアルでは、mod_fcgidの使用法を示すために、www.example1.comとwww.example2.comの2つのApachevhostを作成します。
2 Apache2 / mod_fcgi/PHP5のインストール
次のように、Apache2、mod_fcgid、およびPHP5をインストールできます。
yast2 -i apache2 apache2-mod_fcgid php5-fastcgi
Apache2がすでにApacheモジュールとしてPHP5とともにインストールされている場合は、ここでPHP5モジュールを無効にします。
a2dismod php5
次に、suexecモジュールとfcgidモジュールを有効にします。
a2enmod suexec
a2enmod fcgid
次に、Apacheのシステム起動リンクを作成して起動します:
chkconfig --add apache2
/etc/init.d/apache2 start
次に、/ etc / php5 / fastcgi / php.ini ...
を開きます。vi /etc/php5/fastcgi/php.ini
...そして行cgi.fix_pathinfo=1:
のコメントを外します [...] ; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's ; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok ; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting ; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting ; of zero causes PHP to behave as before. Default is 1. You should fix your scripts ; to use SCRIPT_FILENAME rather than PATH_TRANSLATED. ; http://php.net/cgi.fix-pathinfo cgi.fix_pathinfo=1 [...] |
次に、Apacheを再起動します:
/etc/init.d/apache2 restart
3www.example1.comおよびwww.example2.comのVhostの作成
ここで、2つのvhost、www.example1.com(ドキュメントルート/ srv / www / web1 / webを使用)とwww.example2.com(ドキュメントルート/ srv / www / web2 / webを使用)を作成します。 www.example1.comはユーザーとグループweb1が所有し、www.example2.comはユーザーとグループweb2が所有します。
まず、ユーザーとグループを作成します。
groupadd web1
groupadd web2
useradd -s /bin/false -d /srv/www/web1 -m -g web1 web1
useradd -s /bin/false -d /srv/www/web2 -m -g web2 web2
chmod 755 /srv/www/web1
chmod 755 /srv/www/web2
次に、ドキュメントルートを作成し、それらをユーザー/グループweb1またはグループが所有するようにします。 web2:
mkdir -p /srv/www/web1/web
chown web1:web1 /srv/www/web1/web
mkdir -p /srv/www/web2/web
chown web2:web2 /srv/www/web2/web
suExecを使用してPHPを実行します。次のコマンドが示すように、suExecのドキュメントルートは/ srv/wwwです。
/usr/sbin/suexec2 -V
server1:~ # /usr/sbin/suexec2 -V
-D AP_DOC_ROOT="/srv/www"
-D AP_GID_MIN=96
-D AP_HTTPD_USER="wwwrun"
-D AP_LOG_EXEC="/var/log/apache2/suexec.log"
-D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
-D AP_UID_MIN=96
-D AP_USERDIR_SUFFIX="public_html"
server1:~ #
したがって、PHPバイナリ(/ usr / bin / php-cgi)は、suExecのドキュメントルートの外部にあるため、直接呼び出すことはできません。 suExecはシンボリックリンクを許可しないため、問題を解決する唯一の方法は、/ srv/wwwのサブディレクトリに各Webサイトのラッパースクリプトを作成することです。次に、ラッパースクリプトはPHPバイナリ/ usr / bin/php-cgiを呼び出します。ラッパースクリプトは、各Webサイトのユーザーとグループが所有している必要があるため、Webサイトごとに1つのラッパースクリプトが必要です。 / srv / www/php-fcgi-scriptsのサブディレクトリにラッパースクリプトを作成します。 / srv / www / php-fcgi-scripts/web1および/srv/www/php-fcgi-scripts/web2。
mkdir -p /srv/www/php-fcgi-scripts/web1
mkdir -p /srv/www/php-fcgi-scripts/web2
vi /srv/www/php-fcgi-scripts/web1/php-fcgi-starter
#!/bin/sh PHPRC=/etc/php5/fastcgi/ export PHPRC export PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_CHILDREN=8 exec /usr/bin/php-cgi |
vi /srv/www/php-fcgi-scripts/web2/php-fcgi-starter
#!/bin/sh PHPRC=/etc/php5/fastcgi/ export PHPRC export PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_CHILDREN=8 exec /usr/bin/php-cgi |
PHPRC行には、php.iniファイルが配置されているディレクトリが含まれています(つまり、/ etc / php5 / fastcgi /は/etc/php5/fastcgi/php.iniに変換されます)。 PHP_FCGI_MAX_REQUESTSは、fcgidプロセスが停止され、新しいプロセスが起動されるまでのリクエストの最大数です。 PHP_FCGI_CHILDRENは、起動されるPHPの子の数を定義します。
php-fcgi-starterスクリプトは実行可能である必要があり、スクリプト(およびスクリプトが含まれるディレクトリ)は、Webサイトのユーザーとグループが所有している必要があります。
chmod 755 /srv/www/php-fcgi-scripts/web1/php-fcgi-starter
chmod 755 /srv/www/php-fcgi-scripts/web2/php-fcgi-starter
chown -R web1:web1 /srv/www/php-fcgi-scripts/web1
chown -R web2:web2 /srv/www/php-fcgi-scripts/web2
次に、www.example1.comとwww.example2.comのApachevhostsを作成します。
vi /etc/apache2/vhosts.d/www.example1.com.conf
<VirtualHost *> ServerName www.example1.com ServerAlias example1.com ServerAdmin [email protected] DocumentRoot /srv/www/web1/web/ <IfModule mod_fcgid.c> SuexecUserGroup web1 web1 PHP_Fix_Pathinfo_Enable 1 <Directory /srv/www/web1/web/> Options +ExecCGI AllowOverride All AddHandler fcgid-script .php FCGIWrapper /srv/www/php-fcgi-scripts/web1/php-fcgi-starter .php Order allow,deny Allow from all </Directory> </IfModule> # ErrorLog /var/log/apache2/error.log # CustomLog /var/log/apache2/access.log combined ServerSignature Off </VirtualHost> |
vi /etc/apache2/vhosts.d/www.example2.com.conf
<VirtualHost *> ServerName www.example2.com ServerAlias example2.com ServerAdmin [email protected] DocumentRoot /srv/www/web2/web/ <IfModule mod_fcgid.c> SuexecUserGroup web2 web2 PHP_Fix_Pathinfo_Enable 1 <Directory /srv/www/web2/web/> Options +ExecCGI AllowOverride All AddHandler fcgid-script .php FCGIWrapper /srv/www/php-fcgi-scripts/web2/php-fcgi-starter .php Order allow,deny Allow from all </Directory> </IfModule> # ErrorLog /var/log/apache2/error.log # CustomLog /var/log/apache2/access.log combined ServerSignature Off </VirtualHost> |
正しいパス(およびSuexecUserGroup行の正しいユーザーとグループ)を入力してください。
/etc/apache2/httpd.confを開き、Include/etc/apache2/vhosts.d/*.conf行の前にNameVirtualHost*行を追加します(そうでない場合は、最初のvhostのみが機能します):
vi /etc/apache2/httpd.conf
[...] ### Virtual server configuration ############################################ # # VirtualHost: If you want to maintain multiple domains/hostnames on your # machine you can setup VirtualHost containers for them. Most configurations # use only name-based virtual hosts so the server doesn't need to worry about # IP addresses. This is indicated by the asterisks in the directives below. # # Please see the documentation at # <URL:http://httpd.apache.org/docs-2.2/vhosts/> # for further details before you try to setup virtual hosts. # # You may use the command line option '-S' to verify your virtual host # configuration. # NameVirtualHost * Include /etc/apache2/vhosts.d/*.conf [...] |
Apacheを再起動する前に、suExec実行可能ファイルの権限を変更します(そうしないと、Apacheを再起動すると次の警告が表示されます。警告:SuexecUserGroupディレクティブにはSUEXECラッパーが必要です):
chmod 4755 /usr/sbin/suexec2
その後、Apacheを再起動します:
/etc/init.d/apache2 restart
4つのテスト
次に、たとえばwww.example1.comWebサイトに小さなPHPテストファイルを作成します...
vi /srv/www/web1/web/info.php
<?php phpinfo(); ?> |
...そしてブラウザ(http://www.example1.com/info.php)でそのファイルを呼び出します。すべてがうまくいけば、出力は次のようになり、サーバーAPI行にCGI/FastCGIが表示されます。
Webサイトごとに5つのカスタムphp.ini
各Webサイトには独自のphp-fcgi-starterラッパースクリプトがあるため、Webサイトごとに異なるphp.iniファイルを定義できます。これを示すために、デフォルトのphp.ini(/etc/php5/fastcgi/php.ini)を/ srv / www / web2 /ディレクトリにコピーし、www.example2.comに/srvのphp.iniを使用させます。 / www / web2 /ディレクトリ:
cp /etc/php5/fastcgi/php.ini /srv/www/web2/
chown web2:web2 /srv/www/web2/php.ini
(これで、/ srv / www / web2 / php.iniを好みに合わせて変更できます。)
次に、/ srv / www / php-fcgi-scripts / web2 / php-fcgi-starter ...
を開きます。vi /srv/www/php-fcgi-scripts/web2/php-fcgi-starter
...そして/srv/ www / web2 /をPHPRC行に入れます:
#!/bin/sh PHPRC=/srv/www/web2/ export PHPRC export PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_CHILDREN=8 exec /usr/bin/php-cgi |
その後、Apacheを再起動します:
/etc/init.d/apache2 restart
新しいphpinfo();を作成します。 www.example2.comのファイル...
vi /srv/www/web2/web/info.php
<?php phpinfo(); ?> |
...そしてブラウザ(http://www.example2.com/info.php)でそれを呼び出します。ロードされた構成ファイルの行に/srv/www/web2/php.ini:
が表示されます。
6単一のPHP構成設定の変更
まったく新しいphp.iniファイルをWebサイトに渡す代わりに、PHPに-dスイッチを追加することで、php-fcgi-starterラッパースクリプトで単一のPHP構成設定を変更する(または両方を組み合わせて使用する)こともできます。実行可能。たとえば、Webサイトwww.example2.comのmagic_quotes_gpcを無効にする場合は、次のようにします。
vi /srv/www/php-fcgi-scripts/web2/php-fcgi-starter
#!/bin/sh PHPRC=/etc/php5/fastcgi/ export PHPRC export PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_CHILDREN=8 exec /usr/bin/php-cgi -d magic_quotes_gpc=off |
その後、Apacheを再起動します:
/etc/init.d/apache2 restart
次に、ブラウザ(http://www.example2.com/info.php)でinfo.phpスクリプトを再度呼び出し、magic_quotes_gpc行を検索します。今すぐ表示されるはずです:
7つのリンク
- mod_fcgid:http://fastcgi.coremail.cn/
- Apache:http://httpd.apache.org/
- PHP:http://www.php.net/
- OpenSUSE:http://www.opensuse.org/