ウェブサーバーチェックポイント

はじめに

このチェックポイントは、Webサーバーの初級記事から学んだことを評価するために作られました。そこでは実際の実装やウェブサーバーの設定の人気オプションを紹介しました。このチェックポイントでは、これらのトピックに関する知識をテストし、キーワードやコマンドを復習し、引き続き学習するためのリソースを見つけることができます。

ウェブサーバーは、要求(たとえば、ブラウザに入力するURL)とその要求に対する応答(特定のURLに関連するウェブページなど)の間の仲介役としての役割を果たします。リクエストを処理するためにウェブサーバーをインストールした後、ウェブアプリを開発するために必要なスタックを構築することができます。

このチェックポイントでは、イントロダクション記事からの中心的なアイデアを総合した3つのセクションがあります。ウェブサーバーの定義、Linuxコマンドを使用してウェブサーバーを設定および変更する方法、およびネットワーキングプロトコルの理解です。それぞれのセクションには、知識をテストするための対話的なコンポーネントがあります。このチェックポイントの最後には、セキュリティとウェブアプリケーションに関するさらなる学習の機会があります。

資源

  • Introduction to Web Servers.
  • How To Install Apache.
  • How To Install Nginx.
  • Apache vs Nginx: Practical Considerations.
  • How To Secure Apache with Let’s Encrypt.
  • How To Secure Nginx with Let’s Encrypt.

ウェブサーバーとは何ですか? (Webu sābā to wa nan desu ka?)

ウェブサーバーは、HTTPおよびHTTPSプロトコルを通じて、ウェブアプリケーションの表示に必要なファイルをブラウザに提供します。ウェブアプリケーションは、ブラウザを通じてアクセスでき、エンドユーザーが操作できるソフトウェアです。

Info

自分自身をチェックしてください
ウェブサーバーの解決策を評価する際に検討すべき機能と共通の目標は何ですか?

ドロップダウン機能で答えを得てください。

– 安定した使用と高速な読み込みを備えた高稼働時間
– 同時に多くのユーザーがアクセスできること
– 視聴者とユーザーベースの成長に合わせた拡張性
– 簡単で繰り返し可能なインストールとセットアップ
– 明確なドキュメンテーション
– 短期的なパッチと長期的なソフトウェアのアップデートを含む開発者サポート
– ソフトウェアの採用とコミュニティサポート

Webサーバーを理解するためには、いくつかの主要なコンピューティングおよびネットワーキング用語に精通していることが重要です。

Info

以下の用語を理解しましょう
以下の各用語を定義し、ドロップダウン機能を使用して確認してください。

ポート
ポートとは、特定のソフトウェアに関連付けられた単一のマシン上のアドレスです。物理的なインターフェースや場所ではなく、サーバーが複数のアプリケーションを使用して通信することを可能にします。

プロトコル
プロトコルは、デバイス間の通信に使用する言語を定義するルールや標準の集まりです。
いくつかの低レベルのプロトコルには、TCP、UDP、IP、ICMPがあります。これらの下位プロトコルに基づいて構築されたアプリケーションレイヤのプロトコルの一部の例には、WebコンテンツにアクセスするためのHTTP、SSH、TLS/SSL、FTPなどがあります。

ファイアウォール
ファイアウォールは、ユーザー定義のルールに基づいて、入出力のネットワークトラフィックをフィルタリングしてネットワークセキュリティを提供するシステムです。
よく使用されるファイアウォールには、Iptables、UFW、Fail2Banなどがあります。ファイアウォールの仕組みについて詳しく知りたい場合は、「ファイアウォールとは何か、そしてどのような仕組みか」を確認してください。

DNS
DNS、またはドメインネームシステムは、特定のIPアドレスとドメイン名(カスタムURLなど)を関連付けるアプリケーションレイヤのプロトコルです。

HTTPおよびHTTPSサーバー
HTTPサーバーは、コンピュータネットワーク上での通信を可能にするためにハイパーテキスト転送プロトコル(HTTP)を使用するウェブサーバーです。
HTTPSは、Transfer Layer Security(TLS)またはSecure Sockets Layer(SSL)を使用して通信を暗号化するハイパーテキスト転送セキュアを指します。HTTPSサーバーとSSL/TLS暗号化を有効にするためには、Let’s Encryptなどの認証局からSSL証明書を生成して提供する必要があります。

プロキシサーバー
プロキシサーバーは追加のパススルー層として、クライアントとサーバーの間でインターネットのゲートキーパーとして機能し、HTTPリクエストトラフィックをその背後にあるウェブサーバーにルーティングします。
Nginxはリバースプロキシサーバーとして設計されており、Apacheもリバースプロキシサーバーとして使用することができます。Nginxをリバースプロキシとして使用する方法の詳細については、「NginxのHTTPプロキシング、負荷分散、バッファリング、キャッシングの理解」を読んでください。
プロキシについて詳しくは、プロキシの概要をご覧ください。

Webアプリを構築する際には、ファイルを提供するためのWebサーバーをインストールすることが重要です。Webサーバーは、特にサイトのドメイン名を呼び出すHTTPリクエストに応じて、静的およびダイナミックなコンテンツの両方を処理することができます。それらのリクエストを処理できるようにするために、コマンドラインで設定を管理することができます。

ウェブサーバーの設定を行うためにコマンドラインを使用する。

あなたはクラウドサーバーの導入でLinuxコマンドラインの使用方法を紹介されました。ApacheやNginxのようなウェブサーバーをインストールや設定することで、コンフィグファイルの変更やウェブページの作成、起動スクリプトの実行など、コマンドラインを使いながら進めてきました。また、APTパッケージマネージャを使ってサーバーをアップデートしました。

以下のようなコマンドを使用して、ウェブサーバーの設定や更新を行うことができます。

  • chown to change file ownership.
  • chmod to set or change the permissions for accessing files.
  • curl to transfer data with a specified location (the URL).
  • hostname to set or display the hostname and domain name.
  • systemctl to control the systemd service.

最初のプロセス(init)を実行するオプションであるsystemdも使用してきました。systemdコマンドの詳細は、「How To Use Systemctl to Manage Systemd Services and Units」を確認してください。システムの起動スクリプトは通常、/etc/init.dディレクトリに保存されており、rootまたはsudoアクセスが必要です。ログは/var/logにあります。

あなたはまた、ドメインのLet’s Encryptからの認証に対応するためにCertbotを–standaloneオプションと共に使用しました。

サーバーファイルの設定を行う。

設定ファイルはウェブサーバーの設定を提供し、必要に応じてカスタマイズすることができます。

Info

自分自身を確認してください
システムの設定ファイルはどこにありますか?ドロップダウン機能を使用して答えを取得してください。

設定ファイルは通常、/etcディレクトリにあり、nanoやvimなどのエディタを使用してコマンドラインで編集することができます。

Webページとして提供されているウェブファイルは通常、/var/wwwにあり、コマンドラインエディタや統合開発環境(IDE)を使用して更新することができます。

あなたはリモートサーバーに、一般的なオープンソースのウェブサーバーであるApacheまたはNginxをインストールして設定しました。これらのサーバーは合わせて、すべてのウェブトラフィックの約50%を扱っています。

ウェブサーバーや他のアプリケーションサーバー上で動作するファイアウォールは、ウェブアプリに対する入出力トラフィックの管理を目的としています。Ubuntuのデフォルトのファイアウォールは、「uncomplicated firewall(ufw)」であり、iptablesファイアウォールを管理します。ApacheやNginxは、一般的に使用されるポートに対してこれらのプロファイルを提供しています。より詳しい情報については、「ファイアウォールと効果的なファイアウォールポリシーの選択」を読むことができます。

Info

アパッチとNginxは、インストール時にファイアウォールに登録され、それぞれ一般的なポートに合わせた3つのプロファイルを持っています。

ポート
Apacheのプロファイル
Nginxのプロファイル

ポート80のみ開く場合
Apache
Nginx HTTP

ポート80とポート443の両方を開く場合
Apache Full
Nginx Full

ポート443のみ開く場合
Apache Secure
Nginx HTTPS

アパッチを使用しています。

Apacheは、分散型の設定を行うために.htaccessファイルを使用します。そのため、ディレクトリレベルで設定の変更ができます。.htaccessファイルは、主なApacheの設定ファイルを超えた詳細なカスタマイズオプションを提供します。

以下のインタラクティブコンポーネントを使って、Apacheの他の側面に関する知識をチェックすることができます。

Info

ご自身で確認してください
ドロップダウンメニューを使用して回答を取得してください。

Apacheのメインの設定ファイルはどこにありますか?
Apacheの設定ファイルは、/etc/apache2ディレクトリに保管されています。

バーチャルホストやアクセスログなど、他の重要なApacheファイルはどこにありますか?
サイトごとのバーチャルホストは/etc/apache2/sites-availableに格納され、/etc/apache2/sites-enabledにリンクできます。
バーチャルホストとは関係のない設定フラグメントは、/etc/apache2/conf-availableに保存され、/etc/apache2/conf-enabledにリンクされます。
アクセスログは/var/log/apache2/access.logに保管され、エラーメッセージは/etc/apache2/apache2.confのLogLevel指示に基づいて/var/log/apache2/error.logに記録されます。

Apacheは、システムのセットアップをサポートするために特定の専門用語を使用しています。Apacheの用語に関する知識を評価してください。

Info

Apacheの重要用語
以下の用語をそれぞれ定義し、ドロップダウン機能を使って確認してください。

仮想ホスト
各仮想ホストは、個別のサイトやドメインを記述し、個別にカスタマイズや設定が可能であり、異なるコンテンツを異なる訪問者に提供することができます。
仮想ホストについて詳しくは、Apache仮想ホストの設定方法のチュートリアルを参照してください。

Multi-Processing Modules(MPMs)
ApacheのMulti-Processing Modules(MPM)は、クライアントのリクエストを処理しますが、サーバーには一度に1つのMPMのみを読み込むことができます。よく使用されるモジュール(たとえばmpm_preforkやmpm_worker)は、スレッドシステムを使用してリクエストに応答します。
モジュールは、/etc/apache2/mods-available/および/etc/apache2/mods-enabled/ディレクトリに保存されています。

Nginxを使用している。

Nginxは、設定ファイルに対して集中型の統一リソース識別子(URI)のパターンマッチングを使用しています。統一リソース識別子は、リソースを識別するための一意の文字列のシーケンスです。

以下のインタラクティブなコンポーネントで、Nginx の他の側面に関する知識を確認することができます。

Info

自分自身を確認してください。
回答を取得するために、ドロップダウン機能を使用してください。

Nginxの設定タイルはどこにありますか?
設定ファイルは、/etc/nginxディレクトリに保存されています。サイトごとのサーバーブロックは、/etc/nginx/sites-availableにあり、/etc/nginx/sites-enabledディレクトリにリンクされています。

アクセスログやエラーメッセージなど、その他の重要なNginxのファイルはどこにありますか?
アクセスログとエラーメッセージは、両方とも/var/log/nginxディレクトリにあります。
アクセスログは/var/log/nginx/access.logにあり、エラーメッセージは/var/log/nginx/error.logに記録されています。

Nginxはシステムセットアップをサポートするために特定の用語を使用しています。Nginxの用語の知識を評価してみてください。

Info

Nginxの用語解説
以下の用語を定義し、その後、ドロップダウン機能を使用して確認してください。

サーバーブロック
サーバーブロックは、単一のサーバーから複数のドメインをホストするために使用できる設定の詳細です。
通常、サーバーブロックの設定は/etc/nginx/sites-availableディレクトリに保存されますが、Ubuntu 22.04のデフォルトで有効化されているサーバーブロックは/var/www/htmlディレクトリにあります。

シンボリックリンク(シンリンク)
シンボリックリンク、またはシンリンクは、マシン上の別のファイルやフォルダーに向かうショートカットのような機能です。シンボリックリンク自体にはデータはありませんが、実際のファイルを指し示します。
/etc/nginx/sites-enabledディレクトリのファイルは、/etc/nginx/sites-availableディレクトリ内の対応するファイルにシンボリックリンクされています。

ワーカープロセス
Nginxは、イベントループを介してクライアントリクエストを処理するためにワーカープロセスを使用します。Apacheのマルチスレッドシステムとは異なり、ワーカープロセスは単一スレッドで動作し、接続はループ内で非同期に管理されます。

ネットワーク通信とセキュリティプロトコルの理解

通信プロトコルはしばしばレイヤー化され、一般的な組み合わせではTCPとUDPのプロトコルの上に暗号化を使用します。TCPは送信制御プロトコルの略であり、データ通信は3ウェイハンドシェイクを介してパケット転送によって処理されます。UDPはユーザデータグラムプロトコルの略であり、データ転送にも使用されます。

TLS、またはトランスポートレイヤーセキュリティ(およびその前身であるセキュアソケットレイヤー、またはSSL)は、通常のトラフィックを保護された暗号化された包装材に配置する暗号プロトコルです。

Info

自分自身をチェックしてください。
解答を得るためにドロップダウンを使用してください。

TCPとUDPはどのように異なるのでしょうか?
TCPはハンドシェイクプロトコルを使用して、両端がリクエストを認識することを確認します。UDPは、ホストにデータを送信する際にこの確認ステップを完了しません。これにより速くなりますが信頼性は低くなります。
TCPとUDPは、効果的なファイアウォールポリシーの選択方法にも影響を与えることがあります。

TCPとHTTPの関係はどのようなものでしょうか?
ハイパーテキスト転送プロトコル(HTTP)はアプリケーション層のプロトコルであり、トランスミッション制御プロトコル(TCP)の上で実行されます。要するに、TCPはネットワークを通じてパケットが交換される方法を定義している一方、HTTPとHTTPSはそのパケットデータの処理方法についての指示を提供します。

ネットワーキングとプロセス間通信に関する詳細は、ソケットとは何か?を確認することと、ソケットの理解を深めることができます。

自分自身のウェブサーバーを操作する際、セキュリティは自己管理です。このセクションのリソースチュートリアルでは、Certbotクライアントを使用してApacheとNginxウェブサーバーの両方にLet’s EncryptのTLS暗号化を有効にしました。

Let’s Encryptを使用してドメインのSSL証明書を設定するためにCertbotを使用しましたが、選択したウェブサーバーに以下のチュートリアルを使ってサーバーとクライアント間の通信を暗号化するための自己署名証明書も生成することができます。

  • How To Create a Self-Signed SSL Certificate for Apache in Ubuntu 22.04
  • How To Create a Self-Signed SSL Certificate for Nginx in Ubuntu 22.04

Info

自己署名証明書の使用に関する心配事は何ですか?

ドロップダウンを使用して答えを入手してください。
自己署名証明書は、Webブラウザやオペレーティングシステムに含まれる信頼された証明書機関による署名がないため、ユーザーは証明書を使用してサーバーの正体を自動的に検証することができません。その結果、ユーザーがサイトを訪れる際にセキュリティエラーが表示されます。

SSL証明書、秘密鍵、および証明書署名要求に関連する作業について、OpenSSL Essentialsをクイックリファレンスとして参照することができます。

次は何ですか?(Tsugi wa nandesu ka?)

ウェブサーバーが配置されたら、必要に応じて追加のサーバーブロックや仮想ホストを作成し、ウェブアプリの要件に合わせて設定ファイルを変更することができます。ApacheのリバースプロキシとしてNginxを設定してみることもできます。

ファイアウォールの理解を深めるために、またはウェブサーバーのファイアウォール設定を再構成するために、以下のチュートリアルを試してみてください。

  • What is a Firewall and How Does It Work?
  • How To Choose an Effective Firewall Policy to Secure your Servers
  • How To Set Up a Firewall with UFW on Ubuntu 22.04
  • How To Implement a Basic Firewall Template with Iptables on Ubuntu 20.04
  • How the Iptables Firewall Works
  • How Fail2Ban Works to Protect Services on a Linux Server
  • How To Protect an Nginx Server with Fail2Ban on Ubuntu 22.04
  • Recommended Security Measures to Protect Your Servers

あなたは、ウェブアプリケーションを提供するために一般的に使用されるオープンソースソフトウェアのコレクションを設定することも考慮してみてください。たとえば、LAMP、LEMP、またはLOMPスタックなどがあります。

  • Collection of LAMP Stack Tutorials
  • How To Install Linux, Nginx, MySQL, PHP (LEMP stack) on Ubuntu 20.04
  • How To Install Linux, OpenLiteSpeed, MariaDB, PHP (LOMP stack) on Ubuntu 20.04

ウェブアプリを作り始めるためには、私たちの「コーディングの方法」シリーズに従ってみてください。

  • How To Code in JavaScript
  • How To Code in Python
  • How To Code in Go
  • How To Code in React.js
  • How To Code in TypeScript
  • How To Code in Ruby
  • How To Code in Node.JS
  • How To Code in PHP

Webサーバーに関する新たな知識を得たことで、データベース、コンテナ、セキュリティについてもクラウドの旅を続けることができます。もしまだであれば、クラウドサーバーに関する当社の入門記事もチェックしてください。

コメントを残す 0

Your email address will not be published. Required fields are marked *