GNU/Linux >> Linux の 問題 >  >> OpenSuse

OpenSUSE11.2でmod_fcgidとPHP5を使用してApache2を設定する方法

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

1予備メモ

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

このチュートリアルでは、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行を検索します。今すぐ表示されるはずです:

  • mod_fcgid:http://fastcgi.coremail.cn/
  • Apache:http://httpd.apache.org/
  • PHP:http://www.php.net/
  • OpenSUSE:http://www.opensuse.org/

OpenSuse
  1. PHP5とMySQLを使用してApache2をFedora15(LAMP)にインストールする方法

  2. openSUSE 12.1にPHP5とMySQL(LAMP)を使用してApache2をインストールする

  3. openSUSE12.1にPHP5FastCGIとMySQLを使用してlighttpdをインストールする方法

  1. Ubuntu11.10にPHP5とMySQLを使用してNginxをインストールする方法

  2. OpenSUSE Leap 15.3にPHPとApache(LAMPスタック)をインストールしてセットアップする方法

  3. Nginxをプロキシとしてインストールおよび設定する方法OpenSUSELeap15.3

  1. PHP5とMySQLを使用してApache2をFedora16(LAMP)にインストールする方法

  2. openSUSE12.1にPHP-FPMとMySQLを使用してNginxをインストールする方法

  3. OpenSUSE Leap 15.3にPHPとNginx(LEMP)をインストールしてセットアップする方法