CGIスクリプト配布 - CGI WEB



Home back
Apache2.0





■インストール
 Apache2.0(apache_2.0.xx-win32-x86-no_ssl.msi)を入手して下さい。 このページではApache2.0.54を元に解説を行います。
 ダウンロードしたmsiファイルを実行するとインストーラが起動しますので指示に従いインストールを進めて下さい。 Setup Type画面ではTypical(標準)を選択します。 インストール先のディレクトリは自由に変更して下さい。 インストールを完了させるとWindowsXP/2000などではサービスとしてApacheが起動します。
 ブラウザを起動させアドレス欄にhttp://localhost/と打ち込みます。 「あなたの予想に反して〜」画面が表示される事を確認して下さい。



■ディレクトリ構成
 設定を行う前にサーバのディレクトリ構成を決めます。 ここでは以下の構成を元に設定を行います。 C:\Apache2フォルダにApacheをインストールしているものとします。

C:\Apache2-\www-+-\cgi-bin-----+-\admin
        |       |
        |       |
        |       +-\user
        |      
        +-\public-html-+-\admin
                |
                |
                +-\user

 C:\Apache2の下にwwwフォルダを作成します。 wwwフォルダの下にcgi-binフォルダとpublic-htmlフォルダを作成し、それぞれのフォルダの下にadminフォルダとuserフォルダを作成します。

 cgi-binフォルダ以下をCGI設置ディレクトリとします。 このフォルダ以下でのみCGIを動作可能に設定します。

 public-htmlフォルダ以下をhtml設置ディレクトリとします。 public-html内のadminフォルダをドキュメントルートとして管理者のサイトのhtmlファイルなどを入れるようにします。 htmlはSSIコマンドを含む場合がありますのでpublic-htmlフォルダ以下でSSIコマンドを動作可能に設定します。

 単純なディレクトリ構成ですが、このようにCGIを動作させるディレクトリとhtmlを設置するディレクトリを別の階層に構成する事はセキュリティー的に非常に重要な事です。

 それぞれのuserフォルダは友人や第三者にサーバスペースを貸す場合を想定したディレクトリを表しています。



■httpd.conf
 設定はApacheをインストールしたフォルダ内のconfフォルダにあるhttpd.confファイルをテキストエディタで編集して行います。 テキストエディタで設定変更を保存後Apacheを再起動させると変更が反映されます。

 変更前のファイルは同フォルダにあるhttpd.default.confです。 設定を元の状態に戻すには、このファイルをコピーしてファイル名をhttpd.confに変更後confフォルダに戻します。 Apacheを再起動させると変更が反映されます。

 #(シャープ記号)以降から改行まではコメントとして扱われます。 行の途中に付ける事も出来ます。 コメントはApacheから無視され処理系に影響を及ぼす事はありません。

 再起動はタスクトレイのApacheアイコンをクリックしApache2を選択しRestartをクリックします。



■設定1
 サーバ全体の基本的な設定を行います。 設定を変更する必要のない指示子については解説を行っていません。

□ServerRoot
 Section 1: Global Environmentと書かれた部分の少し下のほうにServerRoot指示子があります。 Apacheのインストールフォルダを指定しますが通常はインストール時に設定されていますので変更する必要はありません。 このフォルダ内にはApacheのシステムフォルダ(conf htdocs manualなど)が入っています。

 ApacheをC:\Apache2にインストールした場合はServerRoot "C:/Apache2"となっています。  Windowsではパスを\(円記号)で表しますがApacheでは/(スラッシュ)で指定します。 パスの最後に/を付けないようにして下さい。

□Timeout
 パケットを送受信する際に接続を継続する秒数を指定します。 デフォルトは300です。 接続しているネットワークが遅く接続が頻繁に中断する場合は値を増やす必要があります。

□ThreadsPerChild
 Windows固有の指定子で要求を処理する子スレッドの最大数を指定します。 デフォルトは250です。 同時に250ヒットの処理が可能という事になります。 サーバのアクセス状況に応じて値を設定すると良いでしょう。

□Listen
 使用するポートを指定します。 デフォルトは80です。 特定のポートを使用してWebサーバを公開する場合にのみ設定を変更します。

□ServerAdmin
 サーバ管理者のメールアドレスを指定します。 インストール時にAdministrator's Email Addressで指定したメールアドレスが自動的に設定されています。 Apacheがブラウザにエラー画面を出力した際のメッセージに連絡先として表示されます。 また、環境変数SERVER_ADMINに格納されます。

□ServerName
 サーバのホスト名を指定します。 インストール時にServer Nameで指定したホスト名が自動的に設定されています。

□DirectoryIndex
 ディレクトリがアクセスされた際にデフォルトで送信するファイルの名前を指定します。 ここに指定したファイルはApacheが自動的に探しブラウザに送信しますのでURLでファイル名まで指定する必要はありません。 複数指定した場合は左端に指定したファイルから探します。

DirectoryIndex index.html index.html.var

 index.htmlの他にwelcome.htmlもデフォルトで送信するには以下のように指定します。

DirectoryIndex index.html welcome.html

 あまり多くのインデックスを指定するとApacheの負荷が高くなりますので3つ位までにしておきましょう。

□HostnameLookups
 DNSサーバを参照してサイトを訪れたユーザのホスト名を取得するかどうかの指定です。 デフォルトはoffです。 onにするとユーザが訪れる度にDNSサーバを参照して環境変数REMOTE_HOSTにホスト名を格納します。



■設定2
 ディレクトリ構成に応じた設定を行います。 ドキュメントルートの設定、CGIやSSIを許可するディレクトリの設定、エイリアスの設定などを行います。 今回作成するディレクトリ構成を再度確認して下さい。

C:\Apache2-\www-+-\cgi-bin-----+-\admin
        |       |
        |       |
        |       +-\user
        |      
        +-\public-html-+-\admin
                |
                |
                +-\user

□DocumentRoot 228行目付近
 ドキュメントルートを指定します。 C:\Apache2\www\public-html\adminをドキュメントルートにしますので

DocumentRoot "C:/Apache2/www/public-html/admin"

 と修正します。 パスの最後に/を付けないようにして下さい。 例えばサイトのURLがhttp://myhomepage.co.jp/だとするとドキュメントルートで指定したディレクトリ内がアクセスされDirectoryIndexで指定したファイルの名前を探してブラウザに表示します。

□ディレクトリ設定 250行目付近
 public-htmlフォルダ以下でSSIコマンドを動作可能に設定します。 デフォルトでは以下のようになっていると思います。 途中のコメント文はカットして表示しています。

#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "C:/Apache2/htdocs">
  Options Indexes FollowSymLinks
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>

 これを以下のように修正します。

#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "C:/Apache2/www/public-html">
  Options Includes
  AddType text/html .shtml
  AddOutputFilter INCLUDES .shtml
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>

 Directoryコンテナを使用するとディレクトリごとの設定を行う事が出来ます。 指定したディレクトリ以下の全てのフォルダ内で設定が適用されます。 この場合はpublic-htmlフォルダを指定していますので、その下のadminフォルダ内とuserフォルダ内にも設定が適用される事になります。

Options Includes

 SSIを使用可能にします。

AddType text/html .shtml

 MIMEタイプの関連付けです。 .shtmlの拡張子が付くファイルをhtmlファイルとしてApacheに認識させます。

AddOutputFilter INCLUDES .shtml

 SSIコマンドを有効とするファイルの拡張子を指定します。 .htmlファイルもSSIコマンドを有効とするには

AddOutputFilter INCLUDES .shtml .html

 とします。 指定されている拡張子を持つファイルがリクエストされた場合はSSIコマンドを調べる為にファイルの内容を検索しますのでSSIコマンドを有効とするファイルは.shtmlファイルに限定した方がパフォーマンスは向上します。

AllowOverride None

 .htaccessファイルを無効にします。 .htaccessファイルを無効にする事でセキュリティーレベルは向上します。 有効にするには

AllowOverride All

 としますがお勧め致しません。

Order allow,deny
Allow from all

 最後に、このディレクトリ以下をアクセス可能にします。 これは次の項目でセキュリティーレベル向上の為、サーバの最上位ディレクトリをアクセス不可能に設定する為です。 そのままでは、このディレクトリもアクセスを拒否されてしまいますので全ての人がアクセス出来るように設定します。

 デフォルトのOptions指示子で指定しているIndexesとFollowSymLinksについて説明します。

 Indexesを指定するとディレクトリがアクセスされた際にDirectoryIndexで指定したファイルの名前がない場合にディレクトリのリストをブラウザに表示します。 これはセキュリティー的に問題があるのでIndexesは指定していません。

 FollowSymLinksはシンボリックリンクを利用するための指定でUNIX固有のものです。 Windows環境では指定する必要はありません。

□最上位ディレクトリ設定 230行目付近
 サーバの最上位ディレクトリの設定を行います。 Directoryコンテナを使用して設定を行いますので以下の全てのフォルダ内で設定が適用されます。 セキュリティー向上のため全てのオプションやアクセスの無効化設定を行います。 その後に先程設定を行ったように個別のディレクトリごとにSSI許可などを設定するという事です。 デフォルトでは以下のようになっていると思います。

#
# Each directory to which Apache has access ...
# to which services and features are allowed ...
# directory (and its subdirectories).
#
<Directory />
  Options FollowSymLinks
  AllowOverride None
</Directory>

 これを以下のように修正します。

#
# Each directory to which Apache has access ...
# to which services and features are allowed ...
# directory (and its subdirectories).
#
<Directory />
  AllowOverride None
  Options None
  Order deny,allow
  Deny from all
</Directory>

 各部を解説します。

<Directory />

 このようにディレクトリのパスを/のみで指定するとサーバの最上位ディレクトリ(この場合はC:\Apache2)を表す事が出来ます。

AllowOverride None

 .htaccessファイルを無効にします。

Options None

 全てのオプションを無効にします。 SSIコマンドの無効化やCGIスクリプトの実行を無効化する事が出来ます。

Order deny,allow
Deny from all

 このディレクトリ以下をアクセス不可能に設定します。

□ディレクトリ設定 507行目付近
 cgi-binフォルダ以下でCGIを動作可能に設定します。 今回作成するディレクトリ構成を再度確認して下さい。

C:\Apache2-\www-+-\cgi-bin-----+-\admin
        |       |
        |       |
        |       +-\user
        |      
        +-\public-html-+-\admin
                |
                |
                +-\user

 設定を行います。 デフォルトでは以下のようになっていると思います。 途中のコメント文はカットして表示しています。

#
# ScriptAlias: This controls which directories ...
# ScriptAliases are essentially the same as ...
#
ScriptAlias /cgi-bin/ "C:/Apache2/cgi-bin/"

#
# "C:/Apache2/cgi-bin" should be changed to whatever ...
# CGI directory exists, if you have that configured.
#
<Directory "C:/Apache2/cgi-bin">
  AllowOverride None
  Options None
  Order allow,deny
  Allow from all
</Directory>

 これを以下のように修正します。

#
# ScriptAlias: This controls which directories ...
# ScriptAliases are essentially the same as ...
#
#ScriptAlias /cgi-bin/ "C:/Apache2/cgi-bin/"
Alias /cgi/ "C:/Apache2/www/cgi-bin/"

#
# "C:/Apache2/cgi-bin" should be changed to whatever ...
# CGI directory exists, if you have that configured.
#
<Directory "C:/Apache2/www/cgi-bin">
  AllowOverride None
  Options ExecCGI
  AddHandler cgi-script .cgi .pl
  Order allow,deny
  Allow from all
</Directory>

 ScriptAliasの指定をコメントアウトします。 ScriptAliasを指定するとCGIが動作可能なディレクトリを手軽に作成する事が出来ますが、このディレクトリ内に画像などのバイナリファイルを置いた場合はこれらをブラウザで表示する事は出来ません。 ScriptAliasで指定したディレクトリ内の全てのファイルは実行可能ファイルとしてApacheに認識されてしまう為であると思われます。

 セキュリティーの向上化も含めて指定したファイルのみをCGIとして実行させる為にAliasを併用してディレクトリの設定を行います。 Aliasとは別名を意味する単語で、指定したパスをこの場合は/cgi/で表す事が出来るようになります。 何故Aliasを指定するかというとドキュメントルート内のhtmlファイルからCGIを起動する場合を考えてみます。 CGI設置ディレクトリ(C:\Apache2\www\cgi-bin)はドキュメントルート外にありますのでURLでCGI設置ディレクトリを指定する事が出来ません。

 Aliasで別名を指定すると例えばC:\Apache2\www\cgi-bin内に設置したtest.cgiにドキュメントルート内のhtmlファイルからは/cgi/test.cgiで起動させる事が出来るようになります。 また、サイトのURLがhttp://myhomepage.co.jp/だとするとhttp://myhomepage.co.jp/cgi/test.cgiで起動させる事が出来るようになります。

 逆にtest.cgiからドキュメントルート内のindex.htmlファイルは/index.htmlで参照する事が出来ます。 DirectoryIndex指示子でindex.htmlを指定している場合は/のみでindex.htmlを参照する事が出来ます。 /からのパスはドキュメントルートを意味するという事です。

 次にDirectoryコンテナを使用してこのディレクトリの設定を行います。

AllowOverride None

 .htaccessファイルを無効にします。 最上位ディレクトリで無効の設定を行っていますので、ここで指定する必要はありませんが明示的に記述しています。

Options ExecCGI

 CGIスクリプトの実行を有効にします。

AddHandler cgi-script .cgi .pl

 .cgiと.plの拡張子を持つファイルをCGIスクリプトとしてApacheに認識させます。 MIMEタイプを設定する訳ではありませんのでAddTypeではなくAddHandlerを使用します。

Order allow,deny
Allow from all

 最後に、このディレクトリ以下をアクセス可能にします。

 これでCGIやhtmlの設置ディレクトリの設定などが完了しました。 設定変更を保存後Apacheを再起動させて下さい。

 次は実際にhtmlの表示確認とCGIやSSIの動作確認を行います。 うまくいかない場合は再度解説を読み設定に間違いがないか良く確認して下さい。



■html表示確認
 C:\Apache2\www\public-html\admin内にテスト用の簡単なhtml(index.html)を作成して下さい。 ブラウザのアドレス欄にhttp://localhost/と打ち込みindex.htmlが表示されるか確認します。



■CGI開発環境と動作確認
 PCにPerl処理系をインストールするとCGI開発環境が整います。 ActivePerlを入手して下さい。 正常にインストールが完了するとC:\Apache2\www\cgi-bin下の全ての階層においてCGIを動作させる事が出来ます。

 CGIスクリプトにはPerl処理系のパスを記述して下さい。 Perl処理系(perl.exe)がC:\usr\local\binフォルダ内にある場合は

#!/usr/local/bin/perl

 をCGIスクリプトの1行目に記述する必要があります。

 テスト用の簡単なCGI(test.cgi)を作成してC:\Apache2\www\cgi-bin\admin内に置いて下さい。 そしてブラウザのアドレス欄にhttp://localhost/cgi/admin/test.cgiと打ち込みtest.cgiの動作を確認します。

 CGIを起動した時にWebページが表示されずにファイルのダウンロードとなってしまう場合はレジストリの変更が必要です。

 1.Windowsのスタートメニュー内のファイル名を指定して実行をクリック
 2.regeditと入力してレジストリエディタを起動
 3.\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.batを探す
 4..batの上で右クリックし新規⇒文字列値をクリックする
 5.右ペインに新しい値が追加されるので名前に[content type]と入力
 6.入力確定後[content type]をダブルクリックし値のデータに[text/plain]と入力する



■SSI動作確認
 C:\Apache2\www\cgi-bin\admin内にSSIテスト用の簡単なCGI(ssi.cgi)を作成します。 次にC:\Apache2\www\public-html\admin内にSSI起動用の簡単なhtml(index.shtml)を作成して下さい。 index.shtmlに記述するSSIコマンドは以下の通りです。

<!--#exec cgi="/cgi/admin/ssi.cgi" -->

 ブラウザのアドレス欄にhttp://localhost/index.shtmlと打ち込みSSIの動作を確認します。



■Apacheのログ
 既定値ではApacheのインストールフォルダ内(この場合はC:\Apache2)のlogsフォルダにアクセスログ(access.log)とエラーログ(error.log)が記録されます。 これらはそれぞれCustomLog指示子とErrorLog指示子でログの保存場所を変更する事が出来ます。

 エラーログについては記録するエラーのレベルをLogLevel指示子で設定する事が出来ますが、通常は変更する必要はありません。

 訪問者の参照元を記録するにはコメントアウトされている以下の指示子を有効にします。

CustomLog logs/referer.log referer

 logsフォルダのreferer.logに参照元が記録されるようになります。

 CGIスクリプト実行時の固有のエラーを記録するには以下の指示子を追加します。

ScriptLog logs/script.log

 logsフォルダのscript.logにスクリプトエラーが記録されるようになります。



■関連リンク
http://www.apache.org/
 Apache Software Foundationのサイト。 Apache本家のサイトですのでApacheに関する様々な情報を入手する事が出来ます。 オンラインドキュメントもあります。

http://www.apache.jp/
 JAPAN Apache users groupのサイト。 Apache Software Foundationの日本版サイトです。




CGI WEB