Webサーバとは

# 初めに
Webサーバに関して、基本的な情報をまとめた。

 * [HTML：HyperText Markup Language](#htmlhypertextmarkuplanguage)
 * [HTTP：Hypertext Transfer Protocol](#httphypertexttransferprotocol)
 * [主なWebサーバ](#主なWebサーバ)


# webサーバ
Webサーバとは、[HTML](#htmlhypertext-markup-language)やオブジェクトの表示サービスを提供するサーバのこと。
基本的にwebサーバは、クライアントに[HTTP](httphypertext-transfer-protocol)による通信によってサービスを提供する。

 * リクエストに応じて、HTML情報をHTTPに則ったTCP/IPソケットストリームで送信する。
 * リクエストに応じて、データを表示する。
 * webブラウザなどとコネクションし、情報ファイルを並列して送る。
 * webブラウザなどの操作に連動した動的処理を行う。
 * ドメインでアクセスできるように、DNSサーバと通信する。

動的処理はCGIスクリプトやJava Servlet（サーバ側で実行されるJavaプログラム）と呼ばれる。
CGI処理においてはPerl・Ruby・PHPなどのスクリプト言語によって開発されることが多い。

# HTML
HTML（HyperText Markup Language）とは、[ハイパーテキスト](#ハイパーテキスト)を記述するための[マークアップ言語](#マークアップ言語)の1つ。
World Wide Web (WWW)において、ウェブページを表現するために用いられる。

## ハイパーテキスト
ハイパーテキスト (hypertext) とは、複数の文書（テキスト）を相互に関連付け、結び付ける仕組みのこと。
「テキストを超える」という意味から「hyper-」（～を超えた）「text」（文書）とした造語。
また、テキスト間を結びつける参照のことをハイパーリンクと言う。

## マークアップ言語
マークアップ言語（markup language）は、視覚表現や文章構造などを記述するための形式言語のこと。
組版指定に使われる言語であり、多数の種類が存在する。

# HTTP
HTTP（Hypertext Transfer Protocol）とは、Webサイトの閲覧者がWebサーバにリクエストするときに使用する指示方法(手順)のこと。
具体的には、Webブラウザで入力するWebサイトのURLアドレスの一部で、冒頭のhttpの部分を指す。
※HTTPという単語内で「Protocol」が含まれているが、HTTPプロトコルと表現するケースが多くある。

# HTTPS
HTTPS（Hypertext Transfer Protocol Secure）とは、HTTPによる通信をより安全に行うためのプロトコルおよびURIスキームのこと。
厳密には、HTTPS自体はプロトコルではなく、SSL/TLSプロトコルを用いてセキュアなHTTP通信を行うこと。

セキュアな通信とは、なりすまし・中間者攻撃・盗聴などの攻撃を防ぐための仕組みを有する通信のころ。
無料発行サービスを除き、導入に費用がかかることや、SSL証明書を定期的に更新する必要があるなど、対応には割とコストが発生する。

|通信|概要|
|---|---|
|HTTP|メッセージなどを平文のままで送受信する|
|HTTPS|SSL/TLSプロトコルを用いて、セキュアな状態でメッセージなどを送受信する|

# CMS
CMS（content management system）とは、デジタルコンテンツを統合・体系的に管理し、配信など必要な処理を行うシステムのこと。

# ドメイン
ドメイン（domain）とは、インターネット上に存在するコンピュータやネットワークを識別し、
階層的に管理するために登録された名前のこと。
類似の用語として、以下がある。※リンクされないようにスペースを使用

|用語|例|
|---|---|
|ドメイン|hogehoge.com|
|URL|https: //w ww.hogehoge.com|
|FQDN|ホスト名（www）.hogehoge.com|

URLなどのドメインの前に「.」（ドット）で区切られた文字列はホスト名と言う。
例にある「www.」がよく知られているが、ドメインの前に任意で付け加えることができる。

# CGI
CGI（Common Gateway Interface）とは、webサーバ上でプログラムを動作させるための仕組みのこと。
現存する多くのウェブサーバプログラムはCGIの機能を利用することができる。

webサーバの機能は、あらかじめ用意された情報をクライアントの要求に応じて送信することであるため、
その場で動的に情報を生成して、クライアントに送信するような仕組みを作ることはできなかった。 
CGIは、サーバプログラムと外部プログラムとの連携方法の取り決めであって、
サーバプログラムから外部のプログラムを呼び出すことで、動的処理による情報を生成し、その結果をクライアントに送信することを可能とした。
CGI は環境変数や標準入出力の扱えるプログラミング言語であれば、どの言語を用いても作成することができるが、主にPHP、Perl、Javaで作成されることが多い。

# 主なWebサーバ
現在において、多く利用されているwebサーバは以下の通り。

|webサーバ|概要|
|---|---|
|Apache|多く使用されている|
|nginx |軽量|
|IIS|Windows用|

## apache
apacheは、世界中で使用されているWebサーバソフトウェア。
サーバを構築するにはWebサーバソフトウェアが必要となる。
一般には以下のような特徴が挙げられる。

 * オープンソースソフトウェア(OSS)で、無償で誰でも利用可能
 * 約20年間OSSとして公開され、バージョンアップした結果により信頼性が高い
 * CMSを動かすためのPHPやデータベースと連携がしやすい
 * モジュール(部品または要素)により基本機能を拡張可能
 * LinuxだけでなくWindowsなど複数のサーバOS上で利用可能
 * CMS(Contents Management System)を利用する際に、比較的簡単な設定で済む
 * 公式非公式を問わず技術情報が膨大にあるため、トラブル時でも安心
 * レンタルサーバプランにあらかじめ組み込まれている場合が多い
 * 公開ページを更に高速化表示する対策が行われている
 * セキュリティ対策が随時更新されて安心


## IIS
IIS（Internet Information Services）は、Microsoft社が提供するWindowsのWebサーバソフトウェア。
無料で利用であり、サーバ用OSの「Windows Server」だけでなく、「Windows10」などにもインストール可能。
一般には以下のような特徴が挙げられる。

 * PCと同じWindows OSで動き、操作は慣れている
 * 視覚的に操作可能(コマンドを覚える必要がない)
 * 日本語の公式マニュアルが多い
 * セキュリティの設定がわかりやすい
 * 拡張機能が充実している
 * 開発環境が揃っている

## nginx

nginxは、フリーかつオープンソースなWebサーバソフトウェア。
BSDライクライセンスでリリースされており、Linux, BSD系OS, macOS, Solaris, AIX, HP-UX, Microsoft Windowsで動作する。
一般には以下のような特徴が挙げられる。

 * 処理性能・高い並行性・メモリ使用量の小ささに焦点を当てて開発
 * HTTP, HTTPS, SMTP, POP3, IMAPのリバースプロキシの機能
 * ロードバランサ、HTTPキャッシュなどの機能も持つ。
 * 静的コンテンツを高速に配信するように設計されている。
 * リバースプロキシの機能を持つ
 * 各種のウェブアプリケーション用インターフェース（FastCGI, uWSGI, Phusion Passengerなど）を標準でサポート
 * 非同期のイベント駆動アプローチを用いている。

# 最後に
基本的な用語を抑えるために、検索した情報をまとめた。

# 参考

https://www.kagoya.jp/howto/rentalserver/iis/