ウェブサーバーについて

紹介

ウェブサーバーの主な役割は、ウェブサイトのウェブページを提供することです。ウェブページは、単一のHTMLファイルからレンダリングされるか、複数のリソースが組み合わさって形成されることがあります。インターネット上でウェブアプリケーションをホストしたい場合、多くのケースでウェブサーバーが必要です。

ウェブサーバーの最も一般的な使用例の一つは、ブラウザでウェブサイトを表示するために必要なファイルを提供することです。`http://www.digitalocean.com`にアクセスすると、URLを入力してインターネット上でリクエストを開始します。このリクエストは複数の層を通り、そのうちの一つ以上がウェブサーバーです。このウェブサーバーは、あなたのリクエストに対して応答を生成します。この場合、それはDigitalOceanのウェブサイト、具体的にはホームページです。理想的には、これは迅速に、そして24/7で利用可能に行われます。

DigitalOceanのホームページにアクセスするすべての訪問者はそれを単一のウェブページとして体験しますが、実際には現在の多くの現代的なウェブページは、多くのリソースの組み合わせになっています。ウェブサーバーはバックエンドとフロントエンドの間で中継者として機能し、HTMLやCSSファイル、JSONデータなどのリソースを動的に生成するか、静的に提供します。ウェブサイトやオンラインアプリケーションに関わることを意図している場合、ウェブサーバーとその動作方法の基本的な理解を得ることは非常に有用です。

「ウェブサーバー」という用語は、ソフトウェア自体またはその存在するハードウェアの両方を指すことができますが、この記事では特にウェブサーバーソフトウェアについて参照しています。この違いについての詳細は、私たちのクラウドサーバー入門をご覧ください。

一般的な使用例

ウェブサーバーは、インターネット上のリクエストをHTTPおよびHTTPSプロトコルを通じて処理し、HTTPサーバーとも呼ばれます。ウェブサーバーは、他のタイプのサーバーと異なり、これらのHTTPおよびHTTPSリクエストの処理に特化しており、アプリケーションサーバー(例:Gunicorn)や他のプロトコルのサーバー(例:WSGI)と区別されます。これらの他のサーバーは、バックエンドのプログラミング言語を外部ライブラリを通じて中間者として動作します。これは、ウェブサーバーの抽象レベルとは異なります。

以下は、ウェブサーバーが取り扱う一般的なタスクです:

  • HTML、CSS、JavaScriptファイルの提供。
  • 画像と動画の提供。
  • HTTPエラーメッセージの処理。
  • ユーザーリクエストの処理、通常は同時に。
  • URLの一致と書き換えの指示。
  • 動的コンテンツの処理と提供。
  • データ使用と速度の最適化のためのコンテンツの圧縮。
  • 静的コンテンツのブラウザキャッシングの有効化。

実際の例として、以下はWebサーバーを使用する個人プロジェクトの一部です:

  • ウェブサイトを作成したい場合。
  • インターネットに接続するアプリを作成したい場合。

このリストは全てを网羅しているわけではありません。また、Webサーバーがエンドユーザーに提供するデータの種類については厳密に制限されていません。例えば、Web APIリクエストを処理するWebサーバーは、しばしばJSONなどの形式でデータを返します。

Webサーバーの目標

Webサーバーは、速度、利用可能性、信頼性などを期待するオーディエンスに対応します。彼らの共通の目的はインターネット上でコンテンツを提供することです。また、Webサーバーとして有効なソリューションと見なされるためには、以下の要素を考慮する必要があります:

  • アップタイム:これはWebサーバーがオンラインで動作している時間を指します。ウェブサイトは常にオンラインでユーザーにサービスを提供する必要があるため、高いアップタイムが目標です。これはまた、安定性と予測可能性を意味します。ユーザーがURLを入力したり、あなたのウェブサイトへのリンクをクリックした場合、期待されるページが常に、どんな時でも読み込まれるべきです。例外は、アップデートやメンテナンスのための計画されたダウンタイムのみです。バグがあるか、ランダムにクラッシュするWebサーバーは、ユーザーの体験に悪影響を与えます。
  • スピード:ウェブページは可能な限り速く読み込まれるべきです。ユーザーは即座にリクエストが満たされて欲しいと考えています。そうでなければ、彼らを失うリスクがあります。遅い読み込み速度のウェブページでは、ユーザーが最初の読み込みを待つだけでも、その後の長い読み込み時間が彼らの滞在や再訪の意欲を指数関数的に低下させます。
  • 並列処理:これは、同時に複数のリクエストを処理することを指します。一度に多くの人がウェブサイトにアクセスしようとするのは良いことに思えますが、読み込み速度が遅くなり、サーバー全体がクラッシュすると、実際の問題になります。物理的または仮想的なサーバーには、RAMやCPU計算能力などのリソースが限られており、ウェブサーバーはこれらのリソースを効率的に使用する必要があります。
  • スケーラビリティ:スケーラビリティとは、既存のサーバーを垂直スケーリングでより強力にするか、水平スケーリングで設定にさらに多くのサーバーを追加することを指します。オーディエンスを増やすにつれて、1、2台の小さなウェブサーバーでは足りなくなる時期がきます。
  • 設置の容易さ:プロジェクトを迅速に立ち上げて実行することは、プロジェクトの反復にとって鍵となります。明確で再現可能なインストールプロセスは、最初のウェブサーバーを設置する際にも、後にスケールアップする際の複数のウェブサーバーにも重要です。
  • ドキュメンテーション:ウェブサーバーは複雑です。一般的な設定はすぐに立ち上げることができますが、ニーズは時間とともに成長します。多くの場合、一般的に使用されない機能が必要になります。その時、優れたドキュメンテーションは、ニーズに合ったカスタムソリューションを作成するために不可欠です。
  • 開発者サポート:もしコア開発者が自分たちのプロジェクトに対してコミットしていないなら、あなたはあなたのプロジェクトを彼らのプロジェクトにコミットすべきではありません。これは、彼らのソフトウェアに対する長期的なサポートの計画だけでなく、バグ修正やパッチとして提供される即時的な短期サポートも含まれます。
  • コミュニティサポート:コア開発チームが大部分の重い作業を担当しますが、活気に満ちたコミュニティがギャップを埋めるのに貢献します。オープンソースプロジェクトの場合、これは実際のコードベースへの貢献を意味するかもしれませんが、強力なコミュニティはあなたの質問に答えたり、特定の問題に対する助けを提供したりすることもできます。

ウェブサーバーは異なるソリューションを提供することができますが、彼らが提供するソリューションは、これらの同じ問題に対処する試みから生まれています。これらの問題自体は、エンドユーザーのニーズと期待に従って時間とともに進化するため、これは生きたりとどまり、常に進化しているリストです。

ウェブサーバーソリューションの選択

現在、最も人気のあるオープンソースウェブサーバーは、ApacheとNginxです。

Apacheは最初に登場し、個々の設定ファイルを持つ複数のウェブサイトが一つのウェブサーバー上に存在することが一般的だった時に構築されました。NginxはApacheの後に登場し、一つのサーバーから複数のウェブサイトを提供するニーズから変わり、一つのウェブサイトを一つのサーバーで非常に効率的に提供するニーズに向かいました。

ウェブサーバーは同じ目標と問題を共有していますが、それぞれのソリューションの解釈と実装は異なります。これらの問題に対する正確な答えは、どのウェブサーバーソリューションのアイデンティティーを形作ります。ここでは、その普及度によってNginxとApacheを強調していますが、どのウェブサーバーソリューションも主観的です。ウェブサーバーを選択する際には、特定のプロジェクトにおけるあなた自身のニーズを考慮することが重要です。そうすることで、ウェブサーバーの提供状況が変化しても、あなたの評価方法はあなた自身の要件に基づいて安定します。

以下は、ウェブサーバーがウェブサーバーの目標を達成するために取り組む手法のキーダイフェラターです:

設定ファイルの構造

ウェブサーバーは設定を設定ファイルに保存します。これらのファイルを編集することでウェブサーバーをカスタマイズできます。設定ファイルの保存方法と構成は、主観的で構造的な問題で、ウェブサーバープロダクトを分岐させます。

主な分岐は、中央集権と分散化の間です。分散化された設定ファイルは、ファイルシステムレベルで細かいレベルの制御を可能にし、これは一つのサーバー上で複数のウェブサイトをホストする必要に由来しています。中央集権の設定は、一つのサーバー上で複数のウェブサイトをホストすることに焦点を当てず、代わりに単一のウェブサイトを効率的に提供することに焦点を当てます。これらの設定は、ウェブサーバーのディレクトリ構造に対してマッチングを依存するのではなく、URIパターンマッチングに依存しています。これは、URLをファイル名や他のユニークな識別子に対してマッチングすることです。

Apacheの.htaccessファイルは、分散化された設定を機能として促進し、すべての設計決定は、細かいレベルの制御を持つファイルシステムに焦点を当てて流れます。Nginxは同じファイルシステムの焦点を持っていず、URIパターンマッチングと中央集権の設定に焦点を当てます。

並列処理の取り扱い

ウェブサーバーを実行する物理および仮想サーバーには、RAMやCPU処理などの限られたリソースがあります。ウェブサーバーがリクエストを基本的にどのように管理するかは、リソースを効率的に使用するために最大の影響を与えます。単一のリクエストは、リクエストごとに全体のプロセスを生成するか、イベント駆動ベースで処理されることができます。ウェブサーバーが複数の同時リクエストを効率的に処理する能力は、基本的な設計決定に結びついています。

Apacheは、プロセスを生成してリクエストを処理しますが、負荷の下ではリソースを消費する速度が問題になることがあります。Nginxのイベント駆動型システムは、より少ないリソースを使用し、負荷の下でもよりパフォーマンスが高くなります。

静的コンテンツの提供

ウェブページ以外にも、ウェブサーバーはイメージ、動画、CSSファイル、JavaScriptファイルなどの他のリソースへのリクエストを受け取ります。これらのアイテムは、誰がリクエストしたかに関係なく常に同じであるため、このタイプのコンテンツは静的と呼ばれます。多くの場合、ウェブページ自体は、リクエストした人にカスタマイズされていないHTMLファイルであり、静的コンテンツとして扱われます。ウェブサーバーはまた、この静的コンテンツを圧縮して、より良いロードタイムを提供することができます。

Nginxは、イベント駆動型のリクエスト処理において静的コンテンツの提供に優れています。Apacheも静的コンテンツを提供できますが、多くの設定では、Nginxと同じ速度と効率で負荷を処理することができません。

動的コンテンツの提供

コンテンツが、誰がリクエストしているかに応じて変更、処理、カスタマイズされる場合、そのコンテンツは動的コンテンツと呼ばれます。例えば、ウェブサイトにログインした後、ウェブサイトが動的に上部のナビゲーションバーにユーザー名を表示することがよくあります。動的コンテンツは、ウェブサーバーがリクエストを受け取ったときにそれぞれのリクエストをユニークに処理する必要があるため、追加の複雑さを生み出します。リクエストごとにカスタマイズされたコンテンツは、全員に提供することができず、一般にキャッシュすることもできません。

動的コンテンツを内部で処理することで、リクエストを外部ライブラリに転送する必要がある通常の抽象レイヤーを取り除くことができます。Apacheは動的コンテンツの処理をネイティブに実装しており、人気のあるソリューションスタックのLAMP(Linux, Apache, MySQL, PHP)などがあります。Nginxはより多くの言語に対応していますが、LAMPスタックのような使用例に対して同様のソリューションを提供するために、PHP-FPMなどの外部ライブラリを必要とします。

リバースプロキシ機能

逆プロキシは従来のウェブサーバの前に配置され、それに対してHTTPリクエストトラフィックを後ろにあるウェブサーバにルーティングする中間サーバとして機能します。逆プロキシは、ウェブサーバとインターネット全体との間でトラフィックをダイレクトするゲートウェイとなり、多くの場合、ファイアウォールと直接インターフェースするレイヤともなります。ほとんどのウェブサーバは逆プロキシ機能を持っていますが、Nginxは強靭な逆プロキシサーバとして設計され、最適化されています。

Nginxの実際の使用における重要性は、その逆プロキシ機能と効率に大きく依存しています。多くのサーバ設定では、複数の従来のウェブサーバをNginx逆プロキシの背後に配置し、Nginxでリクエストを送信するウェブサーバを負荷やルール設定に基づいて決定します。この中間役割により、一部の設定ではApacheとペアで使用され、従来のApacheウェブサーバの前に逆プロキシとして配置されます。

サポートエコシステム

NginxとApacheの両方は、それぞれの開発チームとコミュニティから強力なサポートを受けています。最も人気のあるオープンソースのウェブサーバとして、学習リソースは豊富です。Apacheは非営利団体のApacheによってサポートされ、常に無料で使用できます。Nginxのコアはオープンソースですが、望ましい機能はNginx Plusプロダクトオファリングの背後にロックされており、アップストリームヘルスチェック、セッションペリستンス、高度なモニタリングなどの機能があります。

伝統的なウェブサーバーの代替案

常に着信HTTPリクエストに対応する準備が整っているサーバーを望む場合、ウェブサーバーがこのタスクを最適に遂行します。HTTPリクエストの提供に焦点を当てることから離れるほど、ウェブサーバーは理想的なソリューションとしてはなくなります。これは、特にウェブサーバーが提供する補助機能において真です。例えば、キャッシュ機能などは、セットアップによって逆プロキシやCDNレベルでより効率的に処理されることがあります。

加えて、開発者がウェブサーバーの管理に専念する開発リソースを移行するにつれ、サーバーレス、ヘッドレスCMS、およびJamstackなどのソリューションが現れました。これらのソリューションは、自己ホストされたウェブサーバーを必要とせず、ウェブサーバーレイヤーを外部サービスに抽象化します。ウェブサーバーレイヤーの細かいまたは高度な制御を必要としない開発者にとって、開発時間を他の場所に集中させることができます。詳しくは、JamstackとヘッドレスCMSDigitalOceanのApp PlatformでフルスタックJamstackを実装する記事をチェックしてください。

結論

この記事では、Webサーバーとは何であるか、どのように使用されるか、そしてどのような問題を解決しようとしているかについての基本的な解説を読んでいただきました。この知識を身につけたあなたは、現在のWebサーバーソリューションのランドスケープに飛び込み、自分のニーズに合ったソリューションを見つけるために知識を活用しました。Webサーバーの設定方法や使用方法をさらに学ぶには、私たちのクラウドカリキュラムシリーズのWebサーバーに関する残りの内容をご覧ください。

追加リソース

チュートリアル:

  • Apacheのインストール方法: 最初のApacheサーバーを設定するためのステップバイステップの指示です。このソリューションは、細分化された制御のための分散構成や、PHPなどの人気のあるプログラミング言語にフックを設けた動的なウェブページの内部処理に優れています。
  • Nginxのインストール方法: 最初のNginxサーバーを設定するためのステップバイステップの指示です。このソリューションは、中央集権化された構成、静的アセットの提供、リバースプロキシとしての機能、そして高い同時接続トラフィックの処理に優れています。
  • Apache対Nginx:実践的な考慮点:ウェブサーバーソリューションの分野での2つの主要プレイヤーについてより深く掘り下げます。

DigitalOcean製品

  • DigitalOcean Droplets:ウェブサーバーのテストおよびデプロイに最適な仮想プライベートサーバー。
  • DigitalOcean Functions:仮想プライベートサーバーの代替となるサーバーレスソリューション。サーバーのメンテナンスをスキップし、アプリケーションコードに集中しましょう。

Source:
https://www.digitalocean.com/community/conceptual_articles/web-servers-introduction