Rainbow Planet (GT×IT×SP×SA)

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

01_IT技術 (Technology)

一つの物理サーバに複数のIPアドレスやドメインを設定する方法~Apacheの仮想ホストの種類や設定方法

投稿日:

(0)目次&概説

(1) 記事の目的
 (1-1) 目的
 (1-2) 前提条件
(2) Apacheの仮想ホストとは?
(3) IPベース仮想ホスト
 (3-1) 方式の概要
 (3-2) 設定方法
  (3-2-1) リッスンポートの設定
  (3-2-2) 仮想ホストの設定
  (3-2-3) コンテンツの作成/配置
  (3-2-4) ファイアウォール設定
  (3-2-5) 疎通テスト
(4) 名前ベース仮想ホスト
 (4-1) 方式の概要
 (4-2) 設定方法
  (4-2-1) リッスンポートの設定
  (4-2-2) 仮想ホストの設定
  (4-2-3) コンテンツの作成/配置
  (4-2-4) ファイアウォール設定
  (4-2-5) 疎通テスト
(5) 参考:Apacheのディレクトリ構造

(1) 記事の目的

1台のサーバにて複数のウェブサイトをホストする際に利用される技術であるApacheの「仮想ホスト」についての基礎知識や基本設定方法について理解すること。

目次にもどる

(2) Apacheの仮想ホストとは?

・単一サーバ(1台)で複数ドメイン(≒複数ウェブサイト)をホストするためのApacheの機能を「仮想ホスト」と呼んでいます。
・この機能によりサーバの管理・運用負荷などを削減する事が可能です。
・”Virtual Host”はApacheの用語で、競合技術のNginxなどでは「Server Blocks」と呼ばれています。
・仮想ホストには「IPベース」と「名前ベース」の2種類の方式があり、それぞれの内容について3章と4章にて記述します。

目次にもどる

(3) IPベース仮想ホスト

(3-1) 方式の概要

・1台のApache物理サーバに複数のIPアドレスを割り当てて、IPアドレス毎に異なるドメインを処理を担当します。
(図311)

・物理サーバに複数のIPアドレスを持たせる方法としては「方法①:物理サーバは2つのイーサネットカードを持ち、それぞれにIPアドレスが割り振られている(物理的に複数)」か「方法②:IPエイリアシング等の手法を用いて仮想的に複数のIPアドレスを持つ(仮想的に複数)」などして、IP毎に異なるWebサイトをホストします。

(参考)IPエイリアシング
・一つのホストで複数のIPを持つためには「IPエイリアシング」という技術を使います。
・この技術を用いると1つのネットワークインタフェースに複数のIPアドレスを紐付ける事ができます。
・特にNIC(LANを指すポートが付いてる部品)が一つしか無い場合に効力を発揮します。

目次にもどる

(3-2) 設定方法

本来はIPエイリアシング(IP Aliasing) 等で物理サーバに対して複数のIPアドレスを付与しますが、今回はもう少し簡易的な方式で「IPアドレス×ポート」の単位で一意となるようにします。つまり、IPアドレスは同じだが異なるポートに対して、それぞれ異なる仮想ホスト(≒ウェブサイト)を割り当てる方法を試した結果をご紹介します。

今回の構造は(図320)のようになっており、1つのIPアドレスと2つのポート(8080、8081)で2通りの組み合わせを作り、それぞれに対して別のウェブサイトをホストさせています。

(図320)

(3-2-1) リッスンポートの設定

Apacheの設定ファイルにてリッスンするポートを設定します。今回は8080、8081ポートを利用するため、そのための記載を追記します。

①設定ファイル(httpd.conf)を編集

cd /etc/httpd/conf/
vi httpd.conf

(図321)①
※下図は既にcd後にpwdで現在ディレクトリを確認しており、上記と若干異なります。

②設定を追記

Listen 8080
Listen 8081

(図321)②

目次にもどる

(3-2-2) 仮想ホストの設定

仮想ホストを作るためには「/etc/httpd/conf.d/」ディレクトリ配下に「.conf」の拡張子を持った任意の名前のconfファイルを作成し、そこに仮想ホストの情報を追記していきます。

ちなみに、デフォルトではconfファイルは「/etc/httpd/conf.d/」に配置する設定になっていますが、これは「/etc/httpd/conf/httpd.conf」内でそこのディレクトリに置いた設定ファイルを読み込むよう定義していて、そこに別のパスも読み込むよう設定を追記すればご自身のカスタムディレクトリにconfファイルを配置して有効化させる事もできます。

①viエディタで設定ファイル編集

cd /etc/httpd/conf.d/
vi [Your File Name].conf

(図322)①
※下図は既にcd後にpwdで現在ディレクトリを確認しており、上記と若干異なります。

②仮想ホストの設定を追記

<VirtualHost *:8080>
ServerName rainbow-planet-t1.xyz
DocumentRoot /var/www/rainbow-planet-t1.xyz/
ServerAdmin yazaki.tatsuya.0813@gmail.com
ErrorLog /var/log/httpd/rainbow-planet-t1-error_log
CustomLog /var/log/httpd/rainbow-planet-t1-access_log combined
</VirtualHost>

<Directory /var/www/rainbow-planet-t1.xyz>
        Require all granted
</Directory>

<VirtualHost *:8081>
ServerName rainbow-planet-t2.xyz
DocumentRoot /var/www/rainbow-planet-t2.xyz/
ServerAdmin yazaki.tatsuya.0813@gmail.com
ErrorLog /var/log/httpd/rainbow-planet-t2-error_log
CustomLog /var/log/httpd/rainbow-planet-t2-access_log combined
</VirtualHost>

<Directory /var/www/rainbow-planet-t2.xyz>
        Require all granted
</Directory>

(図322)②

目次にもどる

(3-2-3) コンテンツの作成/配置

実際のコンテンツ(フォルダ構成やページのhtmlファイル)を作成していきます。

①ウェブサイトのROOTフォルダの作成
作成するディレクトリは「仮想ホストファイル」にて設定した「DocumentRoot」のパスを指定します。
(構文)

mkdir [DocumentRoot Directory]

(例)1つ目の仮想ホストのROOTディレクトリを作ります。

mkdir /var/www/rainbow-planet-t1.xyz/

(図323)①

②htmlファイルの配置
ウェブサイトの最初のページとなるindex.htmlを作成し、そこに簡単なHTMLを記述します。

(図323)②
・ウェブサイト①

・ウェブサイト②

③パーミッション設定/設定反映
作成したディレクトリ配下に対して権限を付与し「apachectl restart」コマンドで設定を反映させます。

(図323)③

(3-2-4) ファイアウォール設定

今回はポート8080・8081を利用しているため、そのポートの外部アクセスを許可する設定に変更する必要があります。

①ポートのアクセス許可設定

$ sudo firewall-cmd --zone=public --add-port=8080/tcp  --permanent
$ sudo firewall-cmd --zone=public --add-port=8081/tcp  --permanent


②設定反映

$ sudo firewall-cmd --reload

(図324)

目次にもどる

(3-2-5) 疎通テスト

ブラウザに「http://[IP Address]:[Port]」と入力して、疎通確認を行います。もし正常に処理されると、作成した「index.html」の内容が表示されます。ポート「8080」と「8081」とで異なるページが表示されれば疎通成功です。

(図325)

目次にもどる

(4) 名前ベース仮想ホスト

(4-1) 方式の概要

・「名前ベース」は「IP1つ」:「ドメイン複数」が紐づきます。
・実現方法のポイントとして、クライアントのHTTPリクエストヘッダに含まれる「ホスト名」の情報を利用する事で、複数ドメインで1つのIPを共有する事を可能にしています(どのドメインへの要求かを判断する)
・IPv4のアドレスが枯渇している背景もあり、複数のIPアドレスを使うIPベースよりも、一つのIPで複数ウェブサイトをホスト出来る名前ベースの方が、主流として利用されています。
・Apacheがリクエストを受けると、マッチする仮想ホストを探しますが、もしマッチが無い場合は「最初に定義された”VirtualHost”をフォールバック(=異常時に制限付き機能に切り替え)として用います
・「名前ベース」のメリットとして同じIPアドレスで複数のWebサイトを運営できる点です。

(図411)

目次にもどる

(4-2) 設定方法

今回は2つのドメイン「rainbow-planet-t1.xyz」と「rainbow-planet-t2.xyz」を用意し、それぞれが異なるウェブサイトをホストする様に設定します。

(4-2-1) リッスンポートの設定

⇒「不要」
(今回はデフォルトの80番を複数サイトで共有するため、ポート関連の設定は不要)

(4-2-2) 仮想ホストの設定

仮想ホストを作るためには「/etc/httpd/conf.d/」ディレクトリ配下に「.conf」の拡張子を持った任意の名前のconfファイルを作成し、そこに仮想ホストの情報を追記していきます。

IPベースの時は仮想ホスト1号と2号とでポート番号が異なる設定でしたが、今回は両方とも「*:80」で待ち受けるため、1つの「IP×ドメイン」の組合せに対してドメインが2つ紐付く形になっています。

①viエディタで設定ファイル編集

cd /etc/httpd/conf.d/
vi [Your File Name].conf

(図422)①

②仮想ホストの設定を追記

<VirtualHost *:80>
ServerName rainbow-planet-t1.xyz
DocumentRoot /var/www/rainbow-planet-t1.xyz/
ServerAdmin yazaki.tatsuya.0813@gmail.com
ErrorLog /var/log/httpd/rainbow-planet-t1-error_log
CustomLog /var/log/httpd/rainbow-planet-t1-access_log combined
</VirtualHost>

<Directory /var/www/rainbow-planet-t1.xyz>
        Require all granted
</Directory>

<VirtualHost *:80>
ServerName rainbow-planet-t2.xyz
DocumentRoot /var/www/rainbow-planet-t2.xyz/
ServerAdmin yazaki.tatsuya.0813@gmail.com
ErrorLog /var/log/httpd/rainbow-planet-t2-error_log
CustomLog /var/log/httpd/rainbow-planet-t2-access_log combined
</VirtualHost>

<Directory /var/www/rainbow-planet-t2.xyz>
        Require all granted
</Directory>

 

(図422)②

(4-2-3) コンテンツの作成/配置

⇒IPベースと同じ手順
※「(3-2-3) コンテンツの作成/配置」を参照

(4-2-4) ファイアウォール設定

⇒「不要」
(今回はデフォルトの80番を複数サイトで共有するため、ポート関連の設定は不要)

(4-2-5) 疎通テスト

ブラウザに「http://[Domain Name]」と入力して、疎通確認を行います。もし正常に処理されると、作成した「index.html」の内容が表示されます。2つのドメインで異なるページが表示されれば疎通成功です。

目次にもどる

(5) 参考:Apacheのディレクトリ構造

Apacheの主要なディレクトリ構造です。

ディレクトリ 説明
/  
―∟etc
――∟httpd
―――∟conf
――――∟httpd.conf Apache設定ファイルで大きく分けて3つの大項目に関する設定が行えます。
・Section 1:グローバル環境
Apache全般に影響する設定項目のセクション。例えば同時接続数の設定や各種設定ファイルの格納場所など。
・Section 2:メインサーバ設定
メインサーバに関する設定のセクションです。メインサーバは仮想サーバが処理するリクエスト以外のものを全て処理するサーバです。またメインサーバの設定値は仮想サーバを作る時のデフォルト値にもなります。
・Section 3:仮想ホスト設定
仮想ホストに関する設定です。
―――∟conf.d Apacheの個別設定ファイルが格納されています。リバースプロキシや仮想ホストなど、用途に応じてご自身で命名したファイルを配備して設定を行います。
(例)
①r_proxy.conf
リバースプロキシの設定用ファイルです。
②welcome.conf
デフォルトページが存在しない場合のウェルカムページの設定用ファイル。
③[YourIP].conf
仮想ホストの設定用ファイルです。
―――∟conf.modules.d ・ロードするモジュールを定義したファイル(例:00-proxy.conf)等が格納されている
――∟logrotate.d ・ログファイル管理に関する設定ファイルが格納されています。
・ログの最小化やバックアップ、新規作成などを行います。
―――∟httpd ・logrotate.dの中の「httpd」がApache用のログファイル設定になります。
(例)
/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
}
―∟var
――∟log
―――∟httpd ・ログの出力先ディレクトリです。
――∟www ・各コンテンツのROOTディレクトリ(コンテンツのトップディレクトリ)のフォルダを作成、配置します
―――∟cgi-bin ・cgiプログラム用
―――∟html ・htmlファイルの格納用ディレクトリ

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-01_IT技術 (Technology)

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

JSP/Servletで画面毎のアクセスカウンターを作成してみた(パート2:ソース解説編)

(1) 仕様について (2) ソースコード  (2-1) AccessCounter2.java   (2-1-1) サンプルPG   (2-1-2) サンプルPG解説  (2-2) DbConnec …

JavaScriptで外部ファイル(.js)を呼び出す方法+JSPでのサンプルプログラムも紹介

<目次> (1) JavaScriptで外部ファイル(.js)を呼び出す方法  (1-1) 構文  (1-2) 外部JavaScriptファイル呼び出し手順   (1-2-1) 外部JavaScrip …

PythonのdatapackageとSQLAlchemy、SQLiteを使ってcsvデータをSELECTする

(0)目次&概説 (1) 今回の目的  (1-1) 目的  (1-2) 前提条件 (2) 実施手順  (2-0) 事前作業  (2-1) データ(csv)のロード  (2-2) エンジンの作成  (2 …

CentOS6にVNCServerでリモート接続して日本語入力を可能にする方法

(0)目次&概説 (1) 記事の目的 (2) 日本語化の対応手順  (2-1) ibus系のインストール  (2-2) dbusインストール+エラー回避  (2-3) mocz系パッケージのインストー …

Oracleデータベースのインデックスの有無による速度の差異を検証する

(0)目次&概説 (1) 検証概要 (2) 検証環境 (3) 検証準備  (3-1) サンプルデータ作成(インデックス無)  (3-2) サンプルデータ作成(インデックス有)  (3-3) 実行計画の …

  • English (United States)
  • 日本語
Top