Apacheのインストール&構築

1.はじめに

さぁ〜いよいよWWWサーバーを立ち上げます。
今までは、それぞれのソフトはほとんど個別に動いていましたが、WWWサーバーでは
いろいろなモジュールが有るので、インストール設定などが複雑です。
各自、必要なモジュールだけ選んでいれましょう。
使用しないモジュール部分は飛ばしてインストール、設定しても大丈夫です。

2.本体+SSLのインストール

まずapache_1.3.36をDLする。
http://www.apache.jp/
http://httpd.apache.org/download.cgi
に最新版があります。
DLしたら/usr/local/srcなどに解凍する
$ cd /usr/local/src
$ tar zxvf apache_1.3.36.tar.gz

次にOPENSSL0.9.8bをダウンロードし解凍する。
http://www.openssl.org/source/
ここに最新版があります。
DLしたら同じく/usr/local/srcに解凍します。
$ cd /usr/local/src
$ tar xvzf openssl-0.9.8b.tar.gz

次にOPENSSLのコンフィグをする。
$ cd openssl-0.9.8b
$ ./config --prefix=/usr/local --openssldir=/usr/local/src/openssl-0.9.8b -fPIC
               ↑                ↑
               |        opensslのソースの位置を指定
      インストールするディレクトリを指定

#-fPIC はDSO 版作成時に必要なPIC(Position Independent Code)
オプションを指定してconfigureしています
$ make

ここでmake installはしない。

次にmod_sslのコンフィグをする
http://www.modssl.org/
に最新があります。
解凍してconfigure
$ cd /usr/local/src
$ tar xvfz mod_ssl-2.8.27-1.3.36.tar.gz
$ cd mod_ssl-2.8.27-1.3.36
$ ./configure --with-apache=../apache_1.3.36 --with-ssl=../openssl-0.9.8b --prefix=/usr/local/apache --enable-shared=ssl --enable-module=so --enable-rule=SHARED_CORE --enable-module=rewrite --enable-shared=rewrite

これでDSO,SSL,rewriteが有効になる。この段階でApacheのMakefileが適切に変更されている。
Apacheのディレクトリーに移動してコンパイルする
$ cd ../apache_1.3.36
$ make
$ make certificate

各種入力
--------------------------------------------------------------------------
Signature Algorithm ((R)SA or (D)SA) [R]:
暗号化方式は何を利用しますか?
RSAを使うのでRと入力してからリターンを押す。
--------------------------------------------------------------------------
1. Country Name (2 letter code) [XY]:
証明書を発行するための情報です。国名を入力してください。
例:JP
--------------------------------------------------------------------------
2. State or Province Name (full name) [Snake Desert]:
証明書を発行するための情報です。都道府県名を入力。
例:Tokyo
--------------------------------------------------------------------------
3. Locality Name (eg, city) [Snake Town]:
証明書を発行するための情報です。市町村名を入力してください。
例:Chiyoda
--------------------------------------------------------------------------
4. Organization Name (eg, company) [Snake Oil, Ltd]:
証明書を発行するための情報です。組織名(会社名)を入力してください。
例:NTT
--------------------------------------------------------------------------
5. Organizational Unit Name (eg, section) [Webserver Team]:
証明書を発行するための情報です。部署名を入力してください。
例:Docomo
--------------------------------------------------------------------------
6. Common Name (eg, FQDN) [www.snakeoil.dom]:
証明書を発行するための情報です。組織の通称を入力してください。
例:www.sv-miya.dyndns.org(無しでも可)
--------------------------------------------------------------------------
7. Email Address (eg, name@FQDN) [www@snakeoil.dom]:
証明書を発行するための情報です。メールアドレスを入力してください。
例:root@sv-miya.dyndns.org
--------------------------------------------------------------------------
8. Certificate Validity (days) [365]:
証明書の有効期限を入力してください。単位は日単位になります。
例:365
--------------------------------------------------------------------------
Certificate Version (1 or 3) [3]:
証明書のバージョンを指定してください。
バージョン3を使うので3を入力。
--------------------------------------------------------------------------
Encrypt the private key now? [Y/n]:
証明書の暗号化を行いますか?
行うのでYを入力。
--------------------------------------------------------------------------
Enter PEM pass phrase:
4文字以上のパスワードを入力してください。
適当なパスワードを入力。
--------------------------------------------------------------------------
Verifying password - Enter PEM pass phrase:
パスワードを再入力してください。
A12で入力したパスワードを再度入力。
--------------------------------------------------------------------------
入力終了後、インストールする。(ルート権限になっておくこと)
$ su
# make install
これでApache+SSLのインストールは終了

3.起動確認

インストール終了後
# /usr/local/apache/bin/apachectl startssl

で動作しているか見る。
動作していればmake certificateのところで入力したパスワードがきかれ、入力すると起動する。
動作を止める場合は
# /usr/local/apache/bin/apachectl stop
です。

4.mod_rubyのインストール

http://www.modruby.net/
まずmod_ruby をダウンロードし解凍する
$ cd /usr/local/src
$ tar xvzf mod_ruby-1.2.6.tar.gz
$ cd mod_ruby-1.2.6

mod_ruby.h をエディタで開いて、214行目にある
#define MR_DEFAULT_SAFE_LEVEL 1
   ↓
#define MR_DEFAULT_SAFE_LEVEL 0
と変更しコンパイル後インストールする
$ ./configure.rb --with-apxs=/usr/local/apache/bin/apxs
$ make
$ su
# make install

とすると、自動的に apache のモジュールディレクトリに mod_ruby.so ができまる。
httpd.conf に定義を追加し、apache を再起動させてやれば OK
httpd.conf修正例
LoadFile /usr/lib/libpthread.so
LoadModule ruby_module libexec/mod_ruby.so
AddModule mod_ruby.c
<IfModule mod_ruby.c>
  RubyRequire apache/ruby-run
  SetEnvIf Request_URI \.rbx rbx
  SetEnvIf Request_URI \.css rbx
  <Files *.rbx>
    SetHandler ruby-object
    RubyHandler Apache::RubyRun.instance
  </Files>
</IfModule>
なぜか最新rubyだとエラーしたので1行目の libpthread.so を読み込ませました
必ずmod_ruby.soよりも前に入れて下さい

5.PHPのインストール

まず、使用するデーターベースをインストールしておく必要があります。
私はMySQL派(マイナーですが)なのでMySQLをインストールします。
これはパッケージでもかまいません。
# pkg_add -r mysql323-server
これで他にも必要なパッケージは自動でダウンロード&インストールしてくれます。

次にデーターベースを初期化します
# cd /usr/local/bin
# ./mysql_install_db
# cd /var/db
# chown -R mysql:mysql mysql
後半のchownはrootのままだと立ち上がらないのでユーザーとグループをmysqlにします
あとはwebminからでも起動して下さい。

そして、Apacheでこのデータベースとの受渡をする為にPHPをインストールします。
http://jp.php.net/downloads.php
ここで最新版をダウンロードし解凍する
MySQLの場合
$ tar xvzf php-5.1.4.tar.gz
$ cd php-5.1.4
$ ./configure --with-mysql --with-apxs=/usr/local/apache/bin/apxs --enable-mbstring --enable-mbstr-enc-trans
$ make
$ su
# make install
私の場合、libx,l2がインストールされていないとエラーしたのでpkg_addでlibxml2をインストールし直して再configしました

引き続き設定をします。
まずPHP設定ファイルをコピーします
# cp php.ini-dist /usr/local/lib/php.ini

そして以下の部分を編集します
/usr/local/lib/php.ini
#register_globals = Off
register_globals = On
ここを直さないとデータベースにアクセスできません。
なぜかデフォルトは「off」なんて不親切ですね!
私も修正したのを忘れていました。ご指摘ありがとうございました>山上氏

次にApacheのconfファイルを編集します。
/usr/local/apache/conf/httpd.conf
LoadFile /usr/local/lib/mysql/libmysqlclient.so
LoadModule php5_module libexec/libphp5.so
AddModule mod_php5.c
AddType application/x-httpd-php .php
# デフォルトページに追加する場合
DirectoryIndex index.html index.php

あとはApacheを再起動すればOKです。
動作確認する為に以下の内容のファイルを作りアクセスして見てPHPの設定などちゃんと出れば動いています。
info.php
<?php phpinfo(); ?>

6.mod_perlのインストール

http://www.freebsd.org/cgi/pds.cgi?ports/www/mod_perl
上記の何処かのサイトから最新版をダウンロードし解凍、コンパイル、インストールする
$ tar xvzf mod_perl-1.29.tar.gz
$ cd mod_perl-1.29
$ perl Makefile.PL USE_APXS=1 WITH_APXS=/usr/local/apache/bin/apxs EVERYTHING=1
$ make
$ su
# make install

Apacheのconfファイルを設定する
/usr/local/apache/conf/httpd.conf
LoadModule perl_module libexec/libperl.so
AddModule mod_perl.c
Options FollowSymLinks ExecCGI
AddHandler cgi-script .cgi

あとはApacheを立ち上げ直せば動くと思います。

7.帯域制限をもうける(mod_bandwidth)

http://www.apache.org/dist/httpd/contrib/modules/1.3/
ここにある「apache-contrib-1.0.8.tar.gz」をダウンロードし、引き続き解凍します。
$ cd /usr/local/src
$ tar xvzf apache-contrib-1.0.8.tar.gz
$ su
# make all install /usr/local/apache/bin/apxs
これでインストール出来ます。

引き続きApacheを設定します
/usr/local/apache/conf/httpd.conf
LoadModule bandwidth_module libexec/mod_bandwidth.so
AddModule mod_bandwidth.c
<IfModule mod_bandwidth.c>
BandWidthModule On
BandWidth jp 16834
BandWidth all 8192
LargeFileLimit 500 8192
</IfModule>
上記の例は「jp」ドメインが128kbps、それ以外を64kbpsにしてみました。
数字はバイト/秒です。
また、LargeFileLimitは大きなファイルの場合の制限です。
この場合は500kB以上のファイルは64kbpsにした例です。

8.openSSLを入れた場合のパスワード入力しないで自動起動させる

openSSLを入れてしまうとApacheを起動する度にパスを聞いて来るので
Webminmからなどは起動できなくなってしまいます。
そこで、このパスを自動で入力して打ち込まないでも起動できるようにしてしまいましょう!
まずはApacheのconfファイルを編集します
/usr/local/apache/conf/httpd.conf
# ↓の行をコメントアウトして
#SSLPassPhraseDialog builtin
# ↓を追加します
SSLPassPhraseDialog exec:/usr/local/etc/private/pp-filter

次にこのpp-filterというファイルを作ります。
# cd /usr/local/etc
# mkdir private
# cd private
# ee pp-filter
そしてpp-filterの中身は
#!/bin/sh
echo ************
この**********はパスワードをそのままいれます。
パーミッションは700にでもしておいてください。
# chmod 700 pp-filter

そして、立ち上げ時に自動起動、シャットダウン時に自動終了するには以下のファイルを作成します。
#!/bin/sh
apache=/usr/local/apache/bin/apachectl

case "$1" in

start)
        $apache startssl
        ;;

stop)
        $apache stop
        ;;

*)
        echo "$0 start | stop"
        ;;
esac

Webminで起動、停止のコマンドの場合は
起動=/usr/local/etc/rc.d/apache.sh start
停止=/usr/local/etc/rc.d/apache.sh stop
をカスタムコマンドに追加すればボタン一発で起動停止ができるようになります。