Webの仕組みとWebサーバの構造:ApacheによるWebサーバ構築(2)(2/2 ページ)
本格的なWebサイトを立ち上げるなら、インターネットの基幹技術およびWebサーバの動作や仕組みを理解しておく必要がある。そこで、名前解決やURLの処理方法からWebサーバの仮想ディレクトリ、MIMEまで、ここで基礎的な知識を再確認しておこう。
仮想ディレクトリとMIME type
ずいぶん長くかかったが、これでようやくクライアントからのリクエストがサーバに届くまでの道筋を理解できたことになる。ここからは、サーバに届けられたリクエストがサーバの内部でどのように処理されるのかという点について、幾つかのポイントに分けて説明していく。どれをとってみても、ApacheをはじめとするWebサーバを設定するうえで欠かせない重要なポイントばかりだから、しっかりと理解しておいてほしい。
注:本稿において、特に規定のない用語についてはApacheの用語を用いている。例えば「インデックスファイル」は、Apacheで用いられる用語だから、別のソフトウェアでは「イニシャルファイル」と呼ばれているかもしれない。こうした用語の差異は、しばしば見られることだが、その都度読み替えて理解していただきたい。
サーバに届いたURLの処理
まず初めのポイントは、インデックスファイルについてである。われわれは、どこかのサイトにアクセスする際、ファイル名を指定せずにアクセスすることが多い。つまり、「http://www.atmarkit.co.jp/」とURLを指定することはあっても、「http://www.atmarkit.co.jp/flinux/rensai/apache01/apache01.html」とファイル名までURLに指定することは少ない。
たとえ目的のページが決まっていたとしても、そのページのファイル名が分からないのだから、これは当然の行為だといえる。しかし、ファイルを返すサーバ側にしてみれば、ファイル名を省略されると、どのファイルを返せばよいのか判断に困ってしまうのも当然のことだ。そこで、ファイル名が省略された場合に返す、規定のファイルを指定するのがインデックスファイルである。
インデックスファイルには、慣習的に「index.html」や「index.htm」といったファイル名が指定されており、そのファイルを返すようになっている。試しに「http://www.atmarkit.co.jp/index.html」へとアクセスしてみてほしい。「http://www.atmarkit.co.jp/」でアクセスした場合と同様に、本サイトのホームページが表示されるはずだ(図5)。
このように、ファイル名を省略したアクセスは「ディレクトリアクセス」と呼ばれ、Webサーバ上の仮想ディレクトリに直接アクセスすることを指す。「http://www.atmarkit.co.jp/」であれば、Webサーバ上の仮想ルートディレクトリにアクセスしているのである。また、「http://www.atmarkit.co.jp/flinux/」とすれば、本サイトのLinux Squareを管理するflinuxディレクトリに対し、ディレクトリアクセスしていることになるわけだ。
ここで紹介したインデックスファイルの設定はサイト全体で共通のものになるが、実際のファイルはディレクトリごとに必要となる。例えば、仮想ルートディレクトリには指定したファイルがあっても、flinuxディレクトリになければ、「http://www.atmarkit.co.jp/flinux/」でディレクトリアクセスすることはできない。このことからも、サイト上のディレクトリ構成と、ファイル構成が重要であると理解できる。
ところで、仮想ディレクトリとは、なんなのだろうか。
仮想ディレクトリ
「http://www.atmarkit.co.jp/flinux/」の“flinux”は、Webサイト上のディレクトリ(Windows風にいえばフォルダ)である(補足2)。
いうまでもなく、Webサイトを構成するファイルはOSのファイルシステム上に配置される。しかし、すべてを同一のディレクトリに配置してしまうと、ファイルの数が多くなるほど管理しづらくなってしまう。そこで、ファイルの種類やサイトの構成に応じてディレクトリを分割し、ファイルを分散させるのである。こうしておけば、ファイルの管理も容易になるし、アクセスする側も分かりやすい。
それは当然なのだが、Webサイトを構成するディレクトリは、一体どこに作成すればいいのだろうか。1つのサイトを構成するディレクトリは、すべて同じディレクトリの配下に作成しなくてはならないのだろうか。その答えとなるポイントが、「仮想ディレクトリ」である。
仮想ディレクトリは、その名のとおり仮想的なディレクトリ構成を作成するために提供されている考え方、と説明できる。
サイトの構成やサーバの構成などによって、考え方はさまざまなのだが、少なくとも「仮想ルートディレクトリ」だけは必ず設定しなくてはならない。なぜならば、本当のルートディレクトリに対して、サイトのトップページのファイルを配置するわけにはいかないからである。これは、Windowsでいえば、“C:\”の直下にファイルを配置するようなものだ(図6)。
そうした状況にならないよう、/usr/local/apache/htdocsなどに仮想ルートディレクトリ(Apacheではドキュメントルートと呼ばれる)を作成するわけだが、それ以下のディレクトリは仮想ディレクトリとして作成しなくても構わない(注)。仮想ルートディレクトリ以外は、実際のディレクトリを作成するだけで、URLを使ったアクセスができるようになるからである(図7)。
従って、仮想ルートディレクトリ以外には仮想ディレクトリを作成しない例が多いのだが、仮想ディレクトリ(Apacheではエイリアスと呼ばれる)を作成するメリットも皆無ではない。
注:ただし、CGIプログラムを配置するディレクトリについてはこの限りでないので注意が必要。CGIプログラムを配置するディレクトリは、スクリプト・エイリアスとして、別途定義しなくてはならない。従って、CGIプログラムと静的なファイルを同じディレクトリに配置することはできないのである。
仮想ディレクトリを使うメリットの1つは、ファイルの物理的な配置やディレクトリ名称が変わっても、URLを変えずに済ませられる点である。WindowsのショートカットやUNIXのシンボリックリンクと同じで、再作成か設定変更が必要ではあるが、物理的な変更を使い勝手に影響させずに済む。ユーザーの中にはWebページをブックマークに登録している人もいるし、サイト内のアプリケーションでURLを指定しているかもしれないから、URLの変更を最低限に抑えることは重要だ。
詳しくは次回以降で紹介するが、Apacheではディレクトリごとに細かな設定を設けることができるし、仮想ディレクトリを作成するのも容易である。サイトの構築時にはサイト構成をしっかりと考えるようにし、実際の配置などは後で変更することだって難しくない。
MIME type
こうして、クライアントの指定したURLがサーバに届けられ、サーバ上の該当するファイルがクライアントに返される(補足3)。しかし、ここでもまた、普段はあまり意識しない技術的なポイントを説明しなくてはならない。それが「MIME」(Multipart Internet Mail Extension)だ。
MIME typeは、「/」(スラッシュ)で区切られた2つの要素、ヘッダとボディから構成された文字列で表される。ヘッダはファイルの分類を表し、ボディはファイルの種類を表す、と考えれば間違いない。例えば、画像に用いられるJPEGファイルのMIME typeはimage/jpgで、HTMLファイルはtext/htmlとなる。
こうしたMIME typeの規定値は、RFC(Request for Comments)で定義されているが(MIME typeはRFC 2045)、それに従うかどうかはユーザーに任されている。サーバ側(Apache)では、ファイルの拡張子に関連付けるMIME typeを自由に定義できるし、クライアント側もMIME typeに関する動作を自由に定義できるからだ。
これが何かを一言で表すならば、「サーバがクライアントに送信した、ファイルの種類を示す識別子」となるだろう。サーバからファイルが送られてきても、それが文書(テキスト)なのか画像なのか、それともほかの何かなのか、判断できなければクライアントは適切な処理ができない。そこで、送信したファイルの種類について、簡単に伝えることができるMIME typeが登場することになったのである。
サーバは、自分が送信するファイルの拡張子を判断し、それに関連付けられたMIME typeをクライアントに送信する。クライアントは、それを受け取ってMIME typeに関連付けられた処理を行う。その処理とは、“Webブラウザで表示せよ”であったり、“別のアプリケーションを起動して表示せよ”であったりする(図8)。
Webを利用していて、ビデオ画像にアクセスすると別のアプリケーションが起動したり、音声ファイルにアクセスしたらまた別のアプリケーションが起動した経験がないだろうか。また、ファイルにあったプラグインがないからダウンロードするように、とメッセージが表示された経験はないだろうか。これらは、すべてMIME typeによって判断された動作だから、その設定を変えれば動作も変化するのである。
Apacheの設定でMIME typeを変更する方法は、次回以降に詳しく説明するが、ここではWindows 98やWindows 2000でMIME typeを変更する方法を紹介する。
ご存じのとおり、Internet ExplorerはいまやWindows OSの一部となっている。このため、MIME typeの設定もWindowsの一部となっていて、Internet Explorerを起動しなくても変更できるようになった。その変更はあちこちからできるのだが、エクスプローラやマイコンピュータの表示メニューから、「フォルダオプション」を選択するのが手っ取り早い。
そうして表示された画面から、「ファイルの種類」と書かれたタブを選択する。そこに表示されているのは、ファイルの拡張子に関連付けられたアプリケーションの一覧だ(画面1)。以前(Internet Explorerの登場前)のリストは、拡張子とアプリケーションだけで構成されていたのだが、いまではこのリストに内容の種類(MIME)という項目も追加されている。
これ以上説明の必要もないと思うが、Internet ExplorerのMIME typeに対する動作や、ファイルの拡張子に対する動作の変更・追加はここで行う。ただInternet Explorerの場合、MIME typeを変更・追加しても、ファイルの拡張子を判断して意図しない動作をする。これもいうまでもないと思うが、Webアプリケーションを開発するときには、1種類のWebブラウザだけでなく、さまざまなWebブラウザでテストすることが肝要である。
これに対し、Netscape Communicatorの場合は、Netscape Communicatorを起動し、編集メニューの設定を開く。表示される画面のカテゴリから、Navigatorのアプリケーションを選択すると、右側に登録されているMIME typeと関連付けられたアプリケーションの一覧が表示される(画面2)。しかし、このリストも実は先に紹介したWindowsの設定を表示しているだけで、先の手順で変更しても同じである。
とにもかくにも、こうして表示されたリストを1つ1つ見ていくと、実にたくさんのMIME typeがあることが理解できると思う。中にはMIME typeの設定がない拡張子もあるが、それらにMIME typeを与えたり、独自に作成したアプリケーションの拡張子を設定することだってできる。そして、そのMIME typeをサーバ側に設定すれば、サーバとクライアントの同期が取れる。
例えば、Microsoft Office関連のアプリケーションに関するMIME typeを、サーバ側では通常設定していない。そこで、クライアント側に自動設定されているMIME type(application/vnd.ms-excelなど)を見て、サーバ側にも拡張子xlsのMIME typeとして設定する。そうすれば、サーバからXLSファイルを取得するとき、自動的にExcelが起動するようになるのだ。
先にも述べたとおり、Internet Explorerを使っている場合は、サーバ側で設定しなくても起動する可能性がある。しかし、Netscapeの場合は、そうならずにファイルを保存しようとするはずだ。このような自動起動のニーズは高いにもかかわらず、MIME typeに関する理解が浸透していないため、相談を受けることも多い。
ぜひ、一度MIME typeについて、いろいろと試してみていただきたい。特に企業内で用いられているイントラネットなどでは威力を発揮するだろうと思う。
補足2 WindowsやMacintoshしか知らない、という方にはなじみが薄いかもしれないが、UNIXやLinuxではディレクトリの区切りを「/」(スラッシュ)で表現する。これは、Windowsの「\」(エンサイン:バックスラッシュ)と同じもの、と考えていただけばよい。
補足3 サーバ上のファイルがプログラムであった場合は、そのプログラムの実行結果(通常はHTML)が返される。このようなページを「動的なWebページ」という。
次回予告:Apacheのインストール
さまざまな技術を一度に紹介しようと思うと、どうしてもすべてを伝えきれないが、本稿はあくまでもApacheについて解説することが趣旨となっているから仕方ない。そこはさまざまな情報源から補足していただきたく思う。
さて、次回はApacheのインストールについて解説する。Windowsのアプリケーションのようなわけにいかないのはもちろん、ApacheはLinux系のフリーソフトの中でも特にさまざまなインストールオプションを持つアプリケーションなのだ。インストールを解説したら、設定ファイルについて解説していくつもりである。
世紀を超えての連載となるが、どうか最後までお付き合いいただきたい。
- Apacheパフォーマンス・チューニングの実践
- Apacheパフォーマンス・チューニングのポイント
- ログローテーションとAnalogの導入
- Apacheのログを活用しよう
- SSLによる安全なWebサイト作り
- ユーザー認証によるアクセス制限(データベース認証編)
- ユーザー認証によるアクセス制限(ベーシック認証編)
- IP認証によるアクセス制限のテクニック
- バーチャルホストによる複数サイトの同時運用
- SSIの仕組みと有効化・制限の設定
- 仮想ディレクトリとマッピングの設定
- 絶対外せない基本設定とサーバの動作
- ApacheのSSL対応化と環境設定
- Apacheの基本インストール
- Webの仕組みとWebサーバの構造
- Apacheについて知ろう
Copyright © ITmedia, Inc. All Rights Reserved.