仕事

エンジニアなら必須知識のサーバーの仕組みや役割について解説!


ブラウザのリクエスト

ブラウザで「www.example.com」というサイトにアクセスする場合まずブラウザからDNSキャッシュサーバに「www.example.comのIPアドレスを教えて」とリクエストします。
昔の電話帳のようなものですね。

DNSキャッシュサーバ

DNSキャッシュサーバに情報がない場合は、DNSコンテンツサーバに聞きに行きます。WHOISサーバでドメインの所有者情報なども確認します。
DNSキャッシュサーバが IPアドレス 192.168.1.1 を持っている場合、そのIPをブラウザに返します。

DNSコンテンツサーバ(権威DNSサーバ)

DNSキャッシュサーバが持っていない場合、DNSコンテンツサーバ(権威DNSサーバ)にリクエストします。

WHOISサーバ

通常、WHOISサーバはDNS解決には直接関与しませんが、ドメイン名の 所有者情報 や 登録情報 を取得するために使われます。
WHOISサーバは、ドメイン名が登録されているかどうかを確認したり、所有者の情報を調べるために使用されます。

CDNエッジサーバ

ブラウザがIPアドレスを取得した後、そのIPに基づいて通信を始めますが、もしCDN(コンテンツ配信ネットワーク)が設定されていれば、最初に CDNエッジサーバ へアクセスします。
CDNは、コンテンツをユーザーに 最も近いサーバから提供 する仕組みです。
CDNエッジサーバは、画像やCSSファイルなどをキャッシュして、ユーザーに近い場所から配信してくれます。
例えば、東京のユーザーには東京のサーバから配信するような感じです。

CDNは キャッシュされた静的コンテンツ(画像、CSS、JavaScriptなど) を返すことができ、ロードを高速化します。
動的コンテンツが必要な場合は、次に進みます。

ファイアウォール(FW)

通信がネットワークを通ると、ファイアウォール がリクエストの内容をチェックします。

ポート番号による制御:

HTTPSは443番ポート:お店の正面玄関のような物です。暗号化されているので安全です。
HTTPは80番ポート:こちらも玄関ですが、暗号化されていない通信です。
FTPは21番ポート:荷物の搬入口のようなものです。ファイルの出し入れができます。

IPによる制御:

通信してほしくないIPからのアクセスを止められます。

FTPのアクセス制限:

社内の特定のIPアドレスからしかFTPが使えないように設定します。
これは、誰でも会社のファイルを取れるようにしないためです。
例:「社内の経理部のPCからだけFTPサーバーにアクセスできる」という設定です。

例:新規取引先の追加:

新しい協力会社のIPアドレスを許可リストに追加します。
例:「〇〇商事のIPアドレス:192.168.1.100からのアクセスを許可する」という設定です。

例:攻撃への対応:

不審なメールを大量に送ってくるIPをブロックできます。
例:「1分間に100通以上のメールを送ってきたIPアドレスを自動的にブロックする」という設定です。

ロードバランサー

アクセスの振り分け機能:

複数のサーバーにアクセスを分散します
例えば、100人のアクセスを2台のサーバーに50人ずつ振り分けるような感じです

負荷対策機能:

アクセスが多すぎる時は、Sorryサーバーに転送します
例:「1分間に1000アクセス以上きたら、Sorryページに転送する」という設定です

IPS(侵入防止システム)

ロードバランサーを通過したリクエストは、次に IPS(侵入防止システム) でさらにチェックされます。IPSは、攻撃的なリクエストや不正なアクセス を検出してブロックします。

例:
SQLインジェクションなどの攻撃を検出した場合、IPSがそのリクエストを遮断します。

WEBサーバ

WEBサーバの基本的な仕組み

静的コンテンツの配信の仕組み:

ブラウザでアクセスすると、Apacheが「DocumentRoot」という場所からファイルを探します
例えば:

DocumentRootが「/var/www/html」の場合
「http://example.com/images/logo.png」にアクセスすると
「/var/www/html/images/logo.png」というファイルが返されます

動的コンテンツの仕組み:

PHPなどのプログラムと連携して動作します。
例えば:

ブログの記事ページにアクセスすると
PHPプログラムがデータベースから記事を取得して
HTMLを作成して返してくれます。

Apacheの主な設定:

httpd.confファイルの設定:

apacheCopyDocumentRoot "/var/www/html"
ServerName www.example.com
Listen 80
これは、「このサーバーは80番ポートで待ち受けて、ファイルは/var/www/htmlから探すよ」という設定です。

.htaccessによる設定:

apacheCopy# HTTPSへリダイレクト
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
これは、「HTTPでアクセスされたら、HTTPSに転送するよ」という設定です。
実際の動作例を説明させていただきます:

画像ファイルへのアクセス:

ブラウザ:http://example.com/images/logo.png にアクセス
Apache:/var/www/html/images/logo.png を探す
見つかったら:ファイルを返す
見つからなかったら:404エラーを返す

ブログページへのアクセス:

ブラウザ:http://example.com/blog/123 にアクセス
Apache:PHPプログラムに処理を依頼
PHPプログラム:データベースから記事ID:123の内容を取得
PHPプログラム:HTMLを作成
Apache:作成されたHTMLをブラウザに返す

APサーバ(アプリケーションサーバ)

WEBサーバが動的な処理が必要な場合、APサーバにリクエストを転送します。APサーバは、ビジネスロジックを処理し、必要なデータをDBサーバから取得します。

例:
検索機能を呼び出し、ユーザーが要求したデータ(検索結果)をAPサーバが取得して処理します。

DBサーバ

APサーバがDBサーバ(データベースサーバ)に対して、必要なデータの問い合わせを行います。DBサーバは、データを検索し、結果をAPサーバに返します。

例:
MySQLやPostgreSQLなどのDBに対して、SELECT * FROM books WHERE title LIKE 'Java'; といったクエリを発行します。

レスポンスをブラウザに返す

最終的に、APサーバが得たデータをWEBサーバがHTMLに変換し、レスポンスをブラウザに返します。
この段階で、ブラウザが表示するページが完成します。

-仕事