ApacheのインストールとARAGOでCGIを使う


Internet入門 1で書いたのですが、Windows NTで動くHTTPサーバーには色々あります。
現在一番世界のWebで使われているのはApacheのようです、現在50%くらいのシェアーだそうです。
もちろん色々なOSに移植されOSにはあまり依存しません。 そしてFree wareです。

Apacheの情報を探すためにNews Groupを見ていたときにIISとApacheの比較で、こう言っている人がいました。
IISはパパママWebむけ、簡単だが何かしようとすると難しかい。 Apacheは色々な事が出来るが、非常に面倒である。

実際IISは非常にMSの商品に組み込まれているため、すぐVBスクリプトとかASPとかISAPIとかになるのですが、どのようにそれが動いているのかを理解している人は少ないとお思われます。 ある程度見通しのきいいていないWebを管理するのはセキュリティー上少々恐いものがあります。 IISを非難する人はPingをかけつづけるプログラムでIISを落とせると言う記事があた事を言いますが、 ちょっとIISの問題以前のような気がします。 またUNIXファンの評論家の方がよく言うようにソースコードがあるから安心だてきな話もききます、しかし実際趣味でやられている方がおいそれと変更できるとも思えませんし、そんなに簡単な問題でしたら、FIXされているでしょうし、だいたいdebugをどうするのでしょうか? セキュリティは確保できるのだろうか?

ARAGO for InternetでCGIを使いたい方はそれなりの難しいことをするときはそれなりの考えていると思います。 間違えてもApacheを変更しようなどとの記事を本気にしないで下さい。 趣味の方が太平洋のど真ん中で水泳やるのは自由ですが、むちゃは健康に毒です。

さてApacheにするといくつかの利点があります。

本当に分からなくなったときソースコードを読めば良いい
RFC1865のファイルのアップロードを簡単に出来る。 IISはASPで書かれたMSのAccepterがいる(HTMLも特殊なものになる)。
ログファイルがよく出来ている、色々なものをとる事が出来る。 error、accessログがNT版では標準です。

環境変数がIISで取れない環境変数を取得できる、CGIの中で使える、例えばREMOTE_HOSTはPOSTで送られてきたでたにemailアドレスうを加えてもらい、このREMOTE_HOSTのドメイン名を比較することが出来ます、IISではISAPIフィルターを使うことになるでしょう。 他にもHTTP_REFERERなどがあります。

セキュリティがNTの中にどぶんとつかっていないので、管理が楽です。

欠点として、あまりにも機能が豊富で、自由な組み合わせでHTTPサーバーを構成できる。書籍での内容が古かったり、NT版と違っていたり、それにやはりUNIX語ですから、ちんぷんかんぷんになることがあります。 News Groupでは色々な情報があり回答している人もかなり出来る人のようです。 ただし英語です。

さてどこから手に入れるか? http://www.apache.org/にすべてがあります。 日本にもミラーがありますが、別にどこでもその時一番速く動くサーバーでどうぞ。 どちらにしても小さいです。FTPサイトによってはセキュリティのレベルによってはアクセスできないところがあります、そんな時はまた別のサイトをどうぞ。



FTPサイトは次のようなディレクトリーです。はの次の中の落とすファイルは

Parent Directory 11-Feb-1998 08:27 0k
CHANGES 20-Nov-1997 08:44 125k List of changes in 1.3
CHANGES_1.2 06-Jan-1998 14:39 85k List of changes in 1.2
KEYS 20-Nov-1997 08:43 12k Developer PGP keys
apache_1.2.5.tar.Z 05-Jan-1998 15:26 1.0M 1.2.5 compressed source
apache_1.2.5.tar.Z.asc 05-Jan-1998 15:39 1k PGP signature
apache_1.2.5.tar.gz 05-Jan-1998 15:26 692k 1.2.5 gzipped source
apache_1.2.5.tar.gz.asc 05-Jan-1998 15:39 1k PGP signature
apache_1.3b3.tar.gz 20-Nov-1997 08:53 922k 1.3b3 gzipped source ***
apache_1.3b3.tar.gz.asc 20-Nov-1997 08:53 1k PGP signature
apache_1.3b3_win32.exe 20-Nov-1997 14:07 815k 1.3b3 NT binary *
apache_1.3b3_win32_ex. .01-Dec-1997 09:38 435k 1.3b3 NT docs & icons **
binaries/ 07-Jan-1998 06:15 0k Binary distributions
contrib/ 08-Apr-1997 04:40 0k Contributed software
old/ 06-Jan-1998 14:36 0k Old source & binaries
patches/ 30-Dec-1997 22:35 0k Official patches

*がコンパイルされたApacheです、
**がドキュメントです、apacheのWebのコピーだと思えば良いでしょう。
***がソースコードです。

必ずいるのが*、**です。
***のソースですが、最初はmakeファイルがどうもうまく動きませんでした。 1.1のregexからmakファイルを1.3の同じディレクトリーに持ってくる。 http_main.cのSERVER_BUILTの行をコメントアウトする。 それでVCC++の中でコンパイルする。いま必要なServer-infoを見る為のmoduleは完成していない。 そのためApachecoreなどがコンパイルできない。

このバイナリーはあくまでもベータです。 Apacheの方針は、一切メールをよこすな、自分で考えるか、お金を払って誰かに頼めとあります。ちなみにApache WeekというNews Letterがあります。 誰でもMailを出せば来るのでしょう。 Apacheを始めて3日か四日目ではさっぱりわかりません。

セットアップについて

対象とするWindowsは95と NT 4.0です。 多分NT 3.51でも動くでしょう。 95でWebを立ちあげるのは水鉄砲で消防団を作るような気がします。 Winsockで(TCP/IPのAPI)メモリーリークするといわれていますので、いろいろの起こるであろう苦労は先に避けましょう。 人件費とOS代金を比較しましょう。

サーバーマシンは何が?はInternet 入門 1に書いてあります。

早いのが一番ですが、不安定なのは最悪です。 セットアップ時の試行錯誤で何度もやり直すときの時間は馬鹿になりません。

要るもの、DNSはBindで立ちあげておく必要があります。

最初にセットアップするのはApacheの本体であるapache_1.3b3_win32.exeです。 単にダブルクリックしてください。 セットアップに入ります。 注意することはInstall ShieldのVC++についてくるおまけ版はセットアップファイルの作成がおかしく、セットアップインフォをテキストエディターで直せば良いのですが、それをしていない。

そのためいつものごとくProgram Filesにインストールしようとします。ここでルートのApacheにしてください。

たとえばC:\Apacheです。 ちなみにUNIXでは\ではなく/を遣うみたいです。 コンフィグレーションファイルではC¥Apacheになっています。 違うディレクトリーなどと余計なことは理解するまで止めましょう。

次はすべてのドキュメントファイルです。

apache_1.3b3_win32_ex.をダブルクリックするとPKZIPがないマシンでは何もしない。 急いでWinzipをダウンロードしてください。

勝手にC:\Apacheにインストールします。これで始まりです。

ソースがという方はやはりお多福ソースが一番です。 Apacheのソースはご自分でお考え下さい。

設定ファイルを設定する

Apacheの設定ファイルは.CNFです。 三つあります。何で三つかは歴史だそうです。一つにするとうまくいかなかった。 どうせめったに見なくなるファイルですから三つをひとつにしたところで意味はあまりないと思います。

今のところREGEDIT32は必要がないようです。

httpd.conf-dist-winをファイル名をhttpd.cnfにします。 Apacheの基本環境

(色はこの後の指定がどのファイルかを示す。)

access.conf-dist-winをファイル名をaccess.cnfにします。アクセスの制御

srm.conf-dist-winをファイル名をsrm.cnfにします。リソースの指定

横に書いてある説明は基本的にはということだけです。

最初にHTTPD.cnfを設定します。

必要な部分しか書きません、もしこれでわからないとすると、多分ApacheよりもIISのほうが良いのではないでしょうか?

自分の管理者のメールアドレスを入れます。 使っていないアドレスは日本の大学だけで結構です。

##ServerAdmin you@your.address
ServerAdmin admin@soupacific.com このアドレスはQDNです。正式なDomain名です。

###ServerRoot "@@ServerRoot@@"
ServerRoot "C:/APACHE"

余計なことはしません。ここがすべての基本となるディレクトリです。

ErrorLog logs/error.log でエラーログを書く先を指定します。 結局C:\Apache\logsということになります。

Apacheより上のディレクトリを指定するとApacheの忠治親分ジェロニモが起こるのか駄目です。

TransferLog logs/access.log 同じ

###ServerName new.host.name
ServerName www.soupacific.com 入れなくてもBindが設定されていれば良いと思うが老婆心。

これで動くはずです?。 があとも見てみましょう。

srm.cnf

###DocumentRoot "@@ServerRoot@@/htdocs"
DocumentRoot "C:/Apache/wwwspcroot"

ここでどこにWebのHTMLファイルが置かれるかを指定します。 Virtualディレクトリです。

www.soupacific.comとしたときにオープンされるところです。

###DirectoryIndex index.html
DirectoryIndex default.htm

###Be aware extention If not it shows your directory

最初にオープンされるホームページのファイル名です。 なんでの良いんじゃないかな?ただそれがあること。

FancyIndexing off

offしておきます、しなくても良いですが。

#ReadmeName README
#HeaderName HEADER

#IndexIgnore .??* *~ *# HEADER* README* RCS

コメントアウト

AddLanguage jp .jp

こんなことしてなんかになるのかな? 単なる冗談!

access.cnfを

CGIの実行するために

ここから大事なCGIの部分です、まずどこにCGIの実行プログラムがあるかを指定します。ここで注意することはApacheからの相対ではwwwのルートと同じレベルです。決してwwwの下には置かないで下さい。

<Directory "C:/Apache/wwwspcroot"> このディレクトリーで(当然その下のでも)の制限。

###ScriptAlias /cgi-bin/ /apache/cgi-bin/
ScriptAlias /cgi-bin/ /apache/cgi-bin/

/cgi-binと指定するバーチャルディレクトリーは/apache/cgi-binと指定してます。

# To use CGI scripts:
###AddHandler cgi-script .cgi
AddHandler cgi-script .prg

ここではcgiで実行されるscriptが拡張子が.prgのときはcgiの実行scriptであると指定します。

さてここで基本的なApacheのディレクトリごとのアクセス管理を説明します。

Options ExecCGI これを指定しないとcgiを実行できない。 ExecCGImoduleをロードする。

###Options Indexes FollowSymLinks コメントアウト、Intranetでは便利かもしれません。

AllowOverride None他のディレクトリをアクセスさせるか?
order allow,deny
allow from all

</Directory>

orderは allowが先でdenyが 後と指定し

allow from soupacific.comとかipとかを入れる。 復数列挙できる。

passwordファイルの指定をここでやる。


ではCGIは

# /apache/cgi-bin should be changed to whatever your ScriptAliased
# CGI directory exists, if you have that configured.

<Directory /apache/cgi-bin>
AllowOverride None
###Options None
ここをコメント
Options ExecCGI cgiを使えるようにする
<Limit post> 制限始まり
Order Deny,Allow

Allow from ALL これでどこからでもアクセスできる。
</Limit> 制限してい終わり
</Directory>

<Directory /apache/cgi-bin>
AllowOverride ALL
これで良いのかな?
Script PUT /cgi-bin/bswrite.prg
</Directory>

多分上の指定とダブるかな?

ここではApacheのmoduleのCGIを実行するmoduleを指定するときにIndexesやFollowSymlinksをさせないこと

###Options Indexes FollowSymLinks
Options ExecCGI

CGIを実行でPOSTの制限

<Directory /apache/cgi-bin>
AllowOverride None
###Options None
コメントアウト
Options ExecCGI
<Limit post>
Order Deny,Allow
Deny from ALL
Allow from ALL
</Limit>
</Directory>

CGIを実行でPUTの制限

<Directory /apache/cgi-bin>
AllowOverride ALL
Script PUT /cgi-bin/bswrite.prg
PUTが来たときに必ず実行されるScriptを指定
</Directory>

あと役立つがCPUの負担とセキュリティに??server-status?

# Allow server status reports, with the URL of http://servername/server-status
# Change the ".your_domain.com" to match your domain to enable.

##このmoduleは自動的にはリンクされない。ここでダイナミックリンクを指定。

<Location /server-status> こんなディレクトリはないですよね。。。。。
SetHandler server-status
<Limit GET>
order deny,allow
allow from all
誰でも見える? 危ないのかな? 見えそうで見えないから覗くのですよ
</Limit>
</Location>

さてこれは次の指定によってダイナミックリンクされます。

LoadModule status_module modules/ApacheModuleStatus.dll httpd.cnfの中です



###このmoduleが入っている.dllはバイナリにはない。 いつか使える? ないときはコメントアウトのこと。

これに関係するのがどこかにあるsethandler それを指定する。

<Location /info> こんなディレクトリはないですよね。。。。。
<Limit GET>
order deny, allow
allow from .soupacific.com .soupacific.co.jp
allow from all
deny from all
</Limit>
SetHandler server-info
</Location>

これには

##LoadModule info_module modules/ApacheModuleinfo.dll

を指定します。


このserver-statusとかinfoはHTTPDの設定や実行内容をリモートに監視できるためのものです。

www.soupacific.com/server-infoと指定するとサーバーstatusを表示する

www.soupacific.com/infoで設定環境とロードされているmoduleが表示される。

info?server でサーバーの設定

info?module_name でmoduleの設定

info?listでインクルードされているmodule名

などの情報を表示します。

指定したページがないときにどうするか? ここで変わったページも面白いかもしれません?

# 2) local redirects
#ErrorDocument 404 /missing.html
# to redirect to local url /missing.html

ApacheのCGIで使える環境変数

HTTP_REFERER:http://www.soupacific.com/cgihtm/environm.htm

どこのdomainのどのページから来たかを見る

REMOTE_HOST:puma.soupacific.com

ここはREMOTE ホスト名が返るはずですが、IISは返さない。

とてつもなく簡単に書いてありますがあとのAuthentificationなどはApacheのmanualを御覧ください。

注意

設定を間違えるとApacheは起動しようとしますがこのため起動まで時間がかかります。あたかもクラッシュしたかのように見えます。 じっくり待ちましょう!

さて起動です。

コマンドプロンプトで

Apache -i

でプロンプトに戻ります。

あとはコントロールパネルのサービスの中のApacheを起動とするだけです。

cnfファイルを変更したときはこのサービスでON OFFしないでrebootしたほうが良いのではないでしょうか?

うまく起動しないとき余計な設定や間違えは?

ログファイルを読もう

要らない設定はすべてはずす

だめなら最初に戻る、もう一度インストール!

backupをcnf

ディレクトリの考え方

images

cnfは一つに出来るがうまくいかな方

indexはどうなるか

frontpageの問題

?の対策

NTでのディレクトリの設定は読取専用にしてください。シェアーしないにしてください。

CGIでのエラー

Apacheはさすがにプロ向けに出来ています、そのためシンタックスはかなりきつくちょっとしたエラーでも受け付けません。 http error 500が帰ってきたときはないようを見ましょう。 またログファイルが参考になります。

Premature end of script header

Malformed header format script bad header

OUTPUT('Content type: text/html',2)

: が抜けたり、\Nが2つない

間違えているところありましたらご連絡ください。