俺としては、Apache1を従来より使ってき
た。しかし、時流に有る程度乗る必要があるのと人に教えなければいけない立場なので、このたび遅ればせながらApache2をFreeBSD環境にセット
アップしてみた。毎度のことであるが、Apache2自体のセットアップはなんて言うことはない。しかし、PHPのセットアップは色々と問題が出てくる。
今回もPHPのバージョンの問題にはまった(ToT)。以降、説明する。
1.セットアップ環境
マ
シン:富士通の限りなくおんぼろノート(Pentium100 MEM 40M HDD 20G)
OS:FreeBSD 4.7
2.Apache2のインス
トール(OS by FreeBSD)
1) Apache2の機能概
要
Apache2からはsslやWebDAVが
Apacheに組み込まれた様である。さらに、MPM(Multi Processing
Module)なるものが機能的に追加され、システムの用途で選べるようになったらしい。以下がApache2で機能アップした主な強化点である。
@
コアのモジュール化
A マルチプラットホーム
B IPv6対応
C UNIX以外のプラットホームでの動作改善
D マルチスレッド
E モジュールの増設
F フィルタリングモジュールの作成が可能
G エラーメッセージが多言語対応
H 設定が少なくなった
I モジュールの見直し改訂
ソースは、当然 http://www.apache.jp/
からゲットする。私がセットアップをした時は(2005年10月時点)、httpd-2.0.55.tar.gzが最新であった。
MPM機能は、マルチスレッドのタイプを
configureパラメータで指定する。以下のようなパラメータがある。
■ prefork
Apache1互換従来どおりの動作(デフォルト)。始めから、子プロセスを幾つか作っておいてクライアン
トからのアクセスを待機してるモード。従来のモードであるため、スレッドはシングルでプロセスはマルチ。
■ worker
本来のApache2のモード、従来のApache1ベースとプロセス内に複数スレッドを用意して同時接続
に対応する。Apache2の本来のモードで有るため、性能をアップさせる。スレッドもプロセスもマルチに対応。
■ perchild
Apache2モードバーチャルホスト向けとでも言えばいいのか、プロセスもスレッドも両方マルチに対応し
て、それぞれ個別にIDをふることが出来るモード。
書式 :
--with-mpm = マルチスレッドのタイプ
2) コンパイル
# tar zxvf
httpd-2.0.55.tar.gz
# chown -R
root:wheel httpd-2.0.55
# cd
httpd-2.0.55
# ./configure
--with-mpm=worker --enable-rewrite
(従来のApache1モードで
使う場合は、configureだけでよい)
注:
上記のconfigureパラメータで行って最終的にDSOが組み込まれていなかったら、--enable-module=so及び--enable-
shared=yesパラメータを追加してもう一度configureからやり直してみること。
# make
# make install
3) httpd.confの
編集(各自それぞれ違うと思うが、私の主な編集した項目を書く)
■
訳有ってポート8080で動かさなくはならなかったので、Listen 8080とした。
■ ServerNameを編集。
■ <Directory "/usr/local/apache/htdocs">タブのoptionを編集。
■ <Directory /home/*/public_html>タブのoptionを編集。
■ DirectoryIndexを編集。
■ CGIを使えるようにAddHandlerを編集。
■ ランゲージのプライオリティの先頭をJaにしておいた方が良いかも知れない。
■ AddDefaultCharaset が設定され
ている場合は、#印のコメントする。AddDefaultCharaset=none は
やらない方が良い。
4) コンフィグレーションテ
スト及び起動
#
/usr/local/apache2/bin/apachectl configtest
エラーがなければ、起動
#
/usr/local/apache2/bin/apachectl start
5) 動作テスト
テスト用の日本語の
index.htmlを作る
# cd
/usr/local/apache2/htdocs
# mv <
日本語のindex.htmlファイル > index.html
http://localhost:8080/ でアクセスしてApacheのおなじみのテスト画面が出れば成功!
3.Apache2のインス
トール(OS by n-Linux)
http://www.apache.or.jp/ こ
こより。2005年10月現在最新の、 httpd-2.0.55.tar.gz をゲットした。
1) コンパイル
# tar zxvf
httpd-2.0.55.tar.gz
# chown -R
root.root httpd-2.0.55
# cd
httpd-2.0.55
# ./configure
--with-mpm=worker --enable-rewrite -enable-module=so --enable-shared=yes
# make
# make install
2) httpd.confの
編集
これは、2項を参照のこと。
3)自動起動スクリプト
# vi
/etc/init.d/httpd
#!/bin/bash
#
chkconfig: 2345 30 30
# description: Apache2 Script
start() {
echo -n "Starting Apache2: "
/usr/local/apache2/bin/apachectl start
return 0
}
stop() {
echo -n "Stopping Apache2: "
/usr/local/apache2/bin/apachectl stop
return 0
}
restart() {
echo -n "Restarting Apache2: "
/usr/local/apache2/bin/apachectl restart
return 0
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
esac
# chmod 755
/etc/init.d/httpd
# chkconfig --add httpd
# chkconfig --list
これで、httpd
が登録されていたら完了。
4.PHPのインストール(い
きなりエラーだよ(ToT)!)
1) あざやかな失敗の巻
(笑)
PHPをApache2にマウントするに当たっ
て、いきなり下記のようにmakeエラーで止まる。色々調べるとphp-4.1.2は、Apache1を入れなさい。みたいな事が書いてある海外のサイト
があるのでPHPのバージョンでApache2をサポートされてないのかも知れないなんて考えた。正確に言うと、php-4.1.2では
Apache2filterSAPI(インターフェース)をサポートしてないような気がする。想像だが。失敗は成功の元!ということで今回はPHPの最新バージョンphp-4.3.1(2003年3月
時点)をセットアップせざる負えなかった。
sapi_apache.c: In function
`apache_php_module_main':
sapi_apache.c:81: `NOT_FOUND' undeclared (first use in this function)
sapi_apache.c:81: (Each undeclared identifier is reported only once
sapi_apache.c:81: for each function it appears in.)
*** Error code 1
Stop in /usr/local/src/php-4.1.2/sapi/apache.
*** Error code 1
Stop in /usr/local/src/php-4.1.2/sapi/apache.
*** Error code 1
Stop in /usr/local/src/php-4.1.2/sapi.
*** Error code 1
Stop in /usr/local/src/php-4.1.2.
実は・・・ヒソッ(¬。
(* ̄∀ ̄*)なんと!PHP-4.2.*以降でないとapache2には対応してないそうな。/(-_-)\ こまった〜!
2) コンパイル
毎度の事ながら、 http://jp.php.net
から php-4.3.1.tar.gz をダウンロード!
# tar zxvf
php-4.3.1.tar.gz
# chown -R
root:wheel php-4.3.1
# cd php-4.3.1
# ./configure
--with-apxs2=/usr/local/apache2/bin/apxs --with-pgsql --without-mysql \
--with-dom --with-xml
--with-zlib --enable-mbstring --enable-mbregex \
--with-imap --enable-versioning --enable-zend-multibyte
赤色のオプションは、DOMをインストールしてる
ので追加しました。詳しくは、当サイト技術の部屋の PHP4
にDOMを実装する! を参照下さい。
# make
# make install
3) 設定
● httpd.confの設
定
LoadModule php4_module modules/libphp4.so
を追加する。
AddType application/x-httpd-php .php
を追加する。
● php.iniのコピー&
編集
# cp
php-4.3.1/php.ini-dist /usr/local/lib/php.ini
php.iniを編集。
# cd
/usr/local/lib/
# vi php.ini
;;
出力バッファリングを有効にする
output_buffering = On
;;
mb_output_handlerによる出力変換を有効にする
output_handler = mb_output_handler
;;
HTTPヘッダ charset を設定
default_charset = Shift_JIS
;;
日本語主体で使用
mbstring.language = Japanese
;;
内部エンコーディングをEUC-JPに設定
mbstring.internal_encoding = EUC-JP
;;
HTTP入力エンコーディング変換をautoに設定
mbstring.http_input = auto
;;
SJISに変換
mbstring.http_output = SJIS
;;
無効な文字を出力しない
mbstring.substitute_character = none
4) apacheのリスタート
PHPの設定を反映する為、apacheをリス
タートする。
#
/usr/local/apache2/bin/apachectl restart
5) PHPの動作テスト
# cd
/usr/local/apache2/htdocs
# vi
phpinfo.php
で以下の記述を追加。
<?
phpinfo();
?>
次に、 http://localhost:8080/phpinfo.php
をブラウザから入力して、旨くPHPの設定ビュー画面が出たら成功!
4.Apache2の自動起動
の設定
rc.dフォルダから自動起動させる。
# cd
/usr/local/etc/rc.d
# vi
apache2.sh
#!/bin/sh
if [ -x
/usr/local/apache2/bin/apachectl ]; then
/usr/local/apache2/bin/apachectl start
fi
# chmod 755
apache2.sh
以上
|