このページではLinux、Apache/httpd、PHP及びMySQLを用いたLAMPシステムのApacheとPHPの設定について初心者/ビギナー向けに解説します。
お便利サーバー.com+相互リンクサイト内をキーワードで検索
CMS/LAMPシステムの構築

CMS/LAMPシステムとは

ApacheとPHPの設定

MySQLの導入と基本設定

MySQLのコントロール

HTTPSのためのルーター設定

phpMyAdminのインストール

データベースの作成と削除

XOOPS Cubeのインストール

WordPressのインストール

MovableType3のインストール

MovableType4のインストール

MovableType5のインストール

osCommerceのインストール

データベースのバックアップ

データベースのリストア


まずApacheのセキュリティの設定を見直すこと

CMS は サーバー に インストール して利用する アプリケーション ですが、「サーバーの管理者がインストールを行って管理する」という一般的なサーバーアプリケーションの運用スタイルはとらないのが普通です。

サーバー管理者が行うのは、 構築中のLinuxサーバー にCMSが導入できる環境を整えるまでが仕事で、CMSは通常、個々の コンテンツ を構築する クライアント ユーザーが好みのものを選んでサーバーに アップロード して使用する、という利用スタイルが一般的です。

つまり、「 構築中のLinuxサーバー でコンテンツを運用するのは自分一人だけ。」というのであればあまり心配しなくてもかまいません。

しかしコンテンツスペースを第三者に貸し出す場合にはCMSの導入から先を他人に委ねることになります。

従ってCMSを導入する際には、 Apache の セキュリティ についてもう一度見直しを行う必要があります。

Apacheでユーザーディレクトリを公開して第三者にコンテンツスペースを貸し出す場合は、まず、 セキュリティ重視のユーザーディレクトリの設定 のような高めのセキュリティ設定からスタートし、そのセキュリティ設定がCMSの利用に影響を及ぼす場合にのみ段階的にセキュリティを緩和してゆくのが定石といえるでしょう。

もちろん、貸し出すのが バーチャルホスト Apacheのバーチャルホスト設定について である場合も考え方は同じです。

PHPの設定の確認と修正

phpスクリプトからの設定の確認方法

構築中のLinuxサーバー がこの コンテンツ に従ってセットアップされていれば、既に PHP はきちんと導入されているはずですので、その動作と設定を確認してみましょう。

まず サブネット 内の適当な クライアント機 から SSHクライアント で 構築中のLinuxサーバー に ログイン します SSHクライアントでサーバーに接続する(WBEL3) SSHクライアントでサーバーに接続する(CentOS3) SSHクライアントでサーバーに接続する(WBEL4) SSHクライアントでサーバーに接続する(CentOS4) SSHクライアントでサーバーに接続する(CentOS5) 。

それから su コマンド で アカウント を "root" に変更し、 echo コマンドをつかってPHPの設定確認用のPHP スクリプト "phpinfo.php" を Apache のドキュメントルート Apacheのドキュメントルートについて に作成します。

[tanaka@web1 ~]$ su -Enter
Password: "root"のパスワードを入力します。 Enter
[root@web1 ~]# echo "<?php phpinfo() ?>" > /var/www/html/ph
pinfo.php
Enter 出力のりダイレクトについて
[root@web1 ~]#

コマンドがちょっと複雑でわかり難いかもしれませんが、要は、 "<?php phpinfo() ?>" という内容の テキスト ファイルを作成しているだけです。

次に、 HTTP でアクセス可能な任意の クライアント から、 構築中のLinuxサーバー に Webブラウザ で

http://www.obenri.com/phpinfo.php

や

http://192.168.100.11/phpinfo.php

のようにアクセスしてみてください。

PHPがきちんとインストールされ、Apacheが稼動していれば以下のようなページが表示されます。

システムにインストールされているPHPの設定
システムにインストールされているPHPの設定(WBEL3の例)

WBEL や CentOS に インストール されているPHPは、日本語への対応を含めて一般的なCMSならばそのまま利用できるような デフォルト 設定になっています。

従って通常はPHPの設定を変更する必要はありませんが、導入するCMSの説明の中に設定に関する指示がある場合には適宜修正する必要があります。

また、CMSの導入後にエラーが発生するときは、そのエラーメッセージに従って適宜設定を変更する必要があるかもしれません。

設定の修正や方法はPHPの初期設定ファイルの書き換えで行いますが、その方法は以下で説明します。

"/etc/php.ini"の編集による設定の変更

PHPの設定は、その初期設定ファイルである "/etc/php.ini" を nanoエディタ などで修正して行います。

"/etc/php.ini" は結構大きな設定ファイルですので、 cp コマンドでバックアップを作成してから作業するようにします。

[root@web1 ~]# cp -p /etc/php.ini /etc/php.ini.orgEnter
[root@web1 ~]# nano /etc/php.iniEnter
↓
デフォルトの/etc/php.ini
デフォルトの"/etc/php.ini"

利用するCMSに特に指定がない限りは、php.iniはデフォルトのままでも大丈夫なことが多いのですが、CMSのマニュアルで設定変更の指示がある場合は該当するパラメータを変更する必要があります。

また最近のCMSはかなり大きな仕事をPHPに依存することがあり、PHPがデフォルトで使用する メモリ の容量では不足することがあります。

こういう場合は具体的なエラーは表示されませんが、例えば操作中に「ページが見つからない。」あるいは「真っ白な画面で何も表示されない。」といった状況になりますので、こういう場合はPHPの使用メモリ量を増やす必要があります。

PHPが使用するメモリの容量の設定は、WBEL3やCentOS3では 232行目あたり 、WBEL4及びCentOS4では 246行目あたり 、CentOS5では 314行目あたり にあります。

memory_limit = 8M   ; Maximum amount of memory a script may consume (8MB)

WBEL3、CentOS3、WBEL4、CentOS4ではこのようにデフォルトでは8 MB になっていますので、例えば、

サーバー機が実装しているメインメモリの容量に合わせて調整します。
memory_limit = 64M   ; Maximum amount of memory a script may consume (8MB)

のように増やすときちんと動作するようになります。

CentOS5ではデフォルトで 128MB の設定になっていますが、これは利用されるCMSのメモリ要求量の増大に合わせて、というよりも、PHP自身の動作に必要メモリ量が増えたことと、近年のホスト機が潤沢にメモリを搭載しているケースが大部分であることから、かなり余裕を持った設定になっている、と解釈してください。

従ってCentOS5でPHPを利用する場合、 サーバー機 の搭載メモリ容量が少ないとき(概ね512MB以下)は、適宜小さな数値に変更しなければならない可能性がある点に注意してください。

ところでLAMPによるCMSでは、写真などの画像データを Webサーバー アップロード する場合、 FTP ではなくPHPを利用して HTTP で行うのが普通です。

一般にFTPによるファイル転送では、それを実行するのは通常サイトオーナー自身ですから、転送可能なファイル容量に制限をかける必要はありません。

しかしユーザーからの投稿写真などを掲載するスタイルのCMSでは、安全のためにアップロード可能なファイル容量に制限をかけておくのが望ましいでしょう。

PHPがHTTPのPOSTメソッド(クライアントからサーバーへデータを送る手続き)で扱えるデータ量の上限の設定は、WBEL3やCentOS3では 373行目あたり 、WBEL4及びCentOS4では 388行目あたり 、CentOS5では 477行目あたり にあります。単位はMBです。

post_max_size = 8M

また、PHPがアップロードを許可するファイル容量の上限の設定は、WBEL3やCentOS3では 482行目あたり 、WBEL4及びCentOS4では 501行目あたり 、CentOS5では 582行目あたり にあります。こちらも単位はMBです。

upload_max_filesize = 2M

一般的なCMSの運用では、アップロードの対象は写真などが主ですから通常これらの値は、先に説明したPHPの使用メモリの量を合わせてデフォルト値の、

memory_limit = 8M   CentOS5の場合は128M
.
post_max_size = 8M
.
upload_max_filesize = 2M

でも不都合はないはずです。

しかし、例えば バイナリ プログラムの投稿サイトを運営するような場合は、上限が2Mでは不足かもしれません。

またこのセクションでも解説している phpMyAdmin などの、 クライアント からHTTPで接続して MySQL を制御するプログラムを使用する場合、データベースのリストア作業はすなわちファイルのアップロード作業ということになりますから、こういうケースでは一時的にでもファイルサイズの制限を緩めなければならなくなるでしょう phpMyAdminによるリストア作業について。

設定のルールとしては理屈からいうと、

PHPの使用メモリ量 ≧ POSTで扱うデータ量 ≧ アップロードファイル容量
いちいち設定を変更するのが面倒だからといって、これらの値をむやみに大きくするのはもちろんNGです。
大きなファイルをアップロードする必要がなくなったら、速やか最適値に戻すようにしましょう。

という序列である必要がありますから、例えば12MBのファイルのアップロードを許可したい場合は、

memory_limit = 32M   CentOS5の場合は128Mのまま変更しません
.
post_max_size = 20M
.
upload_max_filesize = 16M

のように設定を変更します。

"/etc/php.ini" では、このようにPHPの動作に関する基本的な設定を行いますが、その他の細かい設定の修正についてはCMSのマニュアルなどを参考に適宜行ってください。

また、 "/etc/php.ini" の ディレクティブ を修正して保存したら、必ずApacheの再起動または設定の再読み込み作業 Apacheのコントロールについて を行ってください。

PHPはApacheのモジュールとして動作していますので、これで設定の変更を有効にすることができます。

また、PHPによるアップロードファイルサイズの制限については "/etc/php.ini" だけではなく、Apacheの設定である "/etc/httpd/conf.d/php.conf" にも別途記述されていることがありますから、こちらの設定もあわせて確認する必要がありますので注意してください。

"/etc/httpd/conf.d/php.conf" については以下に引き続いて説明します。

phpスクリプトの記述とHTMLとの関係について

PHPは通常、例えば以下のように HTML 形式で書かれたテキストの中に、 赤字 のようにPHPスクリプトの位置を指定して埋め込む形で記述されます。

<html>
・
・
<head>
・
・
</head>
<body>
・
・

現在あなたが利用しているグローバルIPアドレスは
<?php
$youraddress = $_SERVER['REMOTE_ADDR'];
echo $youraddress;?>

です。
・
・
</body>
</html>

PHPスクリプトを埋め込んだHTMLファイルは、特定の拡張子のファイルとすることでPHPスクリプトが埋め込まれていることを判定し、実行するようになっています。

その判定を行うための設定は、 "/etc/httpd/conf.d/php.conf" に記述されていますが、内容はOSの種類によって異なります。

"/etc/httpd/conf.d/php.conf"の編集(WBEL3,4 CentOS3,4)

まず、nanoエディタで "/etc/httpd/conf.d/php.conf" を開きます nanoエディタでファイルを開く 。

[root@web1 ~]# nano /etc/httpd/conf.d/php.confEnter
↓
デフォルトの/etc/httpd/conf.d/php.conf(WBEL3,4 CentOS3,4)
デフォルトの"/etc/httpd/conf.d/php.conf"(WBEL3,4 CentOS3,4)

この "/etc/httpd/conf.d/php.conf" の内容から "#" でコメントアウトされた部分を除くと(つまり有効な設定のみを抜き出すと)以下のようになります。

LoadModule php4_module modules/libphp4.so  ←PHPモジュールを有効にする設定

<Files *.php>       ←ファイル名"*.php"に関するコンテナの定義 Filesコンテナについて
  SetOutputFilter PHP    ←出力フィルタ"PHP"をセット
  SetInputFilter PHP     ←入力フィルタ"PHP"をセット
  LimitRequestBody 524288  ←リクエストするデータサイズの制限
</Files>

DirectoryIndex index.php  ←省略可能なファイル名の設定 DirectoryIndexディレクティブについて

つまりPHPに関するApache上のデフォルトの設定では、

1."*.php"という名前のファイルをPHPスクリプトとして処理する。

2. クライアント から受け付けるリクエストのデータ容量を約500 KB に制限する。

3.ファイル名"index.php"は省略可能

となっています。

1. についてですが、通常はこの設定でも何ら問題はありません。しかしCMSの種類によっては "*.php3" や "*.php4" のように、拡張子の後ろにバージョンの数字を付加したファイル名でPHPスクリプトを扱うものがありますから、このままでは "*.php3" や "*.php4" はただのテキストファイルとして処理され、Webブラウザでアクセスすると画面にその内容が表示されるだけになってしまいます。

そこでこのようなファイル名を扱うCMSを利用する場合には、とりあえず以下のように設定を追加しておくとよいでしょう。

LoadModule php4_module modules/libphp4.so

<Files *.php>
  SetOutputFilter PHP
  SetInputFilter PHP
  LimitRequestBody 524288
</Files>

<Files *.php?>
  SetOutputFilter PHP
  SetInputFilter PHP
  LimitRequestBody 524288
</Files>


DirectoryIndex index.php
CMSによっては "DirectoryIndex" ディレクティブにも追加を行う必要があるかもしれません。

これで、 "*.php" の後に任意の一文字がくっついたファイルもPHPスクリプトとみなされて実行可能になります。

2. については、例えばクライアントからの写真データの アップロード など受け付けるCMSを運用する場合、ひょっとしたら500KBというデータ量の制限によって満足に働くことができないかもしれません。

当たり前に考えればこういう場合は、

LoadModule php4_module modules/libphp4.so

<Files *.php>
  SetOutputFilter PHP
  SetInputFilter PHP
  LimitRequestBody 2100000
</Files>

DirectoryIndex index.php

のように修正することで許容できるデータ容量を調整することができますが、オススメは、

LoadModule php4_module modules/libphp4.so

<Files *.php>
  SetOutputFilter PHP
  SetInputFilter PHP
#  LimitRequestBody 524288
</Files>

DirectoryIndex index.php

のように 設定そのものを無効化してしまうことです 。

このページの前半で説明したとおり、PHPによるアップロード可能なファイルサイズはPHPそのものの動作設定 "/etc/php.ini" の中の "memory_limit" 、 "post_max_size" 、 "upload_max_filesize" の各 ディレクティブ 記述で制限されています。

ですからこの "/etc/httpd/conf.d/php.conf" で "LimitRequestBody" を有効にしてしまうと、アップロードファイルサイズの変更を行おうとするたびに 四つの設定を見直さなければならない ということになります。

つまり "/etc/httpd/conf.d/php.conf" で "LimitRequestBody" の設定そのものを無効化して、「ファイルのアップロードに関する設定は"/etc/php.ini"のみで行う」ことで設定を簡素化し、惑いの種を減らしてしまおう、という考え方です。

"/etc/httpd/conf.d/php.conf" への設定の追加や修正を行ったら、必ずApacheの再起動または設定の再読み込み作業 Apacheのコントロールについて を行って設定を有効化してください。

"/etc/httpd/conf.d/php.conf"の編集(CentOS5)

nanoエディタで "/etc/httpd/conf.d/php.conf" を開きます nanoエディタでファイルを開く 。

[root@web1 ~]# nano /etc/httpd/conf.d/php.confEnter
↓
デフォルトの/etc/httpd/conf.d/php.conf(CentOS5)
デフォルトの"/etc/httpd/conf.d/php.conf"(CentOS5)

この "/etc/httpd/conf.d/php.conf" の内容から "#" でコメントアウトされた部分を除くと(つまり有効な設定のみを抜き出すと)以下のようになります。

<IfModule prefork.c>
 LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
 LoadModule php5_module modules/libphp5-zts.so
</IfModule>
           ↑PHPモジュールを有効にする設定

AddHandler php5-script .php  ←ファイル名"*.php"をPHPの実行ファイルとして定義を追加
AddType text/html .php  ←ファイルタイプ"*.php"をPHPスクリプトファイルとして扱う

DirectoryIndex index.php  ←省略可能なファイル名の設定 DirectoryIndexディレクティブについて

つまりPHPに関するApache上のデフォルトの設定では、

1."*.php"という名前のファイルをPHPスクリプトとして処理する。

2.ファイル名"index.php"は省略可能

となっています。

通常はこの設定でも何ら問題はないのですが、CMSの種類によっては "*.php4" や "*.php5" のように、拡張子の後ろにバージョンの数字を付加したファイル名でPHPスクリプトを扱うものがありますから、このままでは "*.php4" や "*.php5" はただのテキストファイルとして処理され、Webブラウザでアクセスすると画面にその内容が表示されるだけになってしまいます。

そこでこのようなファイル名を扱うCMSを利用する場合には、とりあえず以下のように設定を追加しておくとよいでしょう。

<IfModule prefork.c>
 LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
 LoadModule php5_module modules/libphp5-zts.so
</IfModule>

AddHandler php5-script .php .php4 .php5
AddType text/html .php .php4 .php5

DirectoryIndex index.php
CMSによっては "DirectoryIndex" ディレクティブにも追加を行う必要があるかもしれません。

これで、 "*.php4" 及び "*.php5" もPHPスクリプトとみなされて実行可能になります。

また、MySQLの操作に phpMyAdmin を使用する場合 phpMyAdminのインストールについて 、暗号化関数の拡張モジュールを追加インストールしておかないとエラーになってしまいます。

拡張モジュールのインストールは yum を利用して簡単に行うことができますので、忘れないうちにやっておきましょう。

[root@web1 ~]# yum install php-mcryptEnter

    中略

Dependencies Resolved

=============================================================================
Package         Arch    Version     Repository    Size
=============================================================================
Installing:
php-mcrypt       i386    5.1.6-15.el5.centos.1 extras    16 k
Installing for dependencies:
libmcrypt        i386    2.5.8-4.el5.centos   extras   116 k

Transaction Summary
=============================================================================
Install   2 Package(s)
Upgrade   0 Package(s)

Total download size: 132 k
Is this ok [y/N]: y Enter

    中略

Complete!
[root@web1 ~]#

拡張モジュールの追加や "/etc/httpd/conf.d/php.conf" への設定の追加や修正を行ったら、必ずApacheの再起動または設定の再読み込み作業 Apacheのコントロールについて を行って設定を有効化してください。

このサイトは既に更新を終了していますが、今のところ店じまいの予定はありません。 リンクフリー ですので、趣味や勉強のためでしたら、引用、転用、コピー、朗読、その他OKです。このサイトへのリンクについては こちら をご覧ください。
Powered by Apache
”Linux”は、Linus Torvalds 氏の各国における登録商標です。”Red Hat”及びRed Hatのロゴおよび Red Hat をベースとしたすべての商標とロゴは、各国におけるRed Hat, Inc. 社の商標または登録商標です。その他のプログラム名、システム名、製品名などは各メーカー、ベンダの各国における登録商標又は商標です。
www.centos.org - The Community ENTerprise Operating System