CEHTTPはWindowsCE(ver2.11以上)で動作するWEBサーバーです。ネットワークを通して広くHTMLなどの文章を公開できます。
Perlなどの一般的なCGIは、まだ動作しません。その代わりC++で拡張できる手段を用意しています。
基本認証をサポートしています。クライアントに対してユーザー名とパスワードを要求することが可能です。
小さく、早い を重視しています。
CEHTTPはWindowsCEで動作するように作成された専用Webサーバーです。全てC++で記述されています。マルチスレッドで動作し、常にストレステストを行いながら実装をしています。若干、実装の美しさよりも効率を重視しています。
その代わり、あまり大きなデータを取り扱うのは苦手かもしれません。
ApacheやIISはサーバースペックのPCで効率よく動作するように設計されています。WindowsCEには若干重たい気がしています。
またウィルスに感染しにくい特徴があります。世に出回っている多くのサーバーウィルスは、攻撃対象をIntelのPentiumと想定しています。NIMDAのようなウィルスにはまず感染しないでしょうし、またウィルス製作者もCEHTTPは相手にしていないでしょう。
何につかっても問題ありませんが、
私はADSL等の常時接続環境で、古いWindowsCE機が復活し、お役に立てればよいと考えています。また、ちょっとイベント会場などでHTMLを配信したいときに利用するのも良いと思います。
WindowsCE機ですから気軽に持ち運べて、しかもすぐにリセットができます。
http://www001.upp.so-net.ne.jp/ishi/
から最新版のCEHTTPをパソコン上にダウンロードしてください。
ダウンロードしたファイルを解凍ツール(たとえばlhaca等)で解凍します。
自分の持っているWindowsCE機のCPUにあわせて、ファイルをWindowsCE機にコピーします。
ARM用 cehttp2.ARM.CAB
SH3用 cehttp2.SH3.CAB
SH4用 cehttp2.SH4.CAB
MIPS用 cehttp2.MIPS.CAB
自分のWindowsCE機がどのCPUかは、コントロールパネルで「システムのプロパティ」を開き、「デバイス」タグを見れば判別できます。インターネット上で検索してもOKです。
WindowsCE機にコピーできたら、CE機上でCABファイルを実行してください。自動的にインストーラーが起動し、CEHTTPがインストールされます。
インストールされるファイルとディレクトリは下記のようになります。
「\program files\cehttp\cehttp2.exe」
インストールが完了したら、まずは実行してみましょう。
ここで最低限行っておかなくてはならないことは「WindowsCE機をネットワークに接続しておく」事です。Webサーバーですからネットワークに接続されていることが必須条件です。
もし、初めてCEHTTPを実行したのならば、上記のようなダイアログが現れます。これはCEHTTPが「ドキュメントルートがないので、作成しても良いか?」と聞いています。
ここでは「はい」をクリックします。
そうすると自動的に「\wwwroot」フォルダと、その中に「index.html」ファイルが自動的に生成されます。
上記のような画面になります。(HPC/Pro/2000の場合)
IP Address は現在CEHTTPが認識しているIPアドレスです。
もしネットワークに接続されていない場合、ここには「127.0.0.1」と出ているかもしれません。このような場合は他のPCからはCEHTTPにアクセスできません。まずWindowsCE機をネットワークに接続して、CEHTTPを再度起動してください。
アイコンをタップすると、CEHTTPの画面が非表示になります。再度アイコンをタップすると、CEHTTPが表示されます。
Status は、現在のCEHTTPの状況が表示されています。
「Listen...」と表示されていると、CEHTTPはうまく動作しています。
「Listen
failed.」と表示されている場合は、なんらかの理由で起動が失敗している状態です。CEHTTPを二つ立ち上げたりすると、CEHTTPの中でポート番号を取り合って、失敗しています。
ここで他のPCからアクセスしてみましょう。上記の例だとIPアドレスが「192.168.2.31」となっていますから、
http://192.168.2.31/
とブラウザのアドレスに打ち込めば良いことになります。
「Can you see me?」とブラウザに表示されたらOKです。インストールは完了です。
必要であれば、ログファイルを取る拡張DLLなどを同様な方法で追加インストールします。
メインダイアログの「Setting...」をクリックすることによって、設定ダイアログが現れます。
ドキュメントは、Webアクセスの際にルートとなる場所のことです。デフォルトでは「\wwwroot」となっています。
もし、「\wwwroot\index.html」というファイルがあれば、「http://<IPアドレス>/index.html」というURLでアクセスできることになります。
「\wwwroot\cehttp\index.html」というファイルは「http://<IPアドレス>/cehttp/index.html」というURLでアクセスできます。
サーバー拡張を動作させるための特別なフォルダを指定します。デフォルトでは「\wwwroot\scripts」となっています。
拡張ルートは、必ず「ドキュメントルート」の下に設定されていなければなりません。
このディレクトリは拡張子が「.CHX」と「.DLL」のファイルにアクセスしたときだけ、CEHTTPがリクエストを処理する特別なフォルダです。普通のHTMLファイル等はここから読み出せません。
1.CHXとDLLファイルがダウンロードされることを防ぎます。
2.CHXとDLLファイルが実行することを許可します。
Webサーバーが聞き取り(listen)を行うポート番号を指定します。通常Webサーバーは80番で聞き取りを行います。
たとえばポート番号8081番で聞き取りを行った場合、ブラウザは下記のようにしてアクセスできるようになります。
http://<IPアドレス>:8081/index.html
Webサーバー数(同時アクセス)を設定します。初期値は8スレッドです。
数が大きくなると、同時アクセス数が増えて、高負荷時の応答性がよくなりますが、メモリをその分消費します。
Webサーバーにアクセスをする際に、クライアントにユーザー名とパスワードを要求することができます。これを認証といいます。
CEHTTPでは「基本認証(Basic authoraization)」をサポートしています。
基本認証が掛かったページをブラウザから参照しようとすると
上記のようなダイアログが出てきます。
ユーザーはブラウザからユーザー名とパスワードを入力し、Webサーバー側で認証されると、はじめてページを参照することができるようになります。
BBSの管理用ページなどは基本認証でアクセス制限する必要があるでしょう。また、ログファイルに認証したユーザーが残ります。誰がアクセスしたのか厳密に管理したい場合などに使ってください。
認証ファイルはデフォルトでは「access.cha」というファイル名になります。
下記の書式でテキスト形式で記述します。
<username>:<password>
たとえば、ユーザー名「taro」、パスワードが「yamada」を設定したい場合、
taro:yamada
という風に記述します。ユーザー名とパスワードは連続して何人でも記述できます。
taro:yamada<改行>
ichiro:suzuki<改行>
…
SJIS形式で保存してください。WindowsCE上のWordなどはデフォルトではunicodeで保存しますので、PC上で作成し、後ほどWindowsCE機に転送すると良いでしょう。
基本認証ファイルを配置する場所は、認証を掛けたいフォルダです。
基本認証を配置した場合、そのフォルダ配下全てのフォルダに認証の効力は及びます。複数の認証ファイルがある場合、もっとも近い場所にある認証ファイルを利用します。
例;
[\wwwroot]
+access.cha -A
|
+[\Japan]
||
|+access.cha -B
|+[\Tokyo]
上記のような配置であったとします。認証ファイルは
\wwwroot\access.cha(A)
\wwwroot\japan\access.cha(B)
があります。
このとき、URL
「http://<サーバー>/」 はaccess.cha(A)に影響されます。
「http://<サーバー>/Japan/」 はaccess.cha(B)に影響されます。
「http://<サーバー>/Japan/Tokyo/」 はaccess.cha(B)に影響されます。
access.cha(A)だけ配置すると、全てのアクセスがaccess.chaによる認証となります。
CEHTTPはいくつかの設定値をレジストリで操作することができます。レジストリツールについては、フリーソフトが沢山ありますので、それらを利用してください。これらの値は、それほど変更する理由はありません。
レジストリ保管場所は[HKEY_LOCAL_MACHINE\SOFTWARE\ISHISOFT\CEHTTP]です。
キー名 | 型 | デフォルト値 | 解説 |
---|---|---|---|
Port | DWORD | 80 | Listenするポート番号 |
Timeout | DWORD | 3000 | タイムアウト値
現在は利用されていません。 タイムアウト値参考: |
KeepAlive | DWORD | 1 | キープアライブ
キープアライブとは、一度接続した場合、連続してリクエスト処理を行う処理のことを言います。HTTP/1.0以前の実装では、一回のリクエストを行うたびに、一回のソケット接続を行っていました。しかしながら昨今のHTMLはGIFなどの画像が多く利用されており、一枚のページを表示するのにも、3〜10回ほどサーバーにリクエストが発生します。ソケット接続はコストのかかる処理であり、この負荷を軽減するためにHTTP/1.1では、キープアライブの実装が求められています。 |
StartServers | DWORD | 8 | サーバー数
CEHTTPはマルチスレッドで動作します。 |
DocRoot | STRING | \wwwroot | ドキュメントルートディレクトリ
設定ダイアログで設定できます。 |
CgiRoot | STRING | \wwwroot\scripts | .dll.chxが動作可能なディレクトリ
必ずドキュメントルート配下になるようにしてください。 |
DefaultDoc | STRING | index.html | デフォルトドキュメント
ファイル名を指定されなかった場合に利用されるファイル名です。 |
BasicAuthFile | STRING | access.cha | 基本認証ファイル名です。
「access.cha」というファイルは、通常CEHTTPは特別なファイル名として扱い、アクセスできません。 |
LogFile | STRING | \access_log.txt | ログファイル名
アクセスログを取得している場合、ログの保管場所となります。 たとえばシグマリオンIIが内蔵している「カスタム メモリ」にログファイルを保存したい場合は |
LogSize | DWORD | 102400 | ログファイルサイズ
ログファイルが無限に増えていくのは困りますので、このサイズで制限を掛けます。 ファイルサイズが102400(=100KB)を超えると、バックアップを取ってログファイルを新たに作成します。 つまりログファイルは、バックアップをあわせて最大(LogSize)*2 となります。 |
DNSLookup | DWORD | 0 | DNSルックアップ
アクセスを受けたときにDNSlookupを行う場合は0以外を指定します。 |
MIMEタイプとは、ファイルの拡張子とファイルの中身を結びつける拡張子です。たとえば、index.htmlの拡張子「.html」は、HTMLであるという意味を持ちます。
たとえば、あるファイルが下記のように記述されているとします。
「<html><body><b>こんにちは</b></body></html>」
このファイル名が「test.html」だと、ブラウザは
こんにちは
と表示しますが、「test.txt」だと
<html><body><b>こんにちは</b></body></html>
と表示します。
前者は「Content-type: text/html」、後者は「Content-type: text/plan」とサーバーが指定してブラウザに送信します。これを受けてブラウザ側で、テキストとして表示を行います。
拡張子が「.html」なのだから「HTML文章でいいのでは?」と思ってしまいますが、以外とコンテンツタイプは重要です。
ブラウザが「http://hogehoge/cgi.pl」というファイルをリクエストしたとします。このとき拡張子は「.pl」が提供するファイルは一体「Content-type: txt/html」なのでしょうか。それとも「Content-type: image/gif」なのでしょうか。
当然Perlですから、どちらのデータを返す可能性があります。
PerlでCGIを記述したことがある人は、先頭行に「Content-type: txt/html」を記述したことがあると思います。ブラウザは拡張子だけでは、送信されてきたデータが何者であるのかを決定できません。そのためWebサーバーはブラウザに「Content-type:」 を送信するのです。
MIMEタイプに登録しておけば、拡張子にあわせて適切な「Content-type: 」を送信してくれます。PerlなどのCGIはそれを自分で記述するのです。
CEHTTPでは、あらかじめいくつかのMIMEタイプが設定されています。
.html text/html
.htm text/html
.gif image/gif
.png image/png
.jpg image/jpeg
.jpeg image/jpeg
.txt text/plain
.css text/css
.bmp image/bitmap
.tif image/tiff
.tiff image/tiff
.mpg video/mpeg
.mpeg video/mpeg
.pdf application/pdf
.ls application/x-javascript
.js application/x-javascript
.mp3 audio/mp3
.m3u audio/x-mpegurl
.wav audio/x-wav
.mid audio/mid
.midi audio/mid
.swf application/x-shockwave-flash
上記MIMEタイプの他に追加したいMIMEタイプがある場合、MIMEタイプを追加します。
MIMEタイプ追加ファイルは「AddType.txt」というファイル名になります。
下記の書式で、テキスト形式で記述します。
<拡張子>:<対応するコンテンツタイプ>
たとえば、拡張子「.hdml」、コンテンツタイプ「text/x-hdml;charset=Shift_JIS」を設定したい場合、
.hdml text/x-hdml;charset=Shift_JIS
と記述します。この記述をしないと、WebサーバーはMIMEタイプを決定できず、単なるバイナリとして送信します。
CEHTTPでは認識できないMIMEタイプを全て「Content-type:
application/octet-stream」としてブラウザに送信します。
MIMEタイプはいくつでも記述することができます。auのEZWebに対応するコンテンツを記述する場合は、
.hdml text/x-hdml;charset=Shift_JIS<改行>
.wml text/vnd.wap.wml;charset=Shift_JIS<改行>
と記述します。
MIMEタイプファイルを配置する場所は、CEHTTPがインストールされた場所です。
CEHTTPは起動時に「AddType.txt」というファイルを探して読み込みを行います。
CEHTTPは拡張DLLによってログを取ることができるようになります。これによって、アクセスがあったのかを記録に残す事ができます。
cehttplog.dll をCEHTTPがインストールされたディレクトリと同じ場所に配置することによって自動的にログファイルが取得されます。
各種設定は 「レジストリで設定できる値」を参照してください。
Apache標準形式を参考にしています。
192.168.2.31 - user [11/Feb/2003:14:58:25 ] "GET / HTTP/1.1" 304 - "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
上記のようなログが取れます。詳細は下記のようになります。
192.168.2.31 | IPアドレス |
- | ident - 未使用 |
user | 基本認証で認証したユーザー名 |
[11/Feb/2003:14:58:25 +900] | アクセス日時 |
"GET / HTTP/1.1" | リクエストの内容 |
304 | リクエストの結果 |
- | 送信したバイト数 |
"Mozilla/4.0" | クライアントが利用したブラウザ名 |
デフォルトでは「\access_log.txt」になります。この値はレジストリ操作によって変更できます。
ログファイルはある一定の大きさになると、自動的に一部バックアップを作成し、新たにファイルを作成します。
バックアップファイル名は末尾がアンダースコアに置き換えられたものです。
「access_log.txt」->「access_log.tx_」
ログファイルを取るのはコストが掛かります。高負荷時にはパフォーマンスの足かせとなります。もし、ログファイルが必要ないのならば、「cehttplog.dll」の名前を「_cehttplog.dll」のように変更しておくか、削除するとログは取得されません。
CEHTTPはDLLにより拡張が可能となっています。
拡張ファイルにはCHX形式、DLL形式、MOD形式のものがあります。
拡張ファイルについては、各拡張ファイル同梱のヘルプ等を参照ください。
また作成方法は「CEHTTP テクニカル マニュアル」を参照してください。
拡張子「.chx」/「.dll」のファイルは、CGIディレクトリ配下で動作します。
ブラウザより呼び出されたときに、CEHTTPがダイナミックにロードし、実行します。
拡張子「.mod」のファイルは、CEHTTPがインストールされた場所に配置してください。
CEHTTPは起動時にmodファイルを検索します。たとえば「ns.mod」というMOD拡張ファイルがあれば、MIMEタイプリストに動的に「.ns」を追加します。「.ns」拡張子を持つファイルがリクエストされた場合、登録されたMOD拡張ファイルが呼び出され処理されます。
不完全な拡張ファイルはCEHTTPを不安定にします。
HTTPレスポンスにあわせた独自のエラーページを送信する事ができます。
たとえば、存在しないページをリクエストされた時に、あらかじめ作成しおいたHTMLファイルを送信したり、拡張ファイルを呼び出したりする事が可能です。
「404 Page not found.」を表示する際に、トップページへのリンクを表示するなどに利用すると良いでしょう。
「ErrorDocument.txt」というファイルを作成し、CEHTTPがインストールされた場所に配置してください。
下記の書式で、テキスト形式で記述します。
<エラー番号><空白><エラーページ>
たとえば404エラーが発生した時に /error/404.html を表示したい場合は次のようにします。
404 /error/404.html