AN HTTPD を確実に動かす方法
2001.01.10 追記
2000.11.26 初版
- 前準備
- ブラウザにIEを使っているときは、ツール -> インターネットオプション の詳細設定タブの中の「HTTPエラーメッセージを簡易表示する」のチェックを外す。
- 以前にそのPCでAN HTTPDを実行したことがあり、レジストリの編集が苦もなくできるのであれば、以下のレジストリキー以下を削除しておいた方がいいでしょう。
HKEY_LOCAL_MACHINE\Software\AnHttpd
レジストリ編集に不安があるという方は何もせずにこの下の説明に進んでも構いません。
- AN HTTPDのインストール、動作確認
- AN HTTP Server Home Pageから最新版のAN HTTP Serverプログラム(httpd1xx.zip、httpd1xx.exe いずれでもよい)をダウンロードし、C:\Program Files\httpd に解凍する。
C:\Program Files\httpd 以外のフォルダに解凍後コピーする場合は、そのフォルダの下の全フォルダ/ファイルをコピーします。
- エクスプローラから C:\Program Files\httpd\httpd.exe を実行する。これによってタスクトレイに AN HTTPDのアイコンが現れ、サーバはブラウザからのアクセス待ち状態になる。
ここで、「Winsock error 10038: サーバソケットを使用できません。他の HTTPサーバが動いていないか確認してください。あるいはポート番号を変えて下さい。」というエラーが出る場合があるかもしれません。可能性として、IIS(Internet Information Service)など他のWWWサーバが動いているのかもしれません。そのときは、FAQ2 #1 を参考にエラーを解消してください。
- ブラウザのURL欄に http://127.0.0.1/readme.html と入力し、「AN HTTP Server 1.xx README」のページが表示されることを確認する。
もしここで、「HTTP 404」あるいは「Error 404」が出るようなら、以前にAN HTTPDを実行したことによって、レジストリのドキュメントルートが変更されてしまっていることが考えられます。タスクトレイのアイコンを右クリックし、オプション/一般を選び、一般タブの中のドキュメントルートを C:\Program Files\httpd に変更するとREADMEが表示されます。「C:\Program Files\httpd」の後に余分な空白を入れないよう注意してください。
この段階で「サーバが見つからないか、DNS エラーです」と出ることがあるようです。原因は Norton Internet Security(NIS)などのファイアウォールソフトが動いているからだと思います。このエラーはすぐに解消しておかないとこの下の処理を続けても全てエラーになります。
とりあえずはファイアウォールソフトを無効にして動作確認し、原因がファイアウォールソフトにあるのかどうかを調べます。原因がファイアウォールということが分かれば、無効のまま使い続けるのはセキュリティ上問題があるので、ファイアウォールを有効にしたままで AN HTTPDにアクセスできるように、ファイアウォールの設定を変更します。
設定方法はファイアウォールソフト毎に異なるのですが、ポート80番(HTTP)を開く、AN HTTPDが「遮断」になっていれば「許可」にする、セキュリティレベルを下げるなどの設定が必ずあるはずです(設定方法はファイアウォールソフトのマニュアルで調べるか、Googleで解説ページを見つけるなりしてください)。
(追記)
「ウイルスバスター2004 インターネットセキュリティ」と「Norton Internet Security 2004」の設定方法はこちらを参考に。
この段階ではルータの設定は関係ありません。また、WindowsXPのファイアウォールも無関係です。パーソナルファイアウォールが原因かどうか確信が持てないときは一旦アンインストールしてみるのが確実です。
- ドキュメントルートの設定、確認
- 次にドキュメントルート(作成したHTML文書を保存するフォルダ)を設定する。任意のドライブ&フォルダを指定できるが、ここでは、C:\www とし、Cドライブに C:\www を作成する。
- 一般タブのドキュメントルート欄の C:\Program Files\httpd を C:\www に変更する。
- C:\www の下に適当なindex.htmlファイルを作成して置く。そしてブラウザから http://127.0.0.1/ にアクセスするとその index.html が表示される。
- C:\www の下にフォルダ abc を作成しファイル xyz.html を置くと、http://127.0.0.1/abc/xyz.html でアクセスできる。
http://127.0.0.1/ にアクセスして「Error 403 このディレクトリのインデックスリストは見られません。」とエラーになるとき、もし index.html をメモ帳で作成したのであれば、C:\www\index.html があるかどうかを確認しましょう。ファイル名が index.html.txt になってしまっているかもしれません(念のため、エクスプローラのフォルダオプション -> 表示で「登録されている拡張子は表示しない」のチェックを外しておくのは常識)。
ここでドキュメントルートを変更したのでこの上で確認した http://127.0.0.1/readme.html にアクセスすると「Error 404」と表示されるようになります。もし後で README の中から ssisample.shtml や cgisample.html にアクセスしたいのであれば、エイリアスタブの一般パス欄に、
仮想パス: /anhttpd
ローカルパス: C:\Program Files\httpd
を追加しましょう。これで
http://127.0.0.1/anhttpd/readme.html
で README が表示され、ssisampleやcgisampleが
http://127.0.0.1/anhttpd/ssi/ssisample.shtml
http://127.0.0.1/anhttpd/cgi/cgisample.html
で実行できるようになります。
(注) 一部のパソコンで cgisample の中のテストを実行するとダウンロードになることがあります。その場合には、FAQ#14 に従ってレジストリを設定してください。ただ、cgisampleで行っているテストはバッチファイル(拡張子:bat)の CGIであり、これが動かなくても CGI配布サイトなどで入手した Perlの CGI は問題なく動きます。もしこのCGIのテストのダウンロードが直らなかったとしても全く気にすることはありません。実際、BATで書かれた実用的な CGIなどどこの配布サイトを探してもみつからないでしょう。cgisample/ssisampleが動かないことはきれいさっぱり忘れてください。
- ユーザホーム(/~user)の設定、確認
- 自分のユーザ名 user を決め、C:\www\user\public_html フォルダを作成する。
- 一般タブで以下のように設定する(/~user の後ろに余分な空白を入れないよう要注意)。
v /~user -> ドキュメントルート¥user\public_html
- C:\www\user\public_html の下に適当なindex.htmlファイルを置き、ブラウザから http://127.0.0.1/~user/ にアクセスするとその index.html が表示される。
http://127.0.0.1/~user/ のように自分の名前付のページにアクセスできるとなかなか気分がいいものです。ただHTTPサーバに複数のユーザがいる場合には誰のページかを明確に区別するために /~user は有効ですが、自宅サーバで自分しかユーザがいないのであれば /~user を使う意味はほとんどなく、この上で説明した abc のようにフォルダを作成(~user というフォルダを作成)することでも十分ですので、/~user にどうしてもアクセスできないという方は使うことをあっさり諦めるのが賢明と思います。/~user を多数使いたいときはエイリアスで設定します。
- Perlのインストール
- CGI(ここでは Perlスクリプトのこと)を実行するには Perl をインストールする必要がある。
まず、以下のサイトから ActivePerlを入手する。ダウンロードするのは拡張子が msi(MSI) の方である。zip(AS package) ファイルもあるがこれについては下記の注3 を参照。
(a) http://www.ActiveState.com/Products/Download/Download.plex?id=ActivePerl
2004.6現在、以下の二つのバージョンが配布されている。
・ActivePerl 5.6.1 build 638(ActivePerl-5.6.1.638-MSWin32-x86.msi)
(2004.4リリース。今後バージョンアップの可能性小?)
・ActivePerl 5.8.4 build 810(ActivePerl-5.8.4.810-MSWin32-x86.msi)
(2004.6リリース。今後バージョンアップの可能性あり)
どちらのバージョンを使っても構わないが、筆者の考えは下記の注5 を参考に。ActivePerl 5.6.1もサポート中なので、上記のページに表示されなくなるまでは 5.6.1 を使っても全く問題はないだろう。
5.6.1より古いバージョンの Perlが必要になることはまずないと思うが、参考までに配布サイトを以下に記す。
(b) http://downloads.activestate.com/ActivePerl/Windows/5.005/Intel/
・APi522e.exe(ActivePerl build 522(Perl 5.005)) (リストの一番下のもの)
(c) ftp://ftp.ActiveState.com/unsupported/Perl-Win32/Release/
・Pw32i316.exe (Perl for Win32) (似た名前のものがあるので注意)
(b),(c)は既にサポートが終了しているのでセキュリティ上の問題が見つかったとしても更新はされない。また (a)〜(c) 以外に JPerl というものがあるが、バージョンは古く((c)相当)、JPerlでなくても日本語処理は可能なので、Perlは初めてという人は絶対に手を出さないこと。
(注1)Windows95に(a)または(b)のActivePerlをインストールするためには、Microsoft社のDCOM for Windows95(dcom95.exe)を入手し、インストールしておく必要があります(Win98/Me/NT4/2000/XPでは不要)。
(注2)Win9x/Me/NT4で(a)をインストールするにはインストーラInstMsi.exeが必要です。System Requirements のページ(Windows Installer requirementsの項)から OSに応じた(Win9x/Me用InstMsiA.exe とWinNT4用InstMsiW.exe がある) Windows Installer をダウンロードする。Win2000/XPではインストーラのダウンロードは不要(ActivePerlのインストールが不要という意味ではないので間違いのないように)。
インストーラはバージョン1.1以降が必要であり、もし1.0なら「このインストレーションパッケージは Windows インストーラサービスでインストールできません。新しいバージョンの Windows インストーラを含む Windows サービスパックをインストールする必要があります」というメッセージが出ます。
(追記) build 631 以降?では Win9x/Me用 Windows Installer 2.0+ が必要になったようです。
(追記) Windows2000には1.1がバンドルされていますが、2.0にアップデート可能です。WindowsXPには最初から 2.0 がバンドルされています。(参考ページ)
(注3)(a)のMSI版をどうしてもうまくインストールできないという場合には、AS package の方をインストールする。こちらはインストーラは不要であり、ダウンロードしたファイルを C:\Perl に解凍後、そのフォルダ内の install.batを実行する。ただし、このインストールは 問題含み なので要注意である。
(注4)(a)のbuild 630 以降では、IE5.0以降がインストールされていないと、「There is a problem with this Windows Installer package. … 」というメッセージが出て、インストールに失敗する。
(追記) 最新のバージョンでは、IE5.5以上が必須のようです。
(注5)最新版の ActivePerl 5.8.x build 8xx を使うかどうかについては FAQ#17 を参考に。確実性からは当面使わないのが賢明というのが筆者の意見である。2004.2現在、5.8が出て1年が経過したが、筆者の意見は「まだ 5.6.1 の方がいい」です。理由は 5.8 用のプログラムがまだまだ揃っていないからです。ちなみに筆者が契約しているプロバイダ @Niftyのレンタルサーバの Perlのバージョンは 5.6よりさらに前の 5.005_02 である。何も @Niftyだけが例外なわけではなくて一般に「現在のバージョンで問題がなければ敢えてバージョンアップの必要はない」というのが真理だと思います。ご参考までに。
- ダウンロードした上記のバイナリを実行し、Perlをインストールする。途中の操作画面では一切設定変更はしないで単に Y/Yes/Next などで処理を進める。Perlは C:\Perl 以下にインストールされ、実行プログラムは C:\Perl\bin\perl.exe にできる。ただし Build 6xx/8xx のインストールで「License Agreement」には「I accept …」ボタンを選択する。また、デフォルトのインストール先が C:\Perl 以外になっているときは要変更。
(注) C ドライブの空き領域が少ないなどの事情があれば、D:\Perl など他のドライブにインストールしても問題はない。Build 6xx で約 35MB のディスクスペースを消費する。
- Perlインストール後、必ずWindowsを再起動する。
- Perlが正しくインストールされたかどうかは、MS-DOSプロンプト(コマンドプロンプト)から perl -v とコマンド入力し、Perlのバージョン情報が表示されることで確認できる。もしここで「コマンドまたはファイル名が違います」(Win9x)、「… は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識 …」(WinNT系)と出るときは、コマンドプロンプトから C:\Perl\bin\perl.exe -v と入力すればバージョン情報が表示されるはず。後者の場合にはオプション/一般の一般タブの中の.pl,.cgiの実行プログラムを以下のように変更する。
・拡張子、実行プログラム欄の.pl,.cgiを反転させて編集ボタンを押す。
・実行プログラムに C:\Perl\bin\perl.exe を入力し、OK。
- CGIの実行
- テキストエディタ(メモ帳など)で以下の4行から成る hello.cgi というファイルを作成し、C:\Program Files\httpd\cgi-bin の下に保存する(ここ から必ず右クリックで ファイルの保存 を実行し、ファイル名を hello.cgi.txt から hello.cgi に変更する方が簡単)。
#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
print "<HTML><BODY><H1>Hello!</H1></BODY></HTML>\n";
exit;
- ブラウザで http://127.0.0.1/cgi-bin/hello.cgi にアクセスして Hello! と大きく表示されると CGI の動作確認ができたことになる。
- もしうまく表示されないときは、オプション/一般の一般タブの中、「CGI出力を検査」にチェックし、エラーの原因を解消する。「CGI出力を検査」のチェックはCGIのエラー原因解明の手掛かりとなるメッセージを得ることができるので常にチェックしておくとよい。
ここでも上で述べたのと同じ二つの注意が必要です。
(a) hello.cgi のファイル名が hello.cgi.txt になっていないか。
(b)「HTTP 404」あるいは「Error 404」が出るようなら、以前AN HTTPDを実行したときの /cgi-bin が残っていることが考えられます。オプション/一般のエイリアスタブの中を以下のように変更します。
-------------------------------------------------
仮想パス ローカルパス
-------------------------------------------------
v /cgi-bin C:\Program Files\httpd\cgi-bin
v /scripts C:\Program Files\httpd\scripts
-------------------------------------------------
なお、CGI は /cgi-bin の下でなくても任意のディレクトリで実行が可能です。例えば、C:\www の下に hello.cgi を置けば、http://127.0.0.1/hello.cgi でテスト可能です。
(注) Win2000、WinNT4、WinMeで AN HTTPD 1.34〜1.35bのバージョンを使うとき、exe の CGI(例えば namazu.cgi.exe、blatj.exe など)を半角空白を含むパスに置いて実行すると「…は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません」というエラーになります。半角空白を含まないパスに置くか、1.36以降のバージョンを使ってください。Perlスクリプトは半角空白を含むパスにあっても問題ありません。
編集者:いと,mailto:gfh05223@nifty.com