ポートベースの仮想ホストを設定していきます。
ポートベースでは、IPアドレスは同じとし、ポート番号だけでリクエストを振り分けて、表示するWebページを切り替えます。
今回は以下2つの仮想ホストを作成します。

  • 172.16.0.10:80
  • 172.16.0.10:81

それぞれの仮想ホストに届いたリクエストに対し、それぞれ異なるレスポンスを返すようにします。

テストページ作成

まずは仮想ホストごとにテストページを作成しましょう。
ドキュメントルートには以下を指定するものとします。

仮想ホスト ドキュメントルート
172.16.0.10:80 /var/www/html/
172.16.0.10:81 /var/www/public_html/
# cd /var/www/html/
# vi index.html
<html>
<head><title>テストページ1</title></head>
<body>
<p>テストページ1(Port:80)</p>
</body>
</html>
# cd /var/www/public_html/
# vi index.html
<html>
<head><title>テストページ2(Port:81)</title></head>
<body>
<p>テストページ2(Port:81)</p>
</body>
</html>

httpd.confの編集

ポートベースの仮想ホストを設定します。

# cd /etc/httpd/conf
# vi httpd.conf
Listen 80
Listen 81
NameVirtualHost 172.16.0.10:80
NameVirtualHost 172.16.0.10:81

<VirtualHost 172.16.0.10:80>
    DocumentRoot /var/www/html
    ServerName www.sample.com:80
</VirtualHost>
<VirtualHost 172.16.0.10:81>
    DocumentRoot /var/www/public_html
    ServerName www.sample.com:81
</VirtualHost>

まず、「Listen」ディレクティブにはApacheが待ち受けるポート番号を指定します。今回は80番、81番の2つのポートで待ち受けることにするため、2つ設定します。

次に「NameVirtualHost」ディレクティブを設定します。これは「名前ベースの仮想ホストを使用する」という宣言です。「172.16.0.10:80」と「172.16.0.10:81」の2つを宣言しています。(「ポートベースの仮想ホスト」の実体は名前解決を行なわない「名前ベースの仮想ホスト」ということです。)

「VirtualHost」セクションコンテナを使い、仮想ホストごとに個別の設定を行ないます。
Apacheは、リクエストヘッダーに含まれるHostフィールドを参照し、「VirtualHost」と一致するブロックを探します。一致したブロックが見つかった場合にはそのブロック内の設定が適用されます。

設定を反映させるため、Apacheを再起動します。

# service httpd restart
Stopping httpd:                                  [  OK  ]
Starting httpd:                                  [  OK  ]

以上で「httpd.conf」の設定は完了です。

ファイアウォール設定

今回は81番ポートも使用するため、ファイアウォールの設定も適宜変更します。ここでは前回の記事で設定した状態からの編集方法を記述します。

# iptables -I INPUT 6 -p tcp --dport 81 -j ACCEPT

上記で外部からの接続に81も許可しています。

続いて、設定を保存します。

# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

最後にiptablesの状態を確認します。

# service iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
6    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:81
7    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

Webページを表示する

これで準備が整いました。早速、テストページを表示させてみます。

クライアントパソコンからブラウザを起動し、アドレスバーにURLを入力し、Enterキーを押してください。

「http://172.16.0.10/」にアクセスしたときは以下のテストページが表示されます。
テストページ1

「http://172.16.0.10:81」にアクセスしたときは以下のテストページが表示されます。
テストページ2

それぞれ別のWebページが表示されれば成功です。