Apacheといえば世界で最も多くのWEBサーバーとして使われているプログラムだ。
現在、1.3系と2.0系とで大きく二つのバージョンが並在している。
2.0系が発表されたのは2001年4月で、それなりの時間が経っているが、
いまだに1000万を越えるWEBサイトは1.3系を利用していると言われる。
しかし、2002年の6月に正式リリースされてその数も徐々に増えてきているようだ。
ダウンしたら困るサーバーでもないので、1.3から2.0にバージョンアップ!
http://happysize.com/apache/
↑ここらあたりからソースファイルをダウンロードしよう。
http://japache.infoscience.co.jp/
↑ここら辺りも参考にするといいかも。日本語だけど、ちょっと更新が遅れるっぽい。
基本的に、
configure、make、make install
というのは共通。
注)PHPを組み込む予定ならばおまじないを
ただ、ここで気を付けなければならないのは
autoconf
libtool
のそれぞれが必要ということ。
ま、大抵のディストリビューションでは初期状態でインストール済みだろうけど。
しかし、ついでなんでこれらも最新版をインストールすることにした。
http://www.gnu.org/order/ftp.html
↑ここから最新版がそれぞれ手にはいる。
インストール自体はいたって簡単だが、古いバージョンがRPMなどで入ってる場合は
#rpm -e autoconf-2.43-5
#rpm -e libtool-1.3-3
などでアンインストールしておくこと。
尚、
#rpm -qa | grep autoconf
#rpm -qa | grep libtool
とすれば、インストールされているRPMパッケージが表示される。
autoconf も libtool も下記のようにすればコンパイルからインストールまで完了する。
$./configure
$make
#make install
さて、これで事前準備は完了。
ようやくApacheのコンパイルに取りかかる。
とはいえなんにも難しいことはない。
-------ソースファイルの解凍-------
$tar zxfv httpd-2.0.45.tar.gz
$cd httpd-2.0.45
-------コンパイル-------
$./configure
$make
#make install
たったこんだけで、ハイ終了!
もちろん新機能のマルチスレッドに対応させたりするには./configure時に
適当なパラメータを渡す必要がある。
興味のある人はWEBを漁ってみよう(人任せですなぁ・・・(^^;)
デフォルトでは /usr/local/apache2/ 以下に各種設定ファイルなどがインストールされる。
/usr/local/apache2/conf/ 配下にある httpd.conf を適宜変更し
/usr/local/apache2/bin/apachectl start
でWEBサーバーとして稼働!
と、本来ならこれで終了のはずだが、なぜか起動しない。
いろいろと原因を探ってみると、httpd.conf 内の group の設定に問題があるようだった。
通常Apacheはnobody権限で実行されることが望ましい。
userはデフォルトでnobodyになっているがgroupはなっていない。
ということで、groupもnobodyに変更してやる必要がある。
でないと /usr/local/apache2/logs/error.log に
Invalid argument: setgid: unable to set g roup id to Group 4294967295
こんなエラーを残して立ち上がってくれない。
さて、上記の手順で通常に立ち上がるようにはなったが、実はまだ問題があった。
HTMLファイルを作りWEBサーバー上に置き、そこにアクセスするが、どうも文字化けを起こす。
HTML内で文字コードを指定してやっても全くダメ。
やっぱりわからないのでWEBをいろいろみていると、
ISO-8859-1をデフォルトのキャラクタセットとして使うように指定されているようで、
httpd.conf 内の AddDefaultCharset ISO-8859-1 という項目を
AddDefaultCharset Shift_JIS, ISO-2022-JP
と変更するか、あるいは"#"を先頭に付け加えてコメントアウトしてしまう。
これで、文字化けの問題は解消されるはずだ。
DSOを有効にしてApacheのコンパイル時に以下のようにすると吉。
$./configure --enable-so
$make
#make install
Apache2.0.45ではCGIやSSIはデフォルトでは使用しない設定になっているようだ。
そこで、これらを使えるように設定しなおす。
httpd.conf ファイルの見直し
httpd.conf ScriptAlias /cgi-bin/ "/home/httpd/cgi-bin/"
AddHandler cgi-script .cgi
AddHandler cgi-script .pl
AddHandler server-parsed .shtml
<Directory />
Options ExecCGI Includes FollowSymLinks
AllowOverride None
</Directory>
赤文字が修正(or 確認)箇所だ。
CGI専用のディレクトリを/home/httpd/cgi-bin/としたとき、
これがドキュメントルートの外部にある場合は
一行目のようにしてエイリアスを設定できる。
通常、DocumentRoot で指定したディレクトリより上の階層にはアクセスできないが、
CGI専用ディレクトリをDocumentRoot以外の場所に設置した場合、
この様にエイリアスを作成することで、「http://www.hoge.com/cgi-bin/」といった感じで
アクセスできるようになる。
まぁ、DocumentRoot内にCGI用のディレクトリを作るのなら不要か。その後に続く3行。
特定の拡張子に対して、Apacheが実行する動作を指定している。
今回の場合、拡張子にcgi、plを持つものはcgiスクリプトとして実行させ、
shtmlを持つものはSSIとして実行させるよう指定している。
Apacheで使用できるHanndlerには下記のようなものがある。
AddHandlerの種類 send-as-is HTTPヘッダを持ったファイルを送信する cgi-script cgiスクリプトを実行する imap-file ファイルをイメージマップとして処理する server-info サーバーの設定情報を取得する serverparsed SSIとして実行する server-status サーバーのステータスを取得する
最後に、OptionsにてCGIとSSIの実行を許可している。
ちなみに、Optionsもいくつか記述できる内容がある。
これはディレクトリ毎に設定出来るので、CGI・SSIを実行させたいディレクトリに対して
その都度、記述していく必要がある。
尚、この例の場合、DocumentRootに対して実行を許可していることになるが、
サブディレクトリを含めてこの設定が有効になるため、
どのディレクトリ(URL)でもCGIとSSIの実行が可能になってしまう。
なるべくなら、実行できるディレクトリを絞り、
そこに対してのみ設定するのが好ましいのかもしれない。
Optionsの種類 All MultiViewsを除く全てを有効にする ExecCGI CGIの実行を許可する SymlinksIfOwnerMatch シンボリックリンクを許可するが、対象となるファイル・ディレクトリが、
同じユーザーIDでなければならないIncludes SSIの実行を許可する IncludesNOExec SSIは許可するが、execコマンドは含まない MultiViews MultiViewsを許可する FollowSymLinks シンボリックリンクの使用を許可する
後はApacheを再起動すればCGIとSSIが使えるはずだ。
まずはここ(http://www.openssl.org/)からソースの入手。
適当なフォルダに解凍して./config
make
make install
とすればインストールは完了だ。
また、Apache1.x.xではOpenSSLの他にmod_sslやApache_sslといったモジュールのインストールが必要だが、Apache2.x.xでは最初から組み込まれているのでインストールの必要はない。
ただ、Apacheのコンパイルはやり直す必要が出そうだ。
オプションは下記のようにした。./configure --enable-so --with-ssl=/usr/local/ssl --enable-ssl
Apacheの再インストールが終わったら、Apacheのインストールされているディレクトリに下記のようなディレクトリを新たに作る。
conf/ssl.key/
conf/ssl.crt/その後、conf/ssl.keyに移動し、
/usr/local/ssl/bin/openssl genrsa -des3 -out server.key 1024
として秘密鍵を作る。
秘密鍵作製の際、パスワードを入力する必要があるので、忘れないように。
さらに、./conf/ssl.crtに移動し、
/usr/local/ssl/bin/openssl req -new -x509 -days 365 -key ../ssl.key/server.key -out server.crt
と続ける。
入力項目は下記の通り。Country Name (2 letter code) [GB]:(サーバの所属する国)
State or Province Name (full name) [Berkshire]: (サーバの所属する都道府県)
Locality Name (eg, city) [Newbury]: (サーバの所属する区市町村)
Organization Name (eg, company) [My Company Ltd]: (サーバの所属する会社名)
Organizational Unit Name (eg, section) []:(サーバの所属する部署)
Common Name (eg, your name or your server's hostname) []:(サーバの名前)
Email Address []:(サーバ管理者のメールアドレス)
上記まででSSLを利用する環境は整った。
apachectl -k start -DSSL
でApacheを起動させる。すると秘密鍵のパスフレーズを求められるので入力。
正しければ、Apacheが起動し、
https://192.168.0.1
等で確認できる。ただ、Apacheを起動するたびに聞かれるので、下記のようにして回避させる。(しかし、セキュリティ面で見た場合、毎回再起動の際にはパスフレーズを入力するべきである)
conf/ssl.key/下で
openssl rsa -in sever.key -out server.key
とすると、次回Apacheの再起動時にパスフレーズの問い合わせはなくなる。