ウェブサーバーとは？
==========

この記事では、ウェブサーバーとは何か、ウェブサーバーの仕組み、なぜウェブサーバーが重要なのかを説明します。

|  |  |
| --- | --- |
| 前提知識: | すでにインターネットはどのように動くのか、ウェブページ、ウェブサイト、ウェブサーバー、検索エンジンの違いについて知っておく必要があります。 |
| 目標: | ウェブサーバーとは何かを学び、その仕組みに関して全般的な理解すること。 |

概要
--

「ウェブサーバー」はハードウェアまたはソフトウェア、あるいは両方が動作しているものを指します。

1. ハードウェアの観点では、ウェブサーバーとは、ウェブサーバーソフトウェアとウェブサイトのコンポーネントファイル (例えば、 HTML 文書、画像、 CSS スタイルシート、 JavaScript ファイル) を格納しているコンピューターのことです。インターネットに接続され、ウェブに接続された他の端末と物理的なデータ交換に対応しています。
2. ソフトウェアの観点では、ウェブサーバーとは、ホストにあるファイルに対する、ウェブユーザーのアクセスを制御する、いくつかの部品の集まりです。最小限の部品は HTTP サーバーです。HTTP サーバーは URL （ウェブアドレス）および HTTP （ブラウザーがウェブページを閲覧するためのプロトコル）を理解するソフトウェアのことです。格納しているウェブサイトのドメイン名（`mozilla.org` など）を通してアクセスすることができ、コンテンツをエンドユーザーの端末に配信します。

最も基本的な水準では、ブラウザーはウェブサーバーが保持しているファイルが必要になったらいつでも、 HTTP でファイルをリクエストします。リクエストが正しいウェブサーバー（ハードウェア）に届くと、**HTTP サーバー**（ソフトウェア）がリクエストを受け付け、リクエストされた文書を探し（ない場合は 404 レスポンスが返される）、ブラウザーに HTTP を通して送り返します。

![HTTP を通したクライアント/サーバー接続の基本的な説明](/ja/docs/Learn/Common_questions/Web_mechanics/What_is_a_web_server/web-server.svg)

ウェブサイトを公開するには、静的または動的ウェブサーバーが必要です。

**静的ウェブサーバー**は、スタックとも呼ばれますが、コンピューター（ハードウェア）と HTTP サーバー（ソフトウェア）から構成されます。サーバーが保持しているファイルをブラウザーへ「そのまま」送るので、「静的」と呼ばれます。

**動的ウェブサーバー**は、静的ウェブサーバーと追加のソフトウェアからなります。追加ソフトウエアは、一般的には**アプリケーションサーバー**と**データベース**からなります。アプリケーションサーバーが、 保持しているファイルを変更してから、HTTP サーバーを通してブラウザーに送信するので「動的」と呼ばれます。

例えば、ブラウザーで見ることができる最終的なウェブページを生成するために、アプリケーションサーバーはデータベースからのコンテンツで HTML のテンプレートを埋めることがあります。 MDN やウィキペディアのようなサイトは非常に多くのウェブページを持っていますが、実際の HTML 文書が存在するわけではなく、巨大なデータベースとわずかな HTML テンプレートのみが存在しているのです。この構成をとることで、より速く、より簡単にコンテンツを保守したり配信したりすることができます。

より深く掘り下げる
---------

すでに述べたとおり、ウェブページを呼び出すために、ブラウザーはウェブサーバーにリクエストを送信し、ウェブサーバーは自身のストレージスペースからリクエストされたファイルを探し始めます。ファイルを見つけると、サーバーはファイルを読み込み、必要に応じて処理を行い、ブラウザーに送信します。それらのプロセスを詳細に見てみましょう。

### ファイルの格納

ウェブサーバーは最初に、ウェブサイトの HTML 文書およびその関連資産である画像、 CSS スタイルシート、 JavaScript ファイル、フォント、動画などのファイルを格納する必要があります。

技術的には、これらのすべてのファイルを自分のコンピューターでホスティングすることができますが、以下のような理由で専用のウェブサーバーにすべてを格納したほうがはるかに便利です。

* 専用ウェブサーバーは、一般的に、利用可能性（稼働中）が高いです。
* ダウンタイムやシステムトラブルを除けば、専用ウェブサーバーは常にインターネットに接続されています。
* 専用ウェブサーバーは、いつでも IP アドレスが同じです。これは**専用 IP アドレス**と呼ばれています。（すべての プロバイダー が家庭用の回線に固定 IP アドレスを提供しているとは限りません。）
* 専用ウェブサーバーは、通常、サードパーティによって管理されています。

これらすべての理由から、良いホスティングのプロバイダーを探すことは、ウェブサイトを構築する上で重要な部分です。様々なサービス会社が提供するものを探し、ニーズや予算に合う一つを選択しましょう（無料のものから月当たり数千ドルまでのサービスがあります）。詳しくはこの記事にあります。

ウェブのホスティングサービスを契約したら、後はウェブサーバーにファイルをアップロードするだけです。

### HTTP による通信

次に、ウェブサーバーは HTTP (**H**yper**t**ext **T**ransfer **P**rotocol) への対応を提供しています。名前にある通り、 HTTP はコンピューター間でハイパーテキスト（リンクされたウェブ文書）を転送する方法を定義しています。

プロトコルは二台のコンピューター間で通信をする規則を設定します。 HTTP はテキストによる、ステートレス（下記参照）のプロトコルです。

テキストによる

すべてのコマンドがプレーンテキストで、人間が読める形です。

ステートレス

サーバーもクライアントも以前の通信を覚えていません。例えば、 HTTP 単独では、サーバーは入力したパスワードや、処理中のどのステップにいるかを覚えていることはできません。このような仕事をするには、アプリケーションサーバーが必要になります。 (以降の記事で様々な技術を説明します。)

HTTP はクライアントとサーバーがどのように通信するかについての明確なルールを提供しています。 HTTP 自体については、後で技術記事で説明します。これからは、以下のようなことに気を付けてください。

* **クライアント**だけが HTTP リクエストを作成することができ、**サーバー**だけに送ることができます。サーバーは**クライアント**の HTTP リクエストに**返答**することだけができます。
* HTTP でファイルをリクエストするとき、クライアントはファイルの URL を示さなければなりません。
* ウェブサーバーはすべての HTTP リクエストに応える必要があります。処理できない場合でも、エラーメッセージを返す必要があります。

ウェブサーバーでは、 HTTP サーバーが受信したリクエストを処理し、応答する役割を担っています。

1. リクエストを受信すると、 HTTP サーバーは最初にリクエストされた URL が既存のファイルに一致するかどうかをチェックします。
2. もしあれば、ウェブサーバーはブラウザーにファイルを送り返します。なければ、アプリケーションサーバーが必要なファイルを作成します。
3. どちらの処理もできない場合、ウェブサーバーは `404 Not Found` としてよく知られているエラーメッセージをブラウザーに返します。
 404 エラーはよく起こるので、多くのウェブデザイナーが 404 エラーページのデザインに時間を割いています。
 ![The MDN 404 page as an example of such error page](/ja/docs/Learn/Common_questions/Web_mechanics/What_is_a_web_server/mdn-404.jpg)
### 動的コンテンツと静的コンテンツ

大まかに言って、サーバーは静的コンテンツと動的コンテンツのどちらかを提供することができます。「静的」は「そのまま提供する」という意味です。静的なウェブサイトは構築するのが最も簡単なので、最初に静的サイトを作成することをお勧めします。

「動的」はサーバーがコンテンツを処理したり、データベースからその場で作成したりすることを意味します。この方法は、柔軟なページを提供できる反面、技術的難易度が高く、ウェブサイトの構築が複雑になります。

アプリケーションサーバーは多くの種類があり、特定のサーバーを選ぶのはとても難しいといえます。あるものは、ブログ、Wiki、 E ショップなどに特殊化しています。いっぽう、 CMS (Content Management System) と呼ばれるものはより一般的です。動的ウェブサイトを構築するときは、ニーズに合ったツールの選択に時間をかけましょう。ウェブサーバープログラミングを学習しようとするのでなければ（これ自体はエキサイティングな領域ですが）、独自のアプリケーションサーバーを作成する必要はありません。それは車輪の再発明のような、無用な努力になるからです。

次のステップ
------

ウェブサーバーのことがよく分かったら、次のステップに進みましょう。

* ウェブ上で何かをするためにどれくらいコストがかかるかを知る
* ウェブサイトを作成するのに必要な様々なソフトウェアについてもっと学ぶ
* ファイルをウェブサーバーにアップロードするにはのような、実践的な記事を読む