WWWサーバの構築
Windows環境で動作するWWWサーバソフトを探してみると、いろいろありましたが、今回は、世界中で最も多く使用されており、プロバイダでも使用しているフリーソフトのApache Win32を使用させてもらいました。
(プロバイダが使用しているのは、当然UNIX版)
このソフトの難点としては、設定がGUI環境でできないことですが、先人が提供している情報を見て、何とかなるだろうとチャレンジ。 素人同然のおやじ(-_-;)にもできました。設定内容に不安はありますが一応動作しています。
■Apache Win32のインストール
Apache Win32を
こちらからダウンロードします。
- ダウンロードしたファイルをインストールする。(Windows95/98/NTでは、Windows
Installer 2.0が必要)
- 途中で、サーバ情報の設定があるので、以下のように設定する。(赤字はおやじの設定)
・ドメイン名 : www.aconus.com
・サーバ名 : www.aconus.com
・管理者のメールアドレス: oyaji@mail.aconus.com
- 上記と同時に、Apacheをサービスとして起動するか、手動起動するか選択します。(おやじは、サービス起動にした)
- インストール先の設定は、デフォルトのままではディレクトリ階層が深くなりすぎ使いずらいので、インストール先をドライブのルート(
C:\ )に変更するといいでしょう。
これで、インストールは終了です。おやじはサービス起動を選択したので、この状態で既にApacheは起動しています。手動起動を選択した場合は、スタートメニューから起動します。
■Apache Win32の設定
Apache Win32の設定は、GUIではなくテキストエディタで行います。この辺が素人同然のおやじとしては、やや敷居が高かったのですが。チャレンジ、チャレンジ
!!
設定情報は、Apacheディレクトリ中のconfディレクトリにあるhttpd.confにあり、おやじが使ったバージョンでは、スタートメニューのApacheのメニューからテキストエディタで開くことができました。
今回は、おやじだけでなく、あっこやリナもホームページを作りたいとのことなので、以下のようなディレクトリ構成で、プロバイダと同じように”http://www.aconus.com/~oyaji/といった形式でアクセスできるようにしてみました。ルートは将来使うこととして、空けてあります。
なお、ディクトリは、管理面とセキュリティ面から独立したドライブに作成しました。
web [ ルートディレクトリ ]
|
├ oyaji [ おやじのユーザディレクトリ ]
| |
| └ public_html [ ドキュメントルート ]
| |
| ├ index.htm [トップページ ]
| ├ bbs [ CGI設置用 ]
| └ count [ CGI設置用 ]
|
├ akirin [ あっこのユーザディレクトリ ]
| |
| └ public_html [ ドキュメントルート ]
| |
| ├ index.html [トップページ ]
| └ cgi [ CGI設置用 ]
|
└ rina [ リナのユーザディレクトリ ]
|
└ public_html [ ドキュメントルート ]
|
├ index.html [トップページ ]
└ keijiban [ CGI設置用 ]
|
設定を変更した項目は以下のとおりです。変更する場合は、失敗に備えて変更行を下の行にコピーし、元の行の先頭に「#」を付加することにより、コメント行として保存しながら作業しました。 (青字は削除、赤字は追加、緑字は変更したものです。)
- ドキュメントルートの変更
ドキュメントルートでは、http://www.aconus.com/やhttpd://192.168.1.100/のようにホスト名やサーバのIPアドレスでアクセスしたときにApacheがアクセスするディレクトリを指定する。デフォルトはC:/Apache/htdocsであり、最初にApacheにうまくアクセスできたときにご対面するApacheのテストページは、C:/Apache/htdocs配下にある、index.html.varファイルからジェネレートされたものである。おやじは、上記のようにEドライブ下にコンテンツ用ディレクトリを作成したので下記のように変更する。
DocumentRoot "C:/Apache/htdocs"
↓追加
#DocumentRoot "C:/Apache/htdocs"
DocumentRoot "E:/Web"
- ドキュメントルートの変更
上記のドキュメントルートの変更に伴い、Directoryディレクティブでドキュメントルートの振る舞いを指定しているので、これも合わせて変更する。
<Directory "C:/Apache/htdocs">
↓追加
#<Directory "C:/Apache/htdocs">
<Directory "E:/Web">
- CGI/SSIの実行権 (ドキュメントルートのDirectoryディレクティブ内)
Indexesがあると、ディレクトリ指定でアクセスされた場合(http://www.aconus.com/のように「/」で終わるか最後がディレクトリだった場合)に、Apacheはそのディレクトリ内に後述のDirectoryIndexディレクティブで指定したHTMLファイルが無いか左側から探し、対象ファイルが見つからないとインデックスリストが表示されてしまうので削除しました。
ExecCGI/Includesはこのディレクトリ配下でCGI/SSIの実行を許可する場合に指定する。cgii-binディレクトリでしか動作させない場合は、指定しないこと。(Optionsの意味はユーザディレクトリでも同様。詳しくは、こちらを参照のこと。)
Options Indexes FollowSymLinks MultiViews
↓削除、追加
Options FollowSymLinks MultiViews ExecCGI Includes
- ユーザディレクトリの変更
UserDirでは、http://www.aconus.com/~oyaji/といった形式でアクセスさせる場合のディレクトリを指定する。下記の
*はワイルドカードで、http://www.aconus.com/~oyaji/のように[~aaa]で指定したディレクトリ名と同等になり、[~oyaji]ならE:/web/oyaji/public_html配下のファイルが表示される。
UserDir "C:/Apache/users/"
↓追加
# UserDir "C:/Apache/users/"
UserDir "E:/Web/*/public_html/"
- ユーザディレクトリ配下でのCGI/SSIの実行権付与とインデックスリストの非表示
<Limit> ディレクティブは、アクセス制御の範囲を 指定された HTTP メソッドに限定するもので、それ以外のメソッドは、影響を受けない。つまり、下記では、GET
POST OPTIONS PROPFIND のメソッドに対してのみアクセスの制御を行ない(ここではアクセス許可)、
それ以外のメソッドについてはアクセス制御がかからない。
<LimitExcept> は、<Limit> セクションの反対の動作をし、 標準のメソッドと標準外や未認識のメソッドの場合の両方を設定できる。下記では、GET
POST OPTIONS PROPFIND のメソッド以外のアクセス制御が行われ、ここでの設定では不許可になる。<LimitExcept>は未設定のメソッド全てに制御がかかるので、こちらで設定したほうが確実である。
#<Directory "C:/Apache/users">
# AllowOverride FileInfo AuthConfig Limit
# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
# <Limit GET POST OPTIONS PROPFIND>
# Order allow,deny
# Allow from all
# </Limit>
# <LimitExcept GET POST OPTIONS PROPFIND>
# Order deny,allow
# Deny from all
# </LimitExcept>
#</Directory>
↓削除/追加
<Directory "E:/Web/*/public_html">
AllowOverride FileInfo AuthConfig Limit
Options MultiViews SymLinksIfOwnerMatch ExecCGI IncludesNoExec
# <Limit GET POST OPTIONS PROPFIND>
# Order allow,deny
# Allow from all
# </Limit>
<LimitExcept GET POST OPTIONS PROPFIND>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>
- HTMLファイル名の追加
ディレクトリ指定でアクセスされた場合(http://www.aconus.com/のように「/」で終わるか最後がディレクトリだった場合)に、Apacheはそのディレクトリ内にここで指定したファイルが無いか左側から探し、見つかればそのファイルを転送する。見つからない場合は、そのディレクトリでのOptions指定でIndexesが有効ならインデックリストを表示し、未指定なら404エラーとなる。おやじは、index.htmというファイル名をデフォルトとしているのでそれを追加している。下記の例ではSSI用のindex.shtmlも追加してある。
DirectoryIndex index.html
↓追加
DirectoryIndex index.html index.htm index.stml
- ホストネームでのログ収集
デフォルトではログのアドレスはIPアドレスで行われるが、この機能を使うとDNSで逆牽きしてホスト名で記録できる。DNSの逆牽きをすると負荷が重くなるが、アクセスがまだまだ少ないのとホストネームのほうが常連さんならすぐにわかること、動的IPの場合は後で逆引きしても牽けないことが多々あるため、あえて使用しています。ただ、逆牽き設定をしていないDNSや設定が誤っているDNSが多く、エラーログがかなり出てしまいます。(BINDの設定でログらないようにしています。)
#HostnameLookups Off
HostnameLookups On
- 家庭内からのアクセス、worm等のlog分離
#CustomLog logs/access.log common
SetEnvIf Remote_Addr 192.168.1. homelog nolog
SetEnvIf Request_URI "~akirin" akirinlog nolog
SetEnvIf Request_URI "default.ida" wormlog nolog
SetEnvIf Request_URI "root.exe" wormlog nolog
SetEnvIf Request_URI "cmd.exe" wormlog nolog
SetEnvIf Request_URI "Admin.dll" wormlog nolog
CustomLog logs/home.log common env=homelog
CustomLog logs/akirin.log combined env=akirinlog
CustomLog logs/worm.log common env=wormlog
CustomLog logs/access.log combined env=!nolog
・上のほうでLoadModule setenvif_module modules/mod_setenvif.soがアンコメントアウトされていることを確認。
・1行目のCustomLog logs/access.log common をコメントアウトし、以下を記述。
・2/8行目で、家庭内からのアクセスをhome.logに採取。ログ不要ならコメントアウト。
・3/9行目で、娘のサイトへのアクセスをakirin.logに採取。common -> combinedとしてreferrerを採取。
・4行目でCodeRed、5〜7行目でNimudaからアタックを識別し、10行目でworm.logに採取。ログ不要ならコメントアウト。
・11行目で残りのアクセスをaccess.logに採取。common -> combinedとしてreferrerを採取。おやじのサイトへのアクセスは、ここに含まれる。
- 日本語表示の設定(ブラウザのエンコード自動選択時の文字化け対策: 1個所)
下記の設定をした場合は、ドキュメントで必ずcharsetを指定しないと文字化けする。おやじのコンテンツには、EUC-JPとshift-jisの両方があるためこのようにして(AddDefaultCharset
Offとしても良い)、ドキュメントに依存して表示させている。そのため、一部のCGI等も改造しているので注意が必要である。shift-jisのコンテンツしかないなら、 AddDefaultCharset
shift_jis とすれば良い。
LanguagePriority は、MultiViews 環境でブラウザが言語の優先順位を提供してない場合の優先度を指定するもので、通常はコンテンツも対応していないので変更不要。
LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ltz ca es sv tw
↓移動
LanguagePriority ja en da nl et fr de el it kr no pl pt pt-br ltz ca es sv tw
AddDefaultCharset ISO-8859-1
↓追加(コメントアウト)
#AddDefaultCharset ISO-8859-1
- CGIファイル拡張子の定義
CGI として動作させたい拡張子を記述する。
#AddHandler cgi-script .cgi
↓削除、追加
AddHandler cgi-script .cgi
AddHandler cgi-script .pl
- SSIの設定
#AddType text/html .shtml
#AddHandler server-parsed .shtml
↓削除
AddType text/html .shtml
AddHandler server-parsed .shtml
変更内容を反映させるため、Apacheを再起動しますが、このバージョンではスタートメニューから起動/停止/再起動が可能でした。(初めてなので、他のバージョンは判りません)
これで、WWWサーバが起動しました。簡単なHTMLファイルを作ってユーザドキュメエントディレクトリ配下に置いてテストしました。
おお!! 見えました。 感激(^o^)丿
・・・・・ と簡単そうに書いていますが、実はユーザディレクトリ配下でCGIが動かなかったり、HTMLファイルがないとファイルリストが表示されたり(試験中なのでないこともありました)とか、試行錯誤でした。
■Active Perlのインストール
さて、このままでは、CGIが動きません。CGIを動かすため、Perlをインストールします。
Active Perlを
こちらからダウンロードします。おやじがダウンロードしたのは、以下のファイルです。
・ ActivePerl-5.8.6.811-MSWin32-x86-122208.msi
- ダウンロードしたファイルをインストールする。(Windows95/98/NTでは、Windows
Installer 2.0が必要)
- 途中で、インストール先をC:\perlからC:\usr\localに変更してインストール。(おやじはこれで苦労した)
これは、一般に提供されているCGIスクリプトの多くが、下記のようにPerlへのパスを指定しているからです。
・ #!/usr/local/bin/perl
- 次の画面で PPM3 を有効にするか聞いてくるので、「Enable PPM3 to send profile
info to ASPN」にチェックを入れインストールを続行する。PPMを有効にしておくと後でいろいろなperlモジュールが必要になったとき簡単にインストールできる。
- インストールが完了したら、Windowsを再起動する。
ここで、Perlが正常にインストールできたか確認します。
- スタートメニューからMSDOSプロンプトを起動。
- c:\>perl -vと入力して、
C:\>perl -v
This is perl, v5.8.6 built for MSWin32-x86-multi-thread
(with 3 registered patches, see perl -V for more detail)
Copyright 1987-2004, Larry Wall
Binary build 811 provided by ActiveState Corp. http://www.ActiveState.com
ActiveState is a division of Sophos.
Built Dec 13 2004 09:52:01
Perl may be copied only under the terms of either the Artistic License
or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using `man perl' or `perldoc perl'. If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page. |
と表示されれば、成功。
これで、CGIも動かせます。 早速カウンタを動作させて見ましたが、うまく動作しているようです。
Top Pageへ