目次:クリックでジャンプ
ブラウザのリクエスト
ブラウザで「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に変換し、レスポンスをブラウザに返します。
この段階で、ブラウザが表示するページが完成します。