12.WWWサ−バとその暗号化 12-1. CERN httpd サ−バ '96 当時 (1) CERN httpd を使う * 概要 WWWサ−バは少し前まで、CERN httpd と NCSA httpd ぐらいしかなかった。 両者共フ リ−ソフトで現在でも多くのサイトで使われている。 Netscape Commerce Server 等の市 販サ−バに較べれば、暗号化機能がないなどキュリティ面が弱いが、機密情報を扱うので なければ今日でも十分通用する。CERN と NCSA を較べると CERN の方が Proxy 機能があ るなど機能が豊富である。この Proxy 機能により、 ファイアウォ−ルを設けた内部ネッ トからも外部のWWWにアクセスができるのである。ここでは CERN httpd について説明 していく。ただし今後、WWWサ−バは Netscape が主流になっていくと思われる。手元 に Netscape Communication Server があるが、 設定は全てGUIで行う。やたら聞いて くることが多く何をやっているのか分からなくなる。WWWサ−バの基本として CERN を 知っておくことは悪いことではない。追記:この時点96年では Apache はまだ無かった。 -------------------------------------------------------------------------------- CERN httpd の起動は常時稼働と要求のあった時に起動する inetd デ−モンを使うやり方 がある。httpd はそんなに負荷が軽いものでもないし、たまに必要になるというものでも ない。httpd デ−モンは常時稼働にすべきである。 -------------------------------------------------------------------------------- * 起動方法 [ CERN httpd の入手と内容 ] 雑誌「Internet Magazine」などのおまけCD−ROMから、 ソ−スファイルとドキュメ ントを入手する。展開してコンパイルして config ファイルなどを設定する。 % ls /usr/local/source/cern/ WWW/ httpd_docs/ guideps specps spectxt << guideps, specps は PostScript ファイル。 guide.ps, sepc.ps に変更すること。 /usr/local/source/cern/ --- [A] [A]---[WWW]---[server_root]---[config]--- httpd.conf, | | |-[icons] all.conf,caching.conf, | | prot.conf,proxy.conf | | | | -[Daemon]---[sgi]--- cgiparse, cgiutils, htadm, htimage, httpd_3.0 | | | |-[Implementation]--- Source Code | |-[icons]-- server root からコピ−。自分で作る。 | |-[html]--- HTML ファイルを置いておく場所。自分で作る。 | |-[log] 必要ならこれらも作る。 |-[cgi-bin] [ コンフィギュレ−ション・ファイルの準備 ] A/../config/httpd.conf を /etc/httpd.conf にコピ−して、とりあえず以下のように記 述する。httpd は起動する時、 デフォルトで /etc/httpd.conf を見るようになっている。 GroupId は nogroup が指定されている。もしサ−バホストの /etc/group に nogroup が なければ新たに登録するか、とりあえず適当に user ぐらい GroupId に指定しておく。 /etc/httpd.conf ------------------------------------------------------- |ServerRoot /usr/local/source/cern |Port 80 |UserId nobody |GroupId nogroup | |# AccessLog /usr/local/source/cern/log/httpd-log 使わないのはコメントに |# ErrorLog /usr/local/source/cern/log/httpd-errors するか消す。 | |LogFormat Common |LogTime LocalTime |Exec /cgi-bin/* /usr/local/source/cern/cgi-bin/* |Pass /* /usr/local/source/cern/html/* [ 起動 ] **** ル−トの権限で実行すること! **** % httpd & << デフォルトで /etc/httpd.conf を見る。 % httpd -r /usr/local/source/cern/config/httpd.conf & % httpd -p 8080 & << httpd.conf で Port 番号を 8080 に変えたような場合。 % httpd -v << -v はデバッグオプション。画面に状態が表示される。 ............ This is CERN-HTTPD, version 3.0, using libwww version 2.17 ServerRoot.. /usr/local/source/cern Port........ 80 Default..... user id nobody Default..... group id 0 AccessLog... /usr/local/source/cern/log/httpd-log ErrorLog.... /usr/local/source/cern/log/httpd-errors Exec........ "/cgi-bin/*" --> "/usr/local/source/cern/cgi-bin/*" Pass........ "/*" --> "/usr/local/source/cern/html/*" IdentCheck.. On << これらは httpd.conf で特に指定した場合にでる。 DNS-lookup.. On << Log......... "/usr/local/source/cern/log/httpd-log.Jun1396" opened Error log... "/usr/local/source/cern/log/httpd-errors.Jun1396" opened HostName.... Local host name is `hostA' HostName.... Full host name is `hostA.nix.co.jj' [ 確認 ] /usr/local/source/cern/html/ に何かファイルを用意して mosaic で確認してみる。 % mosaic http://localhost/ or % mosaic http://host_name/ httpd-pid ファイルには httpd デ−モンのプロセスIDが記述される。 デ−モンを殺し たい場合には、このファイルの番号で kill すればいい。 * インスト−ルの記録 「Internet Magazine」'96/06 月号のおまけCD−ROMを使って INDY にインスト−ル してみた。注意点は CERN httpd 本体と httpd のライブラリは、 別のファイルに入って いるということ。ライブラリはバ−ジョン 2.17 の wwwlib/217 の方を使うこと。30 は バ−ジョン 3.0 と思われるが、コンパイルに失敗する。 96年10月の時点で CERN の 最新バ−ジョンは 3.0A である。どうもこれで一応開発は終わりらしい。このバ−ジョン ではライブラリは別ではなくなっている。 % login: root % mount -t iso9660 /dev/scsi/sc0d4l0 /CDROM % umask 022 % cd /usr/local/source % mkdir cern % cd cern % cp /CDROM/unix/www/etc/wwwlib/217/wwwlib.taz . % cp /CDROM/unix/www/httpd/cern/httpd.taz . << 他もコピ−する % ls doc.taz guideps.z httpd.taz specps.z spectxt.z % zcat < httpd.taz | tar xvf - << このように展開する。 % zcat < wwwlib.taz | tar xvf - % uncompress spectxt << spectxt.Z に名前を変えてから。 % rm httpd.taz wwwlib.taz など << もういらないので消去する。 % ls WWW httpd_docs spectxt specps guideps % cd WWW;BUILD << 勝手に INDY と判断してコンパイルする。 WWW build for machine type: sgi ------ Building CERN LineMode Browser ------ | ディレクトリ "../../LineMode/sgi" を作成できません :そのようなファイル ... *** Error code 2 (bu21) こんなエラ−で終わるが httpd 自体はできているので関係ない。 % BUILD daemon とやれば httpd だけ作るのでエラ−は出ない。 /cern/WWW/Daemon/Implementation/ のソ−スコ−ドからコンパ イルされ Daemon 下に sgi というディレクトリができて、実行 モジュ−ルができる。 % cd /usr/local/source/cern/WWW/Daemon/sgi;ls HTAAFile.o HTCacheInfo.o HTPasswd.o HTUserInit.o cgiutils.o HTAAProt.o HTConfig.o HTRFC931.o HTWild.o htadm HTAAServ.o HTDaemonDIR.o HTRequest.o HTgc.o htimage HTACL.o HTGroup.o HTRetrieve.o HTims.o httpd HTAdm.o HTLex.o HTSInit.o Makefile httpd_3.0 HTAuth.o HTLoad.o HTSUtils.o cgiparse HTCache.o HTLog.o HTScript.o cgiutils % rm *.o % ls Makefile cgiparse cgiutils htadm htimage httpd httpd_3.0 << httpd は httpd_3.0 へのリンクになっている。 % cp httpd_3.0 /usr/local/bin/httpd % cd /usr/local/source/cern % cp -r /usr/local/source/cern/WWW/server_root/icons . % ls httpd-pid icons << httpd-pid は httpd を起動するとできる。 WWW guideps httpd_docs specps spectxt % cp WWW/server_root/config/httpd.conf /etc/httpd.conf * ソ−スを修正する場合 % cd /usr/local/source/cern/WWW /Daemon/Implementation/ にあるソ−スを変更して % BUILD daemon % BUILD をやっても反応なし。コンパイルされない。 _________________________________________ WWW build for machine type: sgi BUILD complete! WWW build for sgi done. status = 0 % cd /usr/local/source/cern/WWW/Daemon/sgi % rm HTLog.o << /Daemon/Implementation/HTLog.c を修正する。とりあえず確認 のため、オブジェクトを消去して httpd が作り直されるか見る。 % make cc -c -I../../Library/Implementation -I../Implementation .. entation/HTLog.c cc -o httpd_3.0 HTDaemonDIR.o .. TRFC931.o ../../Library/sgi/libwww.a -lsun rm httpd if [ sgi != isc3.0 ]; then ln -s httpd_3.0 httpd; fi -------------------------------------------------------------------------------- 愛知万博の時、スイス館に CERN を開発したネクスト社のコンピュ−タが出展されていた。 以下 `2h/09/S 追記。"11-2.ファイアウォ−ルとソフト"から。CERN httpd Proxy はヨ− ロッパ素粒子物理研究所が作成した CERN httpd の Proxy機能部分。内部ネットワ−クに ある Mosaic からでも Proxy サ−バ経由で、インタ−ネットにアクセスできる。 Mosaic の WAIS,HTTP,Gopher,FTP などは全て HTTP に変換される。デ−タキャッシュもできる。 -------------------------------------------------------------------------------- * Solaris 2.5.1 に CERN httpd をインスト−ル [ ソ−スファイルを展開 ] # mkdir CERN # cp w3c-httpd-3.0A.tar CERN # cd CERN # tar xvf w3c-httpd-3.0A.tar # rm *.tar; ls -F All/ CERN Library/ README-SOCKS BUILD* COPYRIGH Makefile server_root/ BUILD.SH* Daemon/ README [ コンパイル準備をする ] # ls /usr/local/bin << すでに gcc などを入れてある。 bison gcc zcat make patch ar コマンドがいる /usr/ccs/bin << コンパイルにはこれらのコマンドがいる。 make コマンドがいる /usr/local/bin << make は GNU の方が何かといい。 gcc コマンドがいる /usr/local/bin # setenv PATH /usr/local/bin:/usr/ccs/bin:/usr/sbin:/usr/bin # echo $PATH /usr/local/bin:/usr/ccs/bin:/usr/sbin:/usr/bin << PATH の順番も注意すること。 展開したディレクトリで ./BUILD とやると All/sun4-sol2/Makefile.include を読んで コンパイルを始める。このファイルで定義されている CC は gcc であり、 純正Cコンパ イラ cc を指定してもダメである。コンパイルに失敗する。コンパイルの際に必要なライ ブラリは 3.0A では、同時に Library/sun4-sol2/libwww.a としてできて、勝手にリンク するようになっている。 ./BUILD が順調に終了したら、Daemon/sun4-sol2/httpd_3.0A と CERN httpd の実行モジ ュ−ルできるので、/usr/local/bin にコピ−すればよい。 ./BUILD コマンドではインス ト−ルまではやらない。稼働設定は server_root/ 以下にコンフィグレ−ション・ファイ ルやアイコンがある。サ−バディレクトリとする場所にコピ−して、種々設定すればOK である。 [ コンパイルしてリンク ] # ./BUILD WWW build for machine type: sun4-sol2 ------ Building W3C Reference Library ------ Object files of libwww will go to directory Library/sun4-sol2 - creating | gcc -c -o ../../Library/sun4-sol2/HTParse.o -Wall -DSOLARIS -g -D__svr4__ .. | gcc -c -o ../../Library/sun4-sol2/HTErrorMsg.o -Wall -DSOLARIS -g -D__svr4__ .. ar r ../../Library/sun4-sol2/libwww.a .. httpd, htadm, htimage, cgiparse and cgiutils built successfully BUILD complete! WWW build for sun4-sol2 done. status = 0 # # cd Daemon; ls CVS Implementation sun4-sol2 # cd sun4-sol2; ls HTAAFile.o HTConfig.o HTRFC931.o HTWild.o htimage HTAAProt.o HTDaemonDIR.o HTRequest.o HTgc.o httpd HTAAServ.o HTGroup.o HTRetrieve.o HTims.o httpd_3.0A HTACL.o HTLex.o HTSInit.o Makefile HTAuth.o HTLoad.o HTSUtils.o cgiparse HTCache.o HTLog.o HTScript.o cgiutils HTCacheInfo.o HTPasswd.o HTUserInit.o htadm # ls -al httpd* lrwxrwxrwx 1 root other 10 .. httpd -> httpd_3.0A -rwxr-xr-x 1 root other 2119196 .. httpd_3.0A * /etc/rc.local での CERN の起動 こんなのをメモしていたの追記 `2h/09/S。 root ユ−ザの権限で実行する場合 if [ -f /usr/local/httpd/proxy.conf ]; then /usr/local/httpd/httpd -r /usr/local/httpd/proxy.conf > & /dev/console fi www という一般ユ−ザの権限で実行 if [ -f /usr/local/httpd/proxy.conf ]; then echo '/usr/local/httpd/httpd -r /usr/local/httpd/proxy.conf' | su www fi * 参考 "[付録] b.「UNIX MAGAZINE」参考インデックス" から '94/07, P.67〜 "インタ−ネットの利用と仕組み, httpd のインスト−ル", 吉村伸 > NCSA httpd, Plexus, CERN httpd proxy, CERN httpd cache 機能 '95/02, P.58〜 "インタ−ネットの利用と仕組み, インタ−ネット接続最新事情(2)", 吉村伸 > Proxy サ−バ、CERN httpd, TIS firewall toolkit, オンデマンド・ダイアルアップ (2) CERN Proxy 機能のテスト * 機能の説明 Proxy 機能には、[1]デ−タキャッシュ、[2]ファイアウォ−ル、[3]マルチプロトコル が ある。下の図で hostG にWWW Proxy サ−バを稼働させ、hostA,B のWWWブラウザで Proxy を使う指定をすると、hostA,B から hostX へのアクセスは、全ては hostG を中継 していく。デ−タキャッシュ機能はこの時に、hostG を通ったデ−タをためる機能である。 同じデ−タのアクセスがあれば、このためたデ−タを hostA,B に返すわけである。hostX までアクセス時間が省けて効率的である。しかしキャッシュしておく期間が適当でないと、 いつまでも古いデ−タをユ−ザは見ることになる。 マルチプロトコルはファイアウォ−ル機能とも関係する。 hostA,B はWWWの Proxy サ −バを介して HTTP,FTP,WAIS プロトコルのサ−ビスが利用できる。 hostX <-> hostG 間 は、それぞれのプロトコルのパケットが流れるが、hostG <-> hostA,B,C の間は HTTP の パケットにそれぞれ変換されることになる。この機能を持つWWW Proxy サ−バは、 例 えば DeleGate がある。念を押しておくが、 hostA,B のWWWブラウザで ftp://xxx と やると hostA,B <-> hostG 間が HTTP 通信する。hostA でただの ftp コマンドで hostG のWWW Proxy にアクセスしようとしても、それは無理である。 % mosaic http://hostX/ HTTP, WWW サ−ビス % mosaic ftp://hostX/ hostX anonymous FTP % mosaic wais://hostX/ □ WAIS | Gopher インタ−ネットでの ftp 利用は、 通常 ftp ----------- サ−バはロッグイン anonymous の FTP サ− | ビスが対象である。 ■ hostG WWW Proxy 設定 | ( DeleGate ) WWWサ−バに telnet の Proxy機能はない。 -------------------- % mosaic telnet://hostX とアクセスできる | | が、これは単に % telnet hostX とやってい □ hostA □ hostB るのと同じことである。 * ファイアウォ−ル対応の Proxy IPパケットを通さないファイアウォ−ルを設置した内側から、インタ−ネットのWWW にアクセスしたい場合、一般的に以下のような構成をとる。ファイアウォ−ルのホストで Proxy サ−バを稼働させるのである。もしすでに CERN httpd を稼働させていれば、その まま Proxy にもすることができる。CERN httpd は本来WWWサ−ビスをするプログラム なので、最初 Proxy の働きを理解するのに少々とまどうかも知れない。 WWWサ−バの Proxy 機能というよりは、Mosaic や Netscape WWWブラウザの Proxy と言った方が分かり易いかもしれない。内部ネットのホストからはファイアウォ−ルによ りインタ−ネットに直接アクセスできない。そこでブラウザの HTTP(プロトコル) のパケ ットを、Proxy 設定の CERN httpd デ−モンが中継するのである。hostA で mosaic を起 動しているが、インタ−ネット側では hostG からのアクセスとなる。 ファイアウォ−ル対応の Proxy というのは、 Proxy 機能がパケットを中継するという性 質を利用しているだけのことである。原理的には sendmail デ−モンが電子メ−ルのパケ ットを中継するのと同じことである。このためテストにはわざわざゲ−トウェイ・ホスト を用意する必要は無く、同じセグメント上にあるホストを使えばいい。 hostB □ WWW << インタ−ネット上のどこかのWWWサ−バ。 | --------- : ここはインタ−ネットのつもり --------- | CERN httpd << IPパケット を通さないファイアウォ−ルを先ず設置 hostG □ Proxy 設定 する。/etc/resolv.conf も設定すること。このホスト | でIPアドレスからドメイン名を検索することになる。 -------------- 内部ネット | ユ−ザ □ hostA << HTTP アクセス % mosaic http://hostB/。 ‖ 等価テスト -------- -------- -------- | WWW | hostB |Proxy | hostG | hostA| % mosaic http://hostB/ | CERN | | CERN | | | -------- -------- -------- | | | ---------------------------------------------- * hostG の設定 httpd 実行モジュ−ル(/usr/local/bin/httpd) と httpd-pid、httpd.conf があればいい。 /etc/httpd.conf -------------------------------------------------------------------- |ServerRoot /usr/local/source/cern |Port 80 |UserId nobody |GroupId nogroup |# |# Proxy protections; if you want only certain domains to use |# your proxy, uncomment these lines and specify the Mask |# with hostname templates or IP number templates: |# |# Protection PROXY-PROT { |# ServerId YourProxyName |# Mask @(*.cern.ch, 128.141.*.*, *.ncsa.uiuc.edu) |# } |# Protect * PROXY-PROT |# |# Pass the URLs that this proxy is willing to forward. |# |Pass http:* |#Pass ftp:* << hostB では anonymous FTP や WAIS サ−ビスはしない。 |#Pass gopher:* |#Pass wais:* % httpd & << root で起動すること。 * hostA の設定 ユ−ザのホ−ムディレクトリの .Xdefaults にWWWの Proxy サ−バを指定する。 ~.Xdefaults ----------------------------------- |mosaic*defaultCharset: Japanese | | |mosaic*httpProxy: http://hostG:80/ << これを追加する。直ちに有効になる。 % mosaic http://hostB/ << hostG に一度接続してから hostB にアクセスにいく。 * テスト a. hostG の httpd デ−モンをとめると、アクセスできなくなる。 b. hostG の httpd デ−モンの通過パケットの制御。 /etc/httpd.conf ---------------- | | |#Pass http:* << これをコメントにすると HTTPのパケットが通らなくな る。即ち % mosaic http://hostB/ が効かなくなる。 (3) CERN アクセス制御 * 基本的なル−ル /usr/nix/www/docs/private/ディレクトリをプライベ−トなデ−タの置場所とし、アクセ ス制限をかけたい。192.9.200.6 のユ−ザはだれでもアクセスできる。それ以外のIPア ドレスからのアクセスは許さない。この条件の元に基本的なル−ルを説明する。 /etc/httpd.conf -------------------------------- 記述の順番を以下のように守ること!。 | | |Protection rule1 { | GETMask @(192.9.200.6) |} |Protect /private/* rule1 |Pass /* /usr/nix/www/docs/* |Pass http:* << HTTP プロトコルのみ通す。 ・GETMask @(192.9.200.6) の "@" マ−クはユ−ザがだれでもOKという意味。 ・GETMask は ただの Mask でもよい。 ・Protection でアクセスのル−ルを設定する。 ・Protect でル−ルを適用する Pass /* /usr/.. 以下のディレクトリを示す。 [/usr/nix/www]---[docs]---index.html |-[private] ・Pass http:* は追加条件である。必要が無ければ記述は不要。 ・192.9.200.6 以外のIPアドレスからアクセスした場合は、ブラウザにアクセスできま せんと表示される。 * アクセス可能ホストの範囲指定 nix.co.jj ドメインのホストと、192.9.200.* のホストならどれでもアクセス可能とする。 利用可能なサ−ビスは HTTP, FTP だけにする。下記で Mask @( 192.9.200.6,hostX ) と すれば、IPアドレス 192.9.200.6 のホストと、ホスト名 hostX のみに許すことになる。 /etc/httpd.conf ------------------------------------- |Protection rule1 { | Mask @(*.nix.co.jj, 192.9.200.*) |} |Protect http:* rule1 |Protect ftp:* rule1 |Pass http:* |Pass ftp:* * パスワ−ドの設定 IPアドレス 192.9.200.6 のホストで、ロッグインしたユ−ザが katou のみにアクセス を許す設定とする。パスワ−ドはUNIXのパスワ−ド・ファイルとは違う。 CERN 専用 の htadm というコマンドを使う。 パスワ−ドの他にグル−プというのも CERN にはある。 これもUNIXのそれとは違う。ここでは説明は省略する。 % htadm -create passwd << 空のファイル passwd を先ず作る。 % htadm -adduser passwd katou 333 << ユ−ザ名 nix、パスワ−ド 333。 WWW: Real name: katou ikken << これはリタ−ンで抜けててもよい。 [/usr/nix/www]---[docs]---index.html |-[adm]--- passwd /etc/httpd.conf --------------------------------- |ServerRoot /usr/nix/www/ << httpd-pid ファイルは /usr/nix/www/ この |Port 80 下にできる。 |UserId nobody |GroupId user | |Protection roule1 { | UserId nobody << 上の UserId と同じでよい。なくてもよい。 | GroupId user << 上の GroupId と同じでよい。なくてもよい。 | ServerId TAWASHI << 何でも構わない。 | AuthType Basic << Basic は取り決め。 | PasswdFile /usr/nix/www/adm/passwd | Mask katou( 192.9.200.6 ) |} | |Protect /private/* roule1 |Pass /* /usr/nix/www/docs/* ・このユ−ザがブラウザでWWWサ−バにアクセスすると、 Mask katou( 192.9.200.6 ) の設定で先ず第一段階をクリアする。次にブラウザにアカウント入力画面が出て、ユ− ザ名とパスワ−ドを入力する。/usr/nix/www/adm/passwd ファイルに登録されたアカウ ントと一致すると通過できる。 ・Mask katou, haruo と設定すると、ユ−ザ katou と haruo のみ、どのホストからでも アクセスできることになる。 (4) CERN ログその他機能 * DNS-lookup オプション httpd へのアクセス・ログを、ドメイン名を含むホスト名で記録するかどうかに関係する。 DNS-lookup On にすると、 アクセス元のIPアドレスを DNS の逆引き検索によりホスト 名に変換する。逆引きできなかったらアクセスを拒否するというものではない。ただIP アドレスで記録されるだけである。ちなみに DNS-lookup を指定しない場合、デフォルト では Off なのだが、この場合 httpd 側ホストの /etc/hosts に、アクセス元IPアドレ スとホスト名テ−ブルがあれば、ホスト名で記録されることになる。 DNS-lookup オプシ ョンと似たようなのに IdentCheck On がある。これは Ident プロトコルによる認証をす るかどうかというオプションである。これも通らなかったからといってアクセスを拒否す るというものではない。今のところ Off にしていて構わない。 hostB の /etc/httpd.conf -------------------------------------------------------- | | |AccessLog /usr/local/source/cern/log/httpd-log |ErrorLog /usr/local/source/cern/log/httpd-errors |DNS-lookup On % mosaic http://hostB.nix.co.jj/ → mosaic http://192.9.200.2/ ------- ------- httpd (WWW) /etc/httpd.conf |hostA| |hostB| named (DNS) --------------- ------- ------- resolv.conf |DNS-lookup On | .1 192.9.200.0 .2 | -------*-----------------------------*------ nix.co.jj ドメイン [ named.hosts, rev に 192.9.200.1 登録せず ] TCP......... Can't find internet node name for peer!! Reading..... socket 6 from host 192.9.200.1 /usr/local/source/cern/log/httpd-log.Jun2096 << httpd を起動した日付け ------------------------------------------------------------------------ |192.9.200.1 - - [20/Jun/1996:18:22:52 -0900] "GET / HTTP/1.0" 200 218 [ named.hosts, rev に登録した ] TCP......... Peer name is `hostA.nix.co.jj' Reading..... socket 6 from host 192.9.200.1 httpd-log.Jun2096 -------------------------------------------------------------------------- |hostA.nix.co.jj - - [20/Jun/1996:18:28:00 -0900] "GET / HTTP/1.0" 200 218 [ named.rev の登録やめる ] TCP......... Can't find internet node name for peer!! Reading..... socket 6 from host 192.9.200.1 httpd-log.Jun2096 ---------------------------------------------------------------------- |192.9.200.1 - - [20/Jun/1996:18:33:38 -0900] "GET / HTTP/1.0" 200 218 * WWWのアクセスログ httpd.conf に AccessLog を指定すると、httpd を起動した日付けが付いたファイルでロ グをず−と取ることができる。ログはできればIPアドレスでなく、どのドメインからア クセスが来たのか知りたい。それには DNS-lookup オプションを設定すればできるのだが、 クライアントを少し待たせることになってしまう。これがいやらしいと思うなら、ログを 取った後で、まとめてホスト名に変換してもよい。変換するにはちょっとしたプログラム、 gethostbyaddr() 関数を使ったプログラムが必要である。多分フリ−ソフトにこんなプロ グラムはあるのでないか。 次にログを解析して分かり易くする必要がある。wwwstat というWWWアクセスの統計レ ポ−ト作成ソフトがフリ−である。getstats というのも条件付きだが使える。 これらの 記事の参考を挙げておく。wwwstat は 5 Mbyte のログを 200 Kbyte にするということだ。 市販品には WebTrends がよく雑誌に載っている。 96年5月、Windows 用 3.6 万円 で 発売されている。ftp でログを取ってきて解析するようになっている。しかしアクセスロ グを実際にとるのかどうかは別問題である。ログはホ−ムペ−ジのちっちゃなアイコンの GIF ファイルまで、全て記録されてしまう。こんな中から有益な情報を抜き出すのは容易 なことではない。 http://www.ics.uci.edu/WebSoft/wwwstat >「日経バイト」'96/04, No.150, "WWWがOSになる日" ftp://ftp.eit.com/pub/web.software/getstats/ >「インタ−フェ−ス」'95/09,No.220, "マルチメディア時代のインタ−ネット技術" [ ログの切り出しの注意 ] ログはどんどん大きくなっていくので、WWWサ−バのディスクにず−と置いておく訳に はいかない。例えば管理者用のホストに転送するなりして、 そこで wwwstat をかけると かしなければならない。バリアネット上にサ−バを置いた場合、どうやって内部ネットの 管理者用ホストにログを持ってくるか。電子メ−ルのファイル指定による転送を cron で 自動実行するのがいいかも知れない。転送し終わったらログの消去も cron でやる。一連 のスクリプトにしておけばよい。電子メ−ルを使う方法は ftp 等を使うより安全である。 問題はログの切り出しである。例えば mv コマンドでファイル名を変更したりすると、そ こでログは取られなくなってしまう。新たなアクセスがあれば、ログ・ファイルがまたで きるという訳ではない。そこで mv でファイルを移動した後、 直ちに httpd デ−モンを 初期化したらどうか。やってみたところ、Mosaic で httpd にアクセスしている最中でも 特に問題は起きなかった。ErrorLog も同様な扱いでよい。 ただしこれが適切なやり方か どうかは分からない。もう少し検討の必要がある。 % mv httpd-log.Jun2096 temp_file % kill -HUP httpd-Process_ID * telnet の制御 httpd デ−モンを稼働していると、mosaic telnet://host_name で telnet をかけること できる。この telnet は /etc/inetd.conf の telnetd によるものである。 mosaic など から telnet の画面がでるようにしただけである。 /etc/inetd.conf ------------------------------------------------------------ |telnet stream tcp nowait root /etc/telnetd telnetd |login stream tcp nowait root /etc/rlogind rlogind * Redirect 機能 アクセスを他の httpd のペ−ジに振り向けるだけである。 一体何の役に立つのか疑問で ある。URL を直接書くのと何ら変わり無い。 DeleGate のマウント機能と同等なものを期 待したが違うようである。マウント機能はアクセスを振り向けるには違いないが、mosaic 等に表示される URL にはマウント先アドレスがでない。 これは外部サ−ビス用WWWと 社内サ−ビス用WWWがあり、社内用の一部を外に公開する場合に役に立つ。外部ユ−ザ は、社内のWWWにアクセスしている場合でも、外部用WWWをアクセスしているように 見えるからである。Redirect 機能の説明をしておく。 下の例で hostA, hostB でWWW サ−バを立ち上げる。hostB の httpd.conf と HTML ファイルの記述に注意されたい。 hostA の /etc/httpd.conf ----------------------------------- |ServerRoot /xxx/www |Port 80 | | |Pass /* /xxx/www/docs/* hostB の /etc/httpd.conf ----------------------------------- |ServerRoot /xxx/www |Port 80 | | |Redirect /ppp/* http://hostA/* |Pass /* /xxx/www/docs/* |#Redirect /ppp/* http://hostA/* ↑ ※Pass の後にもってくると認識しない。 hostB の /xxx/www/docs/index.html ----------------------------------- |Welcom home page | |ホーム・ページ

| |DIRECT ↑ ここのアクセスは、hostA:/xxx/www/docs/index.html になる。 追記:個人がプロバイダを変更したような場合、これまでのプロバイダのWWWサ−バで Redirect 指示を記述してもらえれば、新しいホ−ムペ−ジに飛ばすことができる。 ユ− ザ自身で同様なことをするには、しばらくは前のプロバイダとの契約を残しておき、前の ホ−ムペ−ジの最初のコンテンツ index.html で、META タグによる URL 転送の記述をす る。何秒後にどこそこに移動しますというのが、それである。`22/12、Redirection の有 効な使い方がやっと分かった。外向けWWWサ−バのキャッシュ・サ−バ、つまりリバ− ス・キャッシュを設置する場合に役立てることができる。 (5) CERN 日本語コ−ドなど注意 `21/08 * テスト環境 Internet Explorer telnet 192.9.200.1 Netscape Navigator Netscape Navigator -------- ------------ -------- |Apollo| |Windows 98| | INDY | CERN httpd 8060 -------- ------------ -------- | | 192.9.200.1 | # hostname # cat /etc/hosts --------------------------------------------- indy2 192.9.200.1 indy2 ・Windows パソコンはインタ−ネットにアクセスするため、TCP/IP のプロパティ に DNS サ−バのIPアドレスを記している。INDY でも /etc/resolv.confに同様設定している。 ・INDY で kkk.html ファイルと、EUC のファイル "かとう.txt" を作る。 ・Windows で Shift-JIS のファイル "やすこ.txt" を作り INDY に送る。MS-DOS の窓か ら ftp コマンドで > binary、> mput * で転送する。 indy2 % cd /usr/local/source/cern/temp ファイルが存在しているのに、何も表示 indy2 % ls されない。隠しファイルになる、危険!。 Apollo$ telnet 192.9.200.1 % cd /usr/local/source/cern/temp;ls Apollo から telnetで入ってリストした kkk.html 窺txt かとう.txt ところ、化けたのもあるが一応表示した。 ↑ やすこ.txt が化けている * INDY の CERN httpd の制御ファイルの設定 /etc/httpd.conf ------------------------------------------------------- |ServerRoot /usr/local/source/cern |Port 8060 |UserId nobody |GroupId user |HostName indy2 |AccessLog /usr/local/source/cern/log/httpd-log |ErrorLog /usr/local/source/cern/log/httpd-errors |LogFormar Common |LogTime LocalTime |IdentityCheck Off |DNSLookup Off |Pass /* /usr/local/source/cern/temp/* |Pass http:* |DirShowIcons Off # httpd -v ............ This is CERN-HTTPD, version 3.0, using libwww version 2.17 ServerRoot.. /usr/local/source/cern Port........ 8060 Default..... user id nobody Default..... group id user HostName.... is "indy2" | DirIcons.... Off | OutList: ./%82%E2%82%B7%82%B1.txt OutList: ./%A4%AB%A4%C8%A4%A6.txt OutList: ./kkk.html | Apollo$ telnet 192.9.200.1 8060 Trying 192.9.200.1... Connected to 192.9.200.1. Escape character is '^]'. GET / HTTP/1.0 << リタ−ン << リタ−ン HTTP/1.0 200 Document follows MIME-Version: 1.0 Server: CERN/3.0 Date: Thursday, 06-Sep-01 03:15:49 GMT Content-Type: text/html Content-Length: 402 Last-Modified: Thursday, 06-Sep-01 03:03:08 GMT Index of /

Index of /

    Name            Last modified     Size  Description
    
窺txt 05-Sep-01 17;12 1K かとう.txt 05-Sep-01 17:53 1K kkk.html 05-Sep-01 16:11 1K
3 files
Connection closed by foreign host. Apollo$ telnet 192.9.200.1 8060 GET /かとう.txt HTTP/1.0 HTTP/1.0 200 Document follows MIME-Version: 1.0 Server: CERN/3.0 Date: Thursday, 06-Sep-01 04:05:17 GMT Content-Type: text/plain Content-Length: 8 Last-Modified: Wednesday, 05-Sep-01 08:53:57 GMT かとう * ファイルの文字コ−ドによる注意 Windows NN/IE & INDY NN Windows でも INDY でも、どのブラウザでも同じ ---------------------------- 表示をした。 ",オ.ネ,ヲ.txt" は "かとう.txt" | http://192.9.201.1:8060/ である。"やすこ.txt" は Shift-JIS のため、悪 |--------------------------- さをしているようである。"やすこ.txt" をなく | Index of/ すと "かとう.txt" とちゃんとリスト表示した。 | Name Last modified Size | ----------------------------------- | やすこ.txt 05-Sep-01 17:16 1K << IEではクリックするとファイルのダウ | ,オ.ネ,ヲ.txt 05-Sep-01 17:53 1K << ンロ−ドの画面が出てしまう。日本語 | kkk.html 05-Sep-01 16:11 1K 語のファイル名は文字化けしてしまう。 ------------------------------------------------- かとう.txt | http://192.9.201.1:8060/%A4%AB%A4%C8%A4%A6.txt EUCファイル をクリック |------------------------------------------------ |かとう ファイル名は化けている。 ------------------------------------------------- やすこ.txt | http://192.9.201.1:8060/%82%E2%82%B7%82%B1.txt Shift-JISファイル をクリック |------------------------------------------------ |やすこ -------------------------------------- kkk.htmlを | http://192.9.201.1:8060/kkk.html ASCIIファイル クリック |------------------------------------- |kkk desu Windows NN Windows NN -------------------------------------- -------------------------------------- | http://192.9.201.1:8060/かとう.txt | http://192.9.201.1:8060/やすこ.txt |------------------------------------- |------------------------------------- | Error 404 |やすこ | Not found -- file dosen't exit .. | | INDY NN でやると表示する INDY NN でやると Not found になる ※Microsoft のWWWサ−バ IIS なら、 日本語のファイル名でも文字化けすることなく ファイルをダウンロ−ドできるらしい。UNIXでのWWWサ−バだと、2バイトのコ −ドは BASE64 でエンコ−ディングされてしまう。どちらが仕様として正しいのか。 * 制御ファイル DirShowIcons オプションの働き CERN httpd を動かしているマシンの Netscape Navigator では、 特に問題なくさっと表 示する。ディレクトリのリストのアイコンもちゃんと表示する。しかし他のコンピュ−タ である Windows からアクセスすると、表示まで1分ぐらい時間がかかり、 アイコンの絵 も壊れ表示しない。これはアイコンの絵のデ−タを、制御ファイルの HostName で設定し たホストに取りに行こうとするためである。本来 Hostname に記すのは FQDN で、DNS で 名前解決されることが期待されている。 それが、ここでは単に indy2 としているだけで ある。Windows パソコンに設定している DNS のIPアドレスから indy2 を検索しようと する。それが見つからないと www.indy2:8060.com を探したりする。その挙句、見つから ないとなると、やっと諦めてアイコンなしでリスト表示するのである。 Windows パソコンの IE や NN から、このような状況でさっと表示するにはどうしたらい いか。アイコンの有りかを制御ファイルにちゃんと記述するか、アイコンそのものを表示 しないようするかである。アイコンの表示制御は、/etc/httpd.conf の DirShowIcons が やっている。制御ファイルには記述されていないが、DirShowIcons On とデフォルトでは なっている。それを DirShowIcons Off とすればアイコンは表示されなくなる。これでさ っと表示するようになる。どうも、このことは Apache のWWWサ−バでも現象として起 こるようである。Cobalt Qube3 で、Apache の設定をしていた際にもはまったような。 Apollo$ telnet 192.9.200.1 8060 ファイル名の前にアイコンの絵を取ろうとしている。 | どこを押して indy2.cad なんてホスト名になるの? [TXT] kkk.html 05-Sep-01 16:11 1K | INDY の NN ではちゃんと表示した Windows の IE/NN ではアイコンが壊れた --------------------------- --------------------------- | http://192.9.201.1:8060/ | http://192.9.201.1:8060/ |-------------------------- |-------------------------- | | |________ | | □ kkk.html || [TXT]| kkk.html ↑ | ̄ ̄ ̄ ̄ アイコンの絵 |-------------------------------- |接続:ホストを探しています indy2 --------------------------------- * プロキシの動作を見ていた時か `2h/10/s 追記 indy2# /usr/local/bin/httpd -v ............ This is CERN-HTTPD, version 3.0, using libwww version 2.17 ServerRoot.. /usr/local/cern/ Port........ 80 Default..... user id nobody Default..... group id nogroup Pass........ "http:*" Pass........ "ftp:*" No error logging HostName.... Local host name is `indy2' HostName.... Full host name is `indy2' AutoRule.... Pass "/httpd-internal-icons/*" --> "/usr/local/cern/icons/*" Automatic... icon initialization at `/usr/local/cern/icons/*' AutoRule.... Pass "http://indy2/httpd-internal-icons/*" --> "/usr/local/cern/icons/*" Icon URL.... prefix is http://indy2/httpd-internal-icons/ Icons....... should be in /usr/local/cern/icons/* AddIcon..... BLANK => SRC="http://indy2/httpd-internal-icons/blank.xbm" ALT="" AddIcon..... DIRECTORY => SRC="http://indy2/httpd-internal-icons/directory.xbm" ALT="DIR" AddIcon..... PARENT => SRC="http://indy2/httpd-internal-icons/back.xbm" ALT="UP" AddIcon..... UNKNOWN => SRC="http://indy2/httpd-internal-icons/unknown.xbm" ALT="" AddIcon..... */* => SRC="http://indy2/httpd-internal-icons/unknown.xbm" ALT="" AddIcon..... binary => SRC="http://indy2/httpd-internal-icons/binary.xbm" ALT="BIN" AddIcon..... www/unknown => SRC="http://indy2/httpd-internal-icons/unknown.xbm" ALT="" AddIcon..... text/* => SRC="http://indy2/httpd-internal-icons/text.xbm" ALT="TXT" AddIcon..... image/* => SRC="http://indy2/httpd-internal-icons/image.xbm" ALT="IMG" AddIcon..... video/* => SRC="http://indy2/httpd-internal-icons/movie.xbm" ALT="MOV" AddIcon..... audio/* => SRC="http://indy2/httpd-internal-icons/sound.xbm" ALT="AU" AddIcon..... multipart/x-tar => SRC="http://indy2/httpd-internal-icons/tar.xbm" ALT="TAR" AddIcon..... multipart/x-gtar => SRC="http://indy2/httpd-internal-icons/tar.xbm" ALT="TAR" AddIcon..... x-compress => SRC="http://indy2/httpd-internal-icons/compressed.xbm" ALT="CMP" AddIcon..... x-gzip => SRC="http://indy2/httpd-internal-icons/compressed.xbm" ALT="GZP" AddIcon..... application/x-gopher-index => SRC="http://indy2/httpd-internal-icons/index.xbm" ALT="IDX" AddIcon..... application/x-gopher-cso => SRC="http://indy2/httpd-internal-icons/index2.xbm" ALT="CSO" AddIcon..... application/x-gopher-telnet => SRC="http://indy2/httpd-internal-icons/telnet.xbm" ALT="TEL" AddIcon..... application/x-gopher-duplicate => SRC="http://indy2/httpd-internal-icons/unknown.xbm" ALT="DUP" AddIcon..... application/x-gopher-tn3270 => SRC="http://indy2/httpd-internal-icons/unknown.xbm" ALT="TN" Default..... server type StandAlone (Port defined) ServerType.. standalone (turning on forking) Daemon...... Parsed address as port 80, inet 0.0.0.0 IP.......... Opened socket number 3 Daemon...... Master socket(), bind() and listen() all OK PidFile..... /usr/local/cern//httpd-pid ServerLoop.. Unix standalone Disabling... gc [caching not enabled either] #1 Gc.......... disabled altogether No timeout.. not doing select() Daemon...... accepting connection... Accepted.... new socket 4 StandAlone.. Doing fork() Child....... I'm alive Linger...... no longer set by default TCP......... Peer name is `indy1' Reading..... socket 4 from host 192.xxx.xxx.xxx User-Agent.. Mozilla/3.0SC-SGI (X11; I; IRIX 5.3 IP22) HTSimplify.. `http://www.henomohe.con/' into ............ `http://www.henomohe.con/' Pass........ rule matched "http://www.henomohe.con/" -> "http://www.henomohe.con/" Passing..... "http://www.henomohe.con/" AuthCheck... Translated path: "http://www.henomohe.con/" (method: GET) AccessOk.... No protect rule for proxy access Forwarding.. URL `http://www.henomohe.con/' AA.......... check returned 200 Translated.. "http://www.henomohe.con/" SysInfo..... nobody means user (nobody:*:60001:60001:...) HTHandle.... fork() succeeded Gc.......... disabled altogether No timeout.. not doing select() Daemon...... accepting connection... ERROR....... [09/Jul/1997:14:20:32 -0900] Group not found: nogroup ERROR....... [09/Jul/1997:14:20:32 -0900] Group not found: nogroup SysInfo..... nobody means group (nobody:*:60001:...) Doing... setgid(60001) and setuid(60001) No caching.. enabled Need to..... find content-length for http: FindAnchor.. 1001c628 with hash 51 and address `http://www.henomohe.con/' created HTAccess.... Loading document http://www.henomohe.con/ HTTP........ Looking for `http://www.henomohe.con/' Composing Authorization for www.henomohe.con:80/ HTAASetup_lookup: No template matched `' (so probably not protected) HTTP........ Not sending authorization (yet) HTDoConnect. Looking up `www.henomohe.con'