ウェブサーバーの概要

導入

A web server’s primary role is to serve web pages for a website. A web page can be rendered from a single HTML file, or a complex assortment of resources fitted together. If you want to host your web application on the internet, in many cases you will need a web server.

Webサーバーの最も一般的な使用例の1つは、ウェブサイトをブラウザでレンダリングするために必要なファイルを提供することです。 http://www.digitalocean.com を訪れると、インターネット上でリクエストを開始するURLを入力します。このリクエストは複数のレイヤーを通過し、1つまたは複数がWebサーバーである可能性があります。このWebサーバーは、この場合、DigitalOceanのウェブサイト、具体的にはホームページへのリクエストに対する応答を生成します。理想的には、これは迅速に行われ、24時間365日利用可能です。

DigitalOceanのホームページへの任意の訪問者は、単一のWebページとしてそれを体験しますが、現実には今日のほとんどの現代のWebページは多くのリソースの組み合わせです。Webサーバーは、バックエンドとフロントエンドの間の仲介者として機能し、HTMLやCSSファイルからJSONデータまでのリソースを提供し、すべて動的に生成されるか静的に提供されます。ウェブサイトやオンラインアプリケーションと一緒に作業するつもりであれば、Webサーバーが何であるか、そしてどのように機能するかの基本を理解することは非常に役立ちます。

「Webサーバー」という用語は、ソフトウェア自体またはその存在するハードウェアのどちらかを指すことができますが、この記事では特にWebサーバーソフトウェアを指します。この違いの詳細については、当社の「クラウドサーバーの紹介」をご覧ください。。

一般的な使用事例

A web server handles requests on the internet through HTTP and HTTPS protocol, and is also called an HTTP server. A web server is distinct from other types of servers in that it specializes in handling these HTTP and HTTPS requests, differentiating itself from application servers (e.g. Gunicorn) and servers for other protocols (i.e. WSGI). These other servers work as intermediaries for backend programming languages through external libraries, which is a different level of abstraction than web servers.

以下は、ウェブサーバーが処理する一般的なタスクのいくつかです:

  • HTML、CSS、およびJavaScriptファイルを提供します。
  • 画像や動画を提供します。
  • HTTPエラーメッセージングを処理します。
  • ユーザーのリクエストを処理し、しばしば同時に行います。
  • URLの一致と書き換えを処理します。
  • 動的コンテンツを処理および提供します。
  • 最適化されたデータ使用量と速度のためにコンテンツを圧縮します。
  • 静的コンテンツのブラウザーキャッシングを有効にします。

実践的な観点から、以下はウェブサーバーを使用する個人プロジェクトのいくつかです:

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

このリストは必ずしも網羅的ではなく、ウェブサーバーがエンドユーザーに提供できるデータの種類は厳密に制限されていません。例えば、ウェブAPIリクエストを処理するウェブサーバーは、JSONなどの形式でデータを応答することがよくあります。

ウェブサーバーの目標

Webサーバーは、速度、可用性、信頼性などの期待に応える観客向けに提供されます。彼らはインターネット上でコンテンツを提供するという共通の目的を持ち、信頼性のあるWebサーバーソリューションと見なされるためには、以下の側面が考慮される必要があります:

  • 稼働時間:これはWebサーバーがオンラインで動作している時間を指します。ウェブサイトはユーザーに常にオンラインである必要があるため、高い稼働時間が目標です。これは安定性と予測可能性にも翻訳されます。ユーザーがURLを入力したり、ウェブサイトへのリンクをクリックしたとき、予想されるページはいつでもすぐにロードされるべきです。予定されたアップデートやメンテナンスのための計画されたダウンタイム以外は、唯一の例外であるべきです。ランダムなタイミングでバグが発生したり、クラッシュしたりするWebサーバーは、ユーザーの体験に悪影響を与えます。
  • 速度:Webページはできるだけ速くロードされるべきです。ユーザーはリクエストがすぐに処理されることを望んでおり、それ以外の場合は彼らを失うリスクがあります。遅いロードのWebページでは、ユーザーが最初のロードを待っていても、その後のすべての長いロードが彼らの再訪意欲を指数関数的に減少させます。
  • 同時処理:これは同時に複数のリクエストを処理することを指します。一度に多くの人々がウェブサイトを訪れようとすることは良いことのように思えますが、これが実際の問題になるのは、ロード時間が大幅に遅くなり、サーバー全体がクラッシュするときです。物理的または仮想サーバーにはRAMやCPU計算能力などのリソースが限られており、Webサーバーはこれらのリソースを効率的に使用する必要があります。
  • スケーラビリティ: スケーラビリティとは、既存のサーバーを垂直方向に拡張することでより強力にするか、水平方向にサーバーを追加することを指します。観客が増えるにつれて、1つまたは2つの小さなウェブサーバーだけでは足りなくなる場合があります。
  • 設定の簡単さ: プロジェクトを迅速に立ち上げることは、プロジェクトの反復に重要です。わかりやすく繰り返し可能なインストールプロセスは、最初のウェブサーバーの設定だけでなく、スケールアップする際に複数のウェブサーバーを追加する際にも重要です。
  • ドキュメンテーション: ウェブサーバーは複雑です。最も一般的なセットアップでは素早く立ち上がりますが、必要な機能は時間とともに増えていきます。そのような場合、良いドキュメンテーションはニーズに合わせたカスタムソリューションを作成するために不可欠です。
  • 開発者サポート: コア開発者が自分たちのプロジェクトにコミットしていない場合、あなたのプロジェクトもそれにコミットすべきではありません。これには、ソフトウェアの長期サポートの計画と、バグ修正やパッチの形で提供される直接的な短期サポートの両方が含まれます。
  • コミュニティサポート: コア開発チームが大部分の作業を処理しますが、繁栄するコミュニティは隙間を埋めるのに貢献します。オープンソースプロジェクトでは、これは実際のコードベースへの貢献を意味しますが、強力なコミュニティはまた、質問に答えたり、特定の問題に対処したりするのに役立ちます。

ウェブサーバーは異なる解決策を提供できますが、それらが提供する解決策は、同じ問題に対処しようとする試みから生じます。これらの問題自体は時間とともに進化し、エンドユーザーのニーズと期待とともに変化し、これは常に変化し続けるリストです。

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

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

Apacheは最初に登場し、個々の設定ファイルを持つ複数のウェブサイトがすべて単一のウェブサーバー上に存在するのが一般的だった時代に構築されました。NginxはApacheの後に登場し、複数のウェブサイトを単一のサーバーから提供する必要性がなくなり、代わりに負荷下で効率的に単一のウェブサイトを提供する方向に移行しました。

ウェブサーバーは同じ目標と問題を共有していますが、各ソリューションの解釈と実装は異なります。これらの問題への正確な回答は、特定のウェブサーバーソリューションのアイデンティティを形成します。NginxとApacheがここで強調されていますが、どのウェブサーバーソリューションも独自の意見を持っています。ウェブサーバーを選択する際には、特定のプロジェクトに対する自身のニーズを考慮することが重要です。そのようにして、ウェブサーバーの提供状況が変わっても、自身の要件に基づいた評価手法がしっかりとしたものになります。

以下は、ウェブサーバーがウェブサーバーの目標を達成しようとする方法の主要な違いです。

設定ファイルの構造

Webサーバーは、その設定を設定ファイルに保存します。これらのファイルを編集することで、Webサーバーをカスタマイズすることができます。設定ファイルの保存と組織化は、Webサーバー製品を分割する意見の多い構造的な問題です。

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

Apacheの.htaccessファイルは、分散型の構成を機能として可能にし、すべての設計上の決定は、このファイルシステムに対する細かい制御に焦点を当てています。Nginxは同じファイルシステムの焦点を持たず、URIパターンの一致と中央集権化された構成に焦点を当てています。

同時処理の処理

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

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

静的コンテンツの提供

Webサーバーは、Webページ以外にも画像、動画、CSSファイル、JavaScriptファイルなど、他のリソースのリクエストを受け取ります。これらのアイテムは常に同じであるため、「静的」と呼ばれます。しばしばウェブページ自体は、リクエストを行う人に応じてカスタマイズされていないHTMLファイルであり、静的コンテンツとして扱われます。Webサーバーは、この静的コンテンツを圧縮して読み込み時間を短縮することもできます。

Nginxは、イベント駆動のリクエスト処理により、静的コンテンツの提供に優れています。Apacheも静的コンテンツを提供できますが、ほとんどの設定では、Nginxと比較して負荷下での速度と効率が異なります。

動的コンテンツの提供

コンテンツが変更され、処理され、要求者に応じてカスタマイズされる場合、そのコンテンツは動的と呼ばれます。たとえば、ウェブサイトにログインした後、ウェブサイトは通常、トップナビゲーションバーにユーザー名を動的に表示します。動的コンテンツは、ウェブサーバーに一度に多くのリクエストを一意に処理させるため、追加の複雑さをもたらします。リクエストごとに個別に調整されたコンテンツは、全員に提供することができず、普遍的にキャッシュされることもできません。

内部で動的コンテンツを処理することで、通常は外部ライブラリにリクエストを渡す必要がある余分な抽象化レイヤーが取り除かれます。Apacheは、人気のあるソリューションスタックであるLAMP(Linux、Apache、MySQL、PHP)と同様の解決策として、動的コンテンツの処理をネイティブに実装しています。Nginxはより言語に依存しないが、LAMPスタックのようなユースケースに対する同様の解決策としてPHP-FPMなどの外部ライブラリが必要です。

リバースプロキシ機能

A reverse proxy sits in front of a traditional web server, becoming an intermediary server that routes HTTP request traffic to web servers behind it. A reverse proxy becomes the gateway that directs traffic between web servers and the internet at large, and often is the layer that directly interfaces with a firewall. While most web servers have reverse proxy capability, Nginx was built and optimized from the ground up to be a robust reverse proxy server.

Nginxの現実世界での重要性は、そのリバースプロキシ機能と効率に大きく依存しています。多くのサーバーセットアップでは、Nginxをリバースプロキシとして使用し、負荷またはルールの構成に基づいてリクエストを送信するWebサーバーを決定します。この仲介者の役割により、いくつかのセットアップではApacheと組み合わせて使用し、従来のApache Webサーバーの前にリバースプロキシとして配置されることさえあります。

サポートエコシステム

NginxとApacheはどちらも、それぞれの開発チームとコミュニティから強力なサポートを受けています。最も人気のあるオープンソースのWebサーバーであるため、学習リソースは豊富です。Apacheは非営利団体であるApacheによってサポートされており、常に無料で使用できます。Nginxのコアはオープンソースですが、上流のヘルスチェック、セッションの永続性、高度な監視などの望ましい機能は、Nginx Plus製品提供の背後にロックされています。

従来のWebサーバーの代替

HTTPリクエストに常に応答できるサーバーが必要な場合は、Webサーバーがこのタスクを最も適切に実行します。HTTPリクエストの提供から逸れるにつれて、Webサーバーは理想的な解決策ではなくなります。特に、Webサーバーが提供する補助機能に関しては、これが特に当てはまります。たとえば、キャッシュなどの機能は、セットアップに応じて、リバースプロキシやCDNレベルでより効率的に処理される場合があります。

また、開発者が開発リソースをWebサーバーの管理に割り当てる傾向が変わるにつれて、サーバーレス、ヘッドレスCMS、およびJamstackなどの解決策が登場しました。これらの解決策は、自己ホスト型のWebサーバーを必要とせず、外部サービスにWebサーバーレイヤーを抽象化します。Webサーバーレイヤーの詳細または高度な制御が不要な開発者にとっては、開発時間を他のことに集中できます。詳細については、この記事をご覧ください。Jamstack with headless CMSまたはDigitalOceanのApp Platformを使用したフルスタックJamstackの実装

結論

この記事では、Webサーバーの基本的な概要、使用方法、および解決しようとしている問題について説明しました。この知識を持って、現在のWebサーバーのソリューションの景色に飛び込み、あなたのニーズに特に適したソリューションを見つけるために知識を適用しました。Webサーバーの設定と使用方法について詳しく学びたい場合は、当社のCloud Curriculumシリーズの残りをチェックしてください。

追加リソース

チュートリアル:

  • Apacheのインストール方法:最初のApacheサーバーをセットアップするためのステップバイステップの手順。このソリューションは、分散構成による詳細な制御と、PHPなどの人気のあるプログラミング言語へのフックを備えた動的Webページの内部処理で優れた性能を発揮します。
  • Nginxのインストール方法:最初のNginxサーバーをセットアップするためのステップバイステップの手順。このソリューションは、集中型構成、静的アセットの提供、リバースプロキシとしての機能、および高同時性トラフィックの処理で優れた性能を発揮します。
  • Apache対Nginx: 実践的な考慮事項:Webサーバーソリューションの主要な2つのプレーヤーについてのより詳細な調査。

デジタルオーシャンの製品:

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