Live Search 教えて! goo Yahoo 検索 ask.jp Baidu ウェブ魚拓
  2008 11
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            

フリーで便利なソフト ( Win )
WinSCP : パソコン同士のファイル転送を暗号化、安全に転送してくれるソフト
Sakura Editor : " ホームページを作ろう " でも紹介している高機能なエディター
PictBear : レタッチソフト。これがフリーだから驚きます。操作も直感的
DeepBurner : データ CD / DVD の作成や、音楽 CD 作成、ISOイメージの書き込みなどが行える
アタッシェケース : 暗号アルゴリズム " Rijndael " を採用した強力なファイル / フォルダ暗号化ソフト
SoftPerfect File Recovery : ごみ箱から削除したファイルを復元してくれるソフト
BullZip PDF Printer : 紙に印刷する代わりにPDFファイルとして保存してくれるソフト
SmileDownloader : " ニコニコ動画 " "YouTube " の動画を IE の右クリックメニューから簡単に保存できる優れもの
素材をご利用の際は各サイトの利用規約をよくお読み下さい。
QR コードの使い方
貴方様のIPアドレスは
71.6.145.92


Win XP でサーバーを構築
Apache を理解する 1

Windows の GUI に慣れ親んだ人にとって Apache の設定はかなり難く感じるようですが、順序立てて理解していけば然程のことはありません。

2008 年 11 月現在、最新の Apache 2.2.10 ( 以前と比べると 2.2 系は随分と設定ファイルの見通しが改善されています ) を使って様々な機能を通常とは違うアプローチで説明致します。

まず必要最低限で動作する設定ファイル httpd.conf を用意、そこから少しづつ必要な機能を追加、具体例を示しながら httpd.conf の仕組みをマスターしていきます。

ちょうど Linux from Scratch のようなイメージでしょうか .......

+++++++ このコーナーを実践するにあたって +++++++

最低 2 台のコンピュータ、もしくはサーバー・コンピュータの中で仮想化されたもうひとつの OS を用意して下さい。ローカルネットワーク上で双方のコンピュータの IP アドレスが固定されている必要があります。

また Apache をインストールしたサーバーには Perl および PHP がインストールされていることも前提です。

Apache 2.2.10 で動作確認がとれた Perl ならびに PHP のパッケージを示しておきます。

ActivePerl-5.8.8.822-MSWin32-x86-280952.msi

php-5.2.6-Win32.zip

Apache 以外の Web サーバーにも興味をお持ちの方は IIS 5.0 の設定 動作 AN HTTPD04WebServer も併せてご覧下さい。

現在このページは作成途中です。2008 / 11 / 17 更新

☆ 最小の httpd.conf からはじめよう

http://httpd.apache.org/download.cgi から

apache_2.2.10-win32-x86-openssl-0.9.8i.msi をダウンロード、インストールします。

インストールの方法は " Win Apache2.2 インストール " 等でネット上を検索して下されば、きっと親切なページに出会うことが出来ると思います。

次に ココ を右クリック、" 対象をファイルに保存 " を選択してデスクトップ上に httpd.conf.txt を保存、ファイル名を httpd.conf にリネームしておきます。

リネームした後、以下のディレクトリに移動

C:¥Program Files¥Apache Software Foundation
¥Apache2.2¥conf

そしてその中の

httpd.conf をデスクトップ上にある httpd.conf と入れ替えて下さい。

元の httpd.conf のバックアップは必要ありません。何故なら original フォルダの中に同じものがキープされているからです。

下記画像は入れ替えた httpd.conf をエディターで開いたところ。容量はたった 468 Byte です。

Apache を再起動。

※ httpd.conf の内容を書き換えたら必ず再起動して下さい。

☆ アクセス制限 Order 、Allow と Deny

Web サーバーにとって重要な機能のひとつ、アクセス制限について説明致します。

説明にあたり Web サーバー Apache が動作しているコンピュータ ( Win XP ) のローカル IP アドレスを 192.168.11.4 、同じネットワークに存在する別のコンピュータの IP アドレスを 192.168.11.74 とします。

httpd.conf の 21 〜 24 行目に注目して下さい。

Apache では、指定されたディレクトリとそのサブディレクトリに対してある条件を課す場合、以下のように記述します。

<Directory " 対象となるディレクトリの絶対パス ">
   指示命令
</Directory>

同じネットワークにある別のコンピュータ ( 192.168.11.74 ) のブラウザから http://192.168.11.4/index.html に接続、以下画像のテストページが閲覧出来ることを確認しておきます。

もし見ることが出来ない場合はサーバー側のファイアーウォールの設定を見直して下さい。

最初に 22 行目の " Order allow,deny " の意味を知るために 23 行目の " Allow from all " を削除してみます。

改めてブラウザに表示してみると

上記画像のようにアクセスを拒否されました。

このことから " Order allow,deny " 自体はアクセスを拒否する指示命令であることが判ります。

逆に先程閲覧出来たのは 23 行目の " Allow from all " によることは言葉の意味からも容易に想像出来ると思います。

それでは特定のコンピュータからのアクセスのみを拒否する方法について説明致します。

削除した " Allow from all " を元に戻して下さい。すなわち全てのアクセスが許可されている状態にしておきます。

" Allow from all " のすぐ下に

" Deny from 拒否したいコンピューターの IP アドレス "

を付け加え ( この例では 192.168.11.74 。赤枠参照。 )

再び IP アドレス 192.168.11.74 のコンピュータのブラウザに http://192.168.11.4/index.html を入力、移動してみると

どういう流れで拒否という処理がなされたかを整理しておきます。

まず 22 行目の " Order allow,deny " によって全てが拒否され

↓ ↓ ↓ ↓

次に 23 行目 " Allow from all " が処理され全てが許可

↓ ↓ ↓ ↓

そして最後に 24 行目 " Deny from " に指定された対象 ( 192.168.11.74 ) からのアクセスを拒否。

ここで Order alllow,deny に注目して下さい。

" allow " と " deny " の記述の順番はとても重要で、もしも順番が逆、すなわち Order deny,allow であれば、先に " deny " が処理され、その後 " allow " が ( 上書き ) 処理されることになります。

IP アドレスだけではなくドメイン名によるアクセス拒否も可能です。ただしパフォーマンスの面からなるべく IP アドレスで記するようにして下さい。

また複数のホストを拒否する場合にはスペースをひとつ空けて横に列記します。下記画像の赤線部分参照。

次に特定のコンピュータのアクセスだけを許可する方法について説明致します。

httpd.conf の 22 、23 行目を以下画像のように書き換えます。

" Order " の " allow " と " deny " の順番、" Allow from " が " Deny from " に入れ替わっていることに注意して下さい。

この設定では最初 " Order deny,allow " によって全てが許可、次に " Deny from all " によって全て拒否されています。

試しに別のコンピュータ ( IP Address : 192.168.11.74 ) から http://192.168.11.4/index.html に接続してみると

今度は、今拒否されたコンピュータ ( 192.168.11.74 ) だけを許可するよう " Deny from all " のすぐ下に

" Allow from 192.168.11.74 " を追記してみます。

再びブラウザで確認すると

アクセス出来ました。

ところで 192.168.11.74 以外の IP アドレスからのアクセスが本当に拒否されているのでしょうか。このことを確かめるために IP アドレス 192.168.11.86 のコンピュータからアクセスしてみると

この結果から特定のコンピュータ ( 192.168.11.74 ) 以外は全てアクセスを拒否されていることが判ります。

前にも述べましたが " Order allow,deny " であるか " Order deny,allow " によって処理される順番の違いは、とても重要です。また処理の順番において後者が前者を上書きすることも忘れてはいけません。

アクセス制限をするためには、 " Order " ディレクティヴ ( 指示命令コマンド ) が必要不可欠であることは今までの説明からもお判り頂けたと思います。

そしてこの " Order " ディレクティヴを機能させるためにはモジュール mod_authz_host.so を Apache に読み込ませる必要があります。httpd.conf の 5 行目をご覧下さい。

実際 5 行目を削除して Apache を再起動すると Syntax ( 構文 ) エラーが発生致します。もちろん " Order " を削除して再起動させればエラーは起きません。しかし今度はアクセス制限が機能しなくなります。

因みに Allow 、Deny ディレクティヴが利用するモジュールは Apache ( core モジュール ) に含まれています。

モジュールについての使用法は次の " モジュールを追加する方法 " をご覧下さい。

☆ モジュールを追加する方法

ここでは Directory Index 機能を例にとり、モジュールを追加する方法について説明したいと思います。

Directory Index 機能は Apache に限らず Web サーバーに標準で装備されている機能です。

まず httpd.conf を ココ からダウンロードして最初の状態に戻し、Apache を再起動して下さい。

クライアント・コンピュータから http://192.168.11.4/index.html へアクセス出来ることを確認しておきます。

ところで index.html を省略したアドレス、すなわち http://192.168.11.4/ という要求に対して Apache サーバーは何を返してくれるのでしょう。

実際、クライアント・コンピュータのブラウザに http://192.168.11.4/ をタイプして移動してみると

つまり http://192.168.11.4/ という要求をサーバーへ送っても http://192.168.11.4/index.html をクライアント・コンピュータに返してはくれません。そこで返してくれるよう Directory Index という機能を使います。

Directory Index 機能を有効にするためには Apache にモジュール mod_dir.so をロードしてあげなければなりません。

それではモジュールをロードするための書式を見て頂きましょう。

モジュールをロードするための書式

LoadModule " 識別子 " " modules / モジュール名 "

Directory Index 機能に相当する識別子 dir_module およびモジュール名 mod_dir.so を上記の書式に代入、httpd.conf の 27 行目に追記して下さい。赤の矢印

次にどのファイルを検索表示させるかを IfModule コンテナ ( 特定のモジュールを使って指示命令を処理させたい場合に使います ) の中に明示してあげます。記述方法は以下の通りです。

<IfModule dir_module>
   DirectoryIndex " 検索表示させるファイル名 "
</IfModule>

この例において " 検索表示させるファイル名 " は index.html となります。

書式に則って 30 行目以下に追記して下さい。下記画像赤枠参照。

<IfModule dir_module> の部分は識別子ではなくモジュール名 <IfModule mod_dir.so> としてもかまいません。

それでは改めてクライアント・コンピュータのブラウザに http://192.168.11.4/ とタイプ、サーバーへアクセスしてみましょう。

これでわざわざ、" / " の後ろに index.html を付ける必要がなくなりました。

もちろん " 検索表示させるファイル名 " が index.html である必要はありません。また複数のファイルの中から検索表示させることも可能でその際、記述した左から順番に検索し該当のファイルが見つかれば、それをクライアント・コンピューターのブラウザに返します。

上の画像の例では、まず最初に mohimohi.shtml を検索、存在しなければ次の usagi.php を検索、同様に存在しなければさらに index.html 。という具合です。

ただし検索させるファイルは 3 つ程度に留めた方がパフォーマンスの面ではよろしいようです。

モジュールを追加する方法ならびに機能させる方法、ご理解頂けましたでしょうか。整理してみましょう。

まずモジュールを Apache にロードする。

LoadModule " 識別子 " " modules / モジュール名 "

もしそのモジュールを使ってある指示命令を処理させたい場合、 IfModule コンテナの中にその該当の指示命令を記述する。すなわち

<IfModule " モジュールの識別子 " >
   指示命令
</IfModule>

※ セキュリティの面からも使用していない Module は全て無効化 ( LoadModule の前に " # " を付ける ) するよう心がけて下さい。

以下は Apache 2.2.10 にデフォルトで用意されているモジュール群です。

☆ セクションコンテナについて

指示命令の範囲を指定するための記述をセクションコンテナといいます。

セクションコンテナにはファイルシステムコンテナとウェブ空間コンテナの 2 種類があります。

最初にファイルコンテナから説明致します。

ディレクトリ単位で範囲を指定する場合のファイルシステムコンテナの記述法

<Directory " 対象となるディレクトリの絶対パス ">
   指示命令
</Directory>

例としては httpd.conf のデフォルト 15 〜 18 行目、21 〜 24 行目をご覧下さい。

ファイル単位で範囲を指定する場合のファイルシステムコンテナの記述法

<Files " 対象となるファイルの名前 ">
   指示命令
</Files>

Files コンテナにおいて Options ディレクティヴ ( 後述 ) を設定しても効果はありません。

また以上 2 つのファイルシステムコンテナを入れ子にして使うことも出来ます。

<Directory " 対象となるディレクトリの絶対パス ">
   <Files " 対象となるファイルの名前 ">
      指示命令
   </Files>
</Directory>

ただし <Directory> 〜 </Directory> の中に Directory コンテナを入れることは出来ません。もちろん Files コンテナの中にコンテナを作れない事は明らかです。

もしサブ・ディレクトリに違う処理 ( 指示命令 ) をさせたいのであれば新たな行に <Directory " サブ・ディレクトリの絶対パス "> </Directory> を作り、その中に指示命令を記述します。
このことは httpd.conf の 15 〜 18 行目のコンテナと 21 〜 24 行目のコンテナを比較して頂ければお判りになると思います。

ファイルシステムコンテナのひとつの例を示してみます。

usasa.html.txt をデスクトップ上にダウンロード。ファイル名を usasa.html にして index.html と同じディレクトリ ( ドキュメントルート )

C:¥Program Files¥Apache Software Foundation
¥Apache2.2¥htdocs

の中にコピーして下さい。

同じネットワークにある別のクライアント・コンピュータ ( IP アドレス 192.168.11.74 ) のブラウザに

http://192.168.11.4/usasa.html

とタイプ、移動して下記のように閲覧できることを確認します。

この段階では httpd.conf の 21 〜 24 行目によって index.html と同じディレクトリにある usasa.html もまた全てのホストからのアクセスが許可されています。

では usasa.html だけにアクセス制限 ( 拒否 ) をかけるにはどうしたらいいでしょう。そこで Files コンテナの登場です。

まず httpd.conf の 21 〜 24 行目をコピーして 35 行目にペーストします。

そして Directory コンテナの中を以下 ( 赤枠 ) のように書き換えて下さい。

つまり Files コンテナを使って usasa.html というファイルだけ " Deny from all " 、すなわち拒否しようというわけです。

実際拒否されているかを確認するために、もう一度クライアント・コンピュータから http://192.168.11.4/usasa.html へアクセスしてみると

http://192.168.11.4/(index.html) の場合はどうでしょう。

みごと usasa.html だけを拒否することに成功しました。

ところで 21 〜 24 行目および 35 〜 40 行目は一緒に記述することも可能です。ただし 2 重の命令の記述 ( 同じパスにおけるコンテナの記述が 2 つ以上ある場合後述のものが有効となりますが念のため ) を避けるため 21 〜 24 行目の各行頭に " # " を付けてコメントアウト ( 無効 ) しておきます。

次はウェブ空間コンテナについて説明致します。

ディレクトリ、ファイル単位で範囲を指定しアクセス管理を行うのがファイルシステムコンテナだったのに対して、ウェブ空間コンテナは URL ごとに指定した指示命令を行うときに使います。例えば

クライアント・コンピュータから http://servername/status という URL が呼ばれた場合、指示命令に対する情報をクライアントに返すためには、以下のように記述します。

<Location /status>
   指示命令
</Location>

しかし、これでは Directory コンテナとなんら変わらないのではと思われた方もいらっしゃるでしょう。

そこでディレクトリやファイルが存在しない情報を引き出す実例を示してみます。

クライアント・コンピュータのブラウザに http://192.168.11.4/information とタイプ、移動してみて下さい。

存在しないディレクトリにアクセスしているわけですから当然の結果です。

ところがもし下記画像のように httpd.conf の 48 〜 50 行目 ( 赤枠 ) に /information と server-info を関連付けたらどうなるでしょうか。因みに server-info はファイルもしくはフォルダとして実在しません。

※ 45 行目 ( 赤線 ) は server-info に必要なモジュールを読み込んでいます。

改めてクライアント・コンピュータのブラウザからアクセスしてみると

上記画像のようにサーバーの設定情報が取得、表示されました。

つまりクライアント・コンピュータから http://192.168.11.4/information への要請を受け取った Apache サーバーが SetHandler ディレクティヴの命令により server-info を処理させ、その結果をクライアント・コンピュータに返したというわけです。

※ /extra/httpd-info.conf に記述されているので一度目を通しておくことをお勧めします。また server-info の代わりに server-status についても一度お試し下さい。その際 status_module をロードすることもお忘れなく。

※ サーバの情報を第三者に公開するのは全くよろしくないので確認次第 45 行目ならびに 48 〜 50 行目の各行頭に # を付けてコメントアウトして無効化して下さい。

以上のことからお判りのように Location コンテナはファイルシステムに依存しないオブジェクトに対して指示命令 ( ディレクティヴ ) を返したいときに使います。

使用できるディレクティヴも Directory コンテナとは違い、例えば AllowOverride ディレクティヴが利用不可。
さらには Options ディレクティヴに対しても FollowSymLinks と SymLinksIfOwnerMatch を使うことが出来ません。

Options ディレクティヴについては次のコーナーで、AllowOverride ディレクティヴに関しては " AllowOverride と .htaccess " において説明致します。

コンテナにはここで紹介した Directory コンテナ、Files コンテナ、Location コンテナ以外にも、モジュールを追加する方法で説明した IfModule コンテナや IfDefine コンテナ、Proxy コンテナ、VirtualHost コンテナ等が Apache には定義されています。

☆ Options で様々な機能を制御

Options ディレクティヴを使って色々な機能に対して実行権を与えることが出来ます。

このディレクティヴは Directoryコンテナ、Location コンテナ、VirtualHost コンテナー、.htaccess ファイルで使用可能。

VirtualHost コンテナー、.htaccess ファイルについては後述。Location コンテナにおいては FollowSymLinks と SymLinksIfOwnerMatch 機能が使えません。

FollowSymLinks

対象のディレクトリ以下においてシンボリックリンクを辿れる ( 認識する ) ようにします。

SymLinksIfOwnerMatch

シンボリックリンク先のファイルまたはディレクトリが、 シンボリックリンクの所有ユーザ ID と同じ場合にのみシンボリンクを辿れるようにします。

Indexes

DirectoryIndex で指定したファイル ( 例えば、index.html ) が ディレクトリ内に存在しなければ、 ディレクトリ内の一覧を表示する機能です。( mod_autoindex )

Includes

Server Side Include ( SSI ) の使用を可能にします。( mod_include )

IncludesNoExec

Includes との違いは exec コマンド と exec cgi を無効にします。

ExecCGI

対象のディレクトリおいて CGI スクリプトの実行を許可します。( mod_cgi )

Multiviews

曖昧な URL を指定した場合でも、クライアントに対して最適な値を検索して返す事が出来るようにする機能。( mod_negotiation )

All

Multiviews 以外の機能を全て許可します。コンテナに何も記述がなければこの状態です。デフォルト。

None

すべての機能を無効にします。

それではいくつかの機能を Directory コンテナの中で実際に使ってみることにします。

【 FollowSymLinks と SymLinksIfOwnerMatch 】

まずファイルをシンボリックリンクさせる作業から始めます。

その準備として コチラ のサイトから juction.exe を C:¥Program Files にダウンロードして下さい。

次にドキュメントルート C:¥Program Files¥Apache Software Foundation¥Apache2.2¥htdocs に newdoc という新規フォルダを作成、さらにその newdoc フォルダーの中に source フォルダーを作ります。

そして ココ から link.test ファイルをダウンロード、ファイル名を link_test.html として source フォルダにコピーして下さい。

コマンドプロンプトを起動、 C:¥Program Files に移動した後、以下の junction コマンドを実行します。

C:¥Program Files>junction "C:¥Program Files
¥Apache Software Foundation¥Apache2.2¥htdocs¥
link" "C:¥Program Files¥Apache Software Foundation¥Apache2.2¥htdocs¥newdoc¥source"

実行すると DocumentRoot 、すなわち C:¥Program Files
¥Apache Software Foundation¥Apache2.2¥htdocs 直下に link フォルダーが出現 ( シンボリックリンクの成功 ) します。

実際にシンボリックリンクされているかを確認するために実在する source ディレクトリの中にある link_test.html を削除してみて下さい。link フォルダーにある link_test.html も同時に消滅するはずです。

以下は dir コマンドで確認したところ。<JUNCTION> と表示されていることに注視して下さい。赤線

以上でシンボリックリンク ( Junction ) の作業は終わりです。

次は Apache の設定です。

httpd.conf の 35 〜 42 行目、45 行目ならびに 48 〜 50 行目の行頭に # を付け 53 行目以降を下記画像のように追記して下さい。21 〜 24 行目をコピーすると簡単です。

それでは link フォルダにある link_test.html にクライアント・コンピュータ ( 192.168.11.74 ) からアクセスしてみます。アドレスは下記画像参照。

閲覧出来ました。

もし FollowSymLinks 機能が無効の場合はどうでしょう。そこで 55 行目の # をはずし、54 行目に # を付け Options None ( 全ての機能を無効 ) を有効にします。

そして再びアクセスすると

すなわち FollowSymLinks が無効ではアクセス出来ません。因みにこの状態で実在するアドレスに接続してみて下さい。FollowSymLinks の効能がお判り頂けると思います。

ところでシンボリックリンクを削除する場合には以下のコマンド ( -d オプション ) を実行して下さい。

C:¥Program Files>junction -d "C:¥Program Files
¥Apache Software Foundation¥Apache2.2¥htdocs¥
link"

間違ってもエクスプローラ上で削除しないで下さい。元の大事なファイル、フォルダも一緒に消えてしまいます。

シンボリックリンク、正確にはジャンクションはショートカットやエイリアスとは全く違うことに注意して下さい。

パーティション越えでジャンクションを利用するのであれば linkd.exe を使用します。詳しくは コチラ を。

またドキュメントルート htdocs と source フォルダの所有者が以下画像のように異なる場合には SymLinksIfOwnerMatch ではアクセス出来ませんが、source フォルダーの所有者を合わせればもちろんアクセス可能となります。下記画像は所有者が違っている例。

Apache サーバーのパフォーマンスを最優先するのであれば SymLinksIfOwnerMatch の使用はおひかえ下さい。

【 Indexes 】

クライアント・コンピュータからサーバーへアクセスをした際、サーバーはまず DirectoryIndex に指定されたファイル ( ここでは index.html ) を検索します。もちろん存在すればそれを返しますが、もし、そのファイルが存在しない場合、その対象ディレクトリ内の一覧を表示 ( インデックス表示 ) させる機能を Indexes といいます。

実際の例でみてもらいます。

以下の画像はドキュメントルートにある newdoc フォルダーをエクスプローラで開いたところです。index.html ファイルが存在しないことに注目して下さい。

それでは早速 Indexes 機能を使ってみることにします。

httpd.conf の 54 行目の FollowSymLinks の後にスペースを入れて indexes を追記して下さい。

そして Indexes を機能させるためのモジュールをロードします。61 行目参照。

クライアント・コンピュータのブラウザにアドレス

http://192.168.11.4/newdoc/

とタイプ、移動すると

newdoc にあるファイルが一覧表示されました。もし newdoc の中に index.html ファイルが存在すればそれを返していたことは前もって説明したとおりです。

ただ、縦に一列に並んでいる様はあまり見栄えの良いものではありません。そこで形を整えてみることにします。

そのために extra ディレクトリにある httpd-autoindex.conf を httpd.conf に読み込みます。67 行目赤矢印。

ところがこの状態で Apache を再起動するとエラーを発します。理由は httpd-autoindex.conf の中の記述で Alias ディレクティヴを使っているからです

そこでそのためのモジュールを 64 行目で読み込ませます。赤線

改めてアクセスすると

さらに httpd-autoindex.conf の 15 行目を 16 行目にコピー。 HTMLTable と記述されている部分を削除して下さい。そして 15 行目の行頭に # を付加します。

再びアクセスしてみましょう。いかがですか。

ところでファイルの前のアイコンが ? マークになっています。これを解決するためには mime_module を読み込む必要があります。" .jpg ファイルにはこのアイコンを " という風にブラウザに返してあげるのです。mime はマイムと読みます。

このモジュールは次の " Includes と IncludesNoExec " のところでロードします。

【 Includes と IncludesNoExec 】

Includes を Options ディレクティヴの引数に選択するのは Execute ファイルを実行できるという危険性を孕んでいるため避けた方がよろしいでしょう。

設定自体は同じなので、ここでは IncludesNoExec を例にとり説明致します。

まず下記画像の赤線および赤枠をご覧下さい。SSI を使うための httpd.conf の設定です。

※ Indexes の説明で追記した 67 行目の Include は、今回の Includes とは全く関係ありません。

54 行目の Indexes のすぐ後ろにスペースひとつ分を空けて IncludesNoExec と記述して下さい。赤線

そして Includes を機能させるためのモジュール include_module をロードします。70 行目

71 行目 : AddType ディレクティヴを利用するためのモジュール mime_module を読み込ませています。

73 行目は、その AddType ディレクティヴを使って拡張子 .shtml を MIMEタイプ text/html に新規追加登録する記述です。

MIME ( マイム ) タイプとは、拡張子からファイルの種類を判別できるようにする機能。

Webサーバは .txt ファイルや .html ファイル、また画像や動画など様々なファイルを扱います。クライアント・コンピュータのブラウザに対してそのような様々なファイルをどう扱うかの整合性を担う役目をしているのが C:¥Program Files¥Apache Software Foundation¥Apache2.2¥conf にある mime.types ファイルです。

新規拡張子を MIME タイプに追加するには AddType ディレクティヴを使います。書式は

AddType [ MIME タイプ ] [ 拡張子 ]

最後の 74 行目は AddOutputFilter ディレクティヴによって .shtml ファイルを SSI ( INCLUDES ) で処理させる命令です。

もし .html も SSI として処理したければ

AddOutputFilter INCLUDES .shtml .html

と記述します。

それでは実際に SSI を実行してみましょう。

適当なエディターを使って新規ファイルに下の枠内をコピー、 test.shtml で保存、ドキュメントルートと同じ階層に入れて下さい。※ printenv の " v " の後ろにはスペースひとつ分空いています。コピーした際、全角スペースは削除して下さい。

<html>
<body>
<pre>
<!--#printenv -->
</pre>
</body>
</html>

クライアント・コンピュータのブラウザのアドレス入力欄に

http://192.168.11.4/test.shtml

を入力、移動します。

上記画像のように表示されれば SSI が実行されています。

【 ExecCGI 】

サーバーに Perl がインストールされていることが前提です。

まず現在のディレクトリ構造について把握しておきましょう。

緑枠の部分がドキュメントルートです。

ところでドキュメントルート以外のディレクトリに対してクライアント・コンピュータからアクセスさせるにはどのようにしたらいいでしょう。例えば上記画像の cgi-bin や icons 。

それを実現するために Alias というディレクティヴを用います。

Alias ディレクティヴを利用するとドキュメントルート以外のディレクトリを公開することが出来るようになります。書式は

Alias [ PATH 1 ] [ PATH 2 ]

PATH 1 : URL 上での Server Name 以下のパス

PATH 2 : 公開するディレクトリの絶対パス

例えば PATH 1 を /icons/ として PATH 2 を C:¥Program Files¥Apache Software Foundation¥Apache2.2¥icons¥ とするとクライアント・コンピュータからアドレス http://192.168.11.4/icons/ で C:¥Program Files¥Apache Software Foundation¥Apache2.2¥icons¥ ディレクトリにアクセス出来るようになります。

※ Alias ディレクティヴに必要なモジュール、alias_module は Indexes のところで、すでにロードされています。

それでは新たに httpd.conf に付け加えた項目についてみていきましょう。

青枠の部分を拡大すると

83 行目は Apache で CGI を動作させるために必要なモジュールを読み込んでいます。

86 行目は Alias ディレクティヴを使ってドキュメントルート以外にある C:¥Program Files¥Apache Software Foundation¥Apache2.2¥cgi-bin ディレクトリを
http://192.168.11.4/cgi-bin/
として公開するための設定。

89 〜 93 行目の Directory コンテナの中で cgi-bin ディレクトリの各種実行権限を設定しています。

90 行目の Options には ExecCGI を記述。CGI の実行を許可。

91 〜 92 行目で外部から cgi-bin ディレクトリへのアクセスを全て許可しています。

96 行目の AddHandler は、拡張子が .cgi 、.pl のとき cgi-script ハンドラーに渡して処理させる記述です。

それでは cgi-bin ディレクトリにデフォルトで存在する printenv.pl をクライアント・コンピュータのブラウザに表示してみましょう。アドレスは

http://192.168.11.4/cgi-bin/printenv.pl

ここで 96 行目の AddHandler の拡張子記述部分に .pl がない場合、以下のようにスクリプトそのものをそのまま返してしまうので注意が必要です。

もし拡張子の記述なしで存在する全てのファイルを CGI として認識させたいならば 96 行目

AddHandler cgi-script .cgi .pl

SetHandler cgi-script

に書き換えて下さい。 cgi-script の後ろに .cgi 、.pl を記述する必要ありません。

以上で ExecCGI に関する説明はひと通り終わりました。

しかし ................

実は CGI を使うための設定方法がもうひとつ存在します。オリジナルの httpd.conf ( 324 、340 〜 345 行目参照 ) もこちらの方法を採用しています。

まず 86 、96 行目の頭に # を付けてコメントアウト、次に 90 行目の ExecCGI を None に書き換えて下さい。もちろんこの状態では CGI ( スクリプト ) は動作致しません。

そして 99 行目に以下の 1 行を追記します。下記画像赤線

ScriptAlias /cgi-bin/ "C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/"

クライアント・コンピュータから再びアクセス。

ScriptAlias ディレクティヴの取り扱いは Alias ディレクティヴのそれと全く同じです。

違う点は、ScriptAlias でマッピングされたディレクトリは、そのまま CGI が実行可能であるということです。

すなわち実行のための許可 ( Options が None となっていることに注目 ) や ( AddHandler を使っての ) 拡張子の登録は一切不要となります。

【 Multiviews 】

まず具体例で説明致します。

【 ExecCGI 】 のディレクトリ構造の画像をもう一度思い浮かべて下さい。ドキュメントルートにある usasa.html ファイルに注目します。

もちろんクライアント・コンピュータのブラウザに http://192.168.11.4/usasa.html を入力すれば対応した結果を返してくれますが、もし http://192.168.11.4/usasa という曖昧な URL を入力した場合にはどうなるでしょう。結果は 「 ページが表示されません 」 というエラーを返されます。

ところが MultiViews 機能が有効になっていると、自動的に usasa.* で始まる全てのファイルを検索し、結果として http://192.168.11.4/usasa.html を返してくれるようになります。

それではそのための設定を httpd.conf に記述します。

54 行目の最後にスペースひとつ空けて Multiviews を追記して下さい。

次に 102 行目に Multiviews 機能を有効にするためのモジュール ( negotiation_module ) を読み込ませる記述をします。

クライアント・コンピュータのブラウザにわざと曖昧な URL http://192.168.11.4/usasa とタイプ、移動してみると。

みごと usasa.html を表示することが出来ました。

※ 注意点としては、Options に All を指定したとしても、Multiviews 機能は有効にはなりません。必ず、明示的に記述しておく必要があります。

☆ AllowOverride と .htaccess

httpd.conf に以下の設定がなされている場合

<Directory "ドキュメントルートへの絶対パス">
   Options Indexes
   Order allow,deny
   Allow from all
</Directory>

ドキュメントルートにある全てのディレクトリ、サブディレクトリに対して Indexes 機能の許可ならびに、すべてのアクセスが許可されています。

Indexes についての詳細は コチラ

ここでもしドキュメントルート直下にあるディレクトリ newdoc に対してのみ Indexes 機能を許可させたくないときは、どのように設定したらいいでしょう。

一番簡単で確実な方法は、newdoc ディレクトリに対する新たな Directory コンテナを作り、そこにその指示命令を与える方法です。すなわち

<Directory "ドキュメントルート絶対パス/newdoc">
   Options -Indexes
</Directory>

マイナスを付けることによって該当の機能を拒否することが出来ます。

例えば Indexes 機能を保持しつつ、ExecCGI 機能の許可を追加したい場合には、Options +ExecCGI のようにプラスを付けます。

<Directory "ドキュメントルート絶対パス/newdoc">
   Options +ExecCGI
</Directory>

ExecCGI についての詳細は コチラ

もし Indexes 機能を拒否して ExecCGI 機能のみ許可を与えるのであれば、プラスは付けず、そのまま Options ExecCGI とします。この場合 ExecCGI が Indexes 機能を上書きするので、改めて -Indexes を記述する必要はありません。

<Directory "ドキュメントルート絶対パス/newdoc">
   Options ExecCGI
</Directory>

※ Direcory コンテナの中に Directory コンテナを記述出来ないことは " セクションコンテナについて " で述べました。それ故、行を変え新しく Directory コンテナを作りその中に指示命令を記述しています。

通常はこの方法で制御します ( 推奨 )

もうひとつの方法は AllowOverride ディレクティヴを使う方法です。

Allow は許可、Override は上書き。すなわち個別のディレクトリに対して設定の変更をしたいとき AllowOverride ディレクティヴを使います。

AllowOverride ディレクティヴを利用するにあたって新たにモジュールを読み込む必要はありません ( Core モジュールに包含されています ) 。

また AllowOverride ディレクティヴを使えるコンテナは Directory コンテナのみとなります。

それでは AllowOverride ディレクティヴを用いて、前述同様 newdoc ディレクトリに対し Indexes 機能を拒否する方法について述べたいと思います。

まずドキュメントルートに対する Directory コンテナの中に AllowOverride Options を追記します。赤矢印。

<Directory "ドキュメントルートへの絶対パス">
   AllowOverride Options ← ← ←
   Options Indexes
   Order allow,deny
   Allow from all
</Directory>

つまりドキュメントルートにあるすべてのサブディレクトリに対して Options ディレクティヴの上書き、すなわち変更を許可 ( 上記赤矢印 ) させます。

次に空 ( Null ) のテキストファイルに

Options -Indexes

を記述、 ファイル名を、.htaccess ( h の前にドットが付いてます ) として保存。保存した .htaccess ファイルを newdoc ディレクトリ直下に置いて下さい。

以上で先程同様 newdoc ディレクトリに対してのみ Indexes 機能を拒否することが出来るようになります。

ただし Apache.org ではこの .htaccess を使った方法を推奨しておりません。管理者権限がある場合は、直接 httpd.conf に記述すようにして下さい。

例外としてレンタルサーバーのように不定なユーザー 、つまり管理者権限をもたないユーザー自身に自分のホームディレクトリを管理させる場合には有効な手段となり得ます。

Options の他にとりうる引数を列挙すると Limit 、Indexes 、FileInfo 、AuthConfig 、All 、None があります。

以下では Limit および FileInfo について実際に検証してみたいと思います。AuthConfig ( アクセス認証 ) については、改めて別コーナーにて説明させて頂きます。

【 Limit 】 について

ここでいう Limit とは、アクセス制限のことを示しています。詳細については " アクセス制限 Order 、Allow と Deny " をご覧下さい。

上位のディレクトリとは違ったアクセス制限の設定したいとき、AllowOverride ディレクティヴの引数に Limit を用います。

httpd.conf.txt を ココ からダウンロード。ファイル名を httpd.conf としてドキュメントルートにコピーして下さい。もちろん Apache の再起動もお忘れなく。

まずクライアント。コンピュータ ( 192.168.11.74 ) から

http://192.168.11.4/usasa.html

へアクセス、閲覧出来ることを確認して下さい。

さらに

http://192.168.11.4/newdoc/mohi.html

へも接続出来ることを確認しておきます。

以下画像のように httpd.conf に AllowOverride Limit を追記して下さい。赤線参照。

次に空 ( Null ) のテキストに

Order allow,deny
Allow from 192.168.11.86 ( 赤数字に注意 )

を記述、ファイル名を .htaccess として newdoc の直下にドラッグして置きます。

改めて、192.168.11.74 のコンピュータから http://192.168.11.4/newdoc/mohi.html へ接続してみると

拒否されました。

その理由は、newdoc ディレクトリに対するアクセス許可、すなわち全てのコンピュータからのアクセスを許可 ( Allow from all ) だったものを、" Allow from 192.168.11.86 " に上書きすることにより、IP アドレス 192.168.11.86 のコンピュータからしかアクセス出来ないように設定を変更したことによります。

念のため、この状態で http://192.168.11.4/usasa.html には普通にアクセス出来ることを確認しておいて下さい。

試しに httpd.conf の 22 行目の Limit を None ( .htaccess による上書きを拒否 ) に書き換え

Apache を再起動、http://192.168.11.4/newdoc/mohi.html へもう一度アクセスしてみると

もちろん管理者権限があれば、わざわざ .htaccess を使ってアクセス制限をする必要性は全くありません。

何故なら httpd.conf に直接記述すれば済むことだからです。

【 FileInfo 】 について

Options ExecCGI
AddHandler cgi-script .cgi .pl




貴方様が現在ご利用になられているブラウザは

Megalodon(http://megalodon.jp/)
Copyright (C) magical-sound All rights reserved.