「Apache - 仮想ホスト」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
編集の要約なし
 
9行目: 9行目:
<br>
<br>
IPベースの仮想ホストを割り当てる場合には、VirtualHostを使う。<br>
IPベースの仮想ホストを割り当てる場合には、VirtualHostを使う。<br>
<syntaxhighlight lang="apache">
  <VirtualHost IPアドレス1:ポート番号>
  <VirtualHost IPアドレス1:ポート番号>
     ...
     ...
18行目: 19行目:
     ...
     ...
  </VirtualHost>
  </VirtualHost>
</syntaxhighlight>
<br>
<br>
より具体的に記載する。
より具体的に記載する。
25行目: 27行目:
1つのApacheで2つのホストに対する設定を行う場合は、httpd.confファイルに次のように記述する。<br>
1つのApacheで2つのホストに対する設定を行う場合は、httpd.confファイルに次のように記述する。<br>
Apache2.2以降では、httpd.confではなく、http-vhosts.confに記述する。詳細は、下記の名前ベースの仮想ホストを参照すること。<br>
Apache2.2以降では、httpd.confではなく、http-vhosts.confに記述する。詳細は、下記の名前ベースの仮想ホストを参照すること。<br>
<syntaxhighlight lang="apache">
  <VirtualHost 192.168.1.5:80>
  <VirtualHost 192.168.1.5:80>
     ServerName    www.adminweb.jp
     ServerName    www.adminweb.jp
40行目: 43行目:
     ErrorLog      logs/officepro.error.log
     ErrorLog      logs/officepro.error.log
  </VirtualHost>
  </VirtualHost>
</syntaxhighlight>
<br>
<br>
IPアドレス毎に必要な設定を記述する。<br>
IPアドレス毎に必要な設定を記述する。<br>
71行目: 75行目:
リクエストに含まれるHostsヘッダを参照し、ServerNameと一致するブロックを探す。<br>
リクエストに含まれるHostsヘッダを参照し、ServerNameと一致するブロックを探す。<br>
一致したブロックが見つかった場合にはそのブロック内の設定が適用される。<br>
一致したブロックが見つかった場合にはそのブロック内の設定が適用される。<br>
<syntaxhighlight lang="apache">
  <VirtualHost IPアドレス:ポート番号>
  <VirtualHost IPアドレス:ポート番号>
     ServerName  wwww.adminweb.jp
     ServerName  wwww.adminweb.jp
80行目: 85行目:
     ....
     ....
  </VirtualHost>
  </VirtualHost>
</syntaxhighlight>
<br>
<br>
より具体的に記載する。<br>
より具体的に記載する。<br>
85行目: 91行目:
それぞれに対するアクセスがあった場合に、別の動作をさせたい場合には次のように設定する。<br>
それぞれに対するアクセスがあった場合に、別の動作をさせたい場合には次のように設定する。<br>
<br>
<br>
'''※注意'''<br>
<u>※注意</u><br>
'''下記で、*:80となっている箇所は、192.168.1.5:80と明示的にIPアドレスを指定しても構わない。'''<br>
<u>下記で、*:80となっている箇所は、192.168.1.5:80と明示的にIPアドレスを指定しても構わない。</u><br>
<syntaxhighlight lang="apache">
  NameVirtualHost *:80
  NameVirtualHost *:80
   
   
104行目: 111行目:
     ErrorLog      logs/officepro.error.log
     ErrorLog      logs/officepro.error.log
  </VirtualHost>
  </VirtualHost>
</syntaxhighlight>
<br>
<br>
===== DNSの設定 =====
===== DNSの設定 =====
118行目: 126行目:
httpd.confファイルでhttpd-vhosts.confを検索する。(デフォルトでは474行目付近に記述がある)<br>
httpd.confファイルでhttpd-vhosts.confを検索する。(デフォルトでは474行目付近に記述がある)<br>
Includeの先頭に記述されている#を外して、httpd-vhosts.confを読み込むように設定する。<br>
Includeの先頭に記述されている#を外して、httpd-vhosts.confを読み込むように設定する。<br>
<syntaxhighlight lang="apache">
  # 変更前
  # 変更前
  # Virtual hosts
  # Virtual hosts
125行目: 134行目:
  # Virtual hosts
  # Virtual hosts
  Include conf/extra/httpd-vhosts.conf
  Include conf/extra/httpd-vhosts.conf
</syntaxhighlight>
<br>
<br>
次に、httpd-vhosts.confファイルを編集する。(Apacheをインストールしたディレクトリ¥conf¥extraにある)<br>
次に、httpd-vhosts.confファイルを編集する。(Apacheをインストールしたディレクトリ¥conf¥extraにある)<br>
130行目: 140行目:
ここでは、次のように記述を変更する。<br>
ここでは、次のように記述を変更する。<br>
<br>
<br>
<span style="color:#C00000">
<u>※注意</u><br>
'''※注意'''<br>
<u>httpd-vhosts.confファイルは、Includeによってhttpd.confファイル内に読み込まれる。</u><br>
'''httpd-vhosts.confファイルは、Includeによってhttpd.confファイル内に読み込まれる。'''<br>
<u>そのため、上記でログのフォーマット名に指定しているcommonは、httpd.confファイル内で定義されたcommonフォーマットが利用される。</u><br>
'''そのため、上記でログのフォーマット名に指定しているcommonは、httpd.confファイル内で定義されたcommonフォーマットが利用される。'''<br>
<syntaxhighlight lang="apache">
</span>
  # 変更前
  # 変更前
  NameVirtualHost *:80
  NameVirtualHost *:80
173行目: 182行目:
     ErrorLog logs/officepro.error.log
     ErrorLog logs/officepro.error.log
  </VirtualHost>
  </VirtualHost>
</syntaxhighlight>
<br>
<br>
また、上記で設定したドキュメントルートをそれぞれ作り、別々のHTMLファイルを置く。<br>
また、上記で設定したドキュメントルートをそれぞれ作り、別々のHTMLファイルを置く。<br>
<br>
<br>
最後に、httpd.confファイルにて、この2つのドキュメントルートに対して適切なアクセス許可を設定する。<br>
最後に、httpd.confファイルにて、この2つのドキュメントルートに対して適切なアクセス許可を設定する。<br>
<syntaxhighlight lang="apache">
  <Directory "/var/www/html/adminweb_docs">
  <Directory "/var/www/html/adminweb_docs">
     Order allow,deny
     Order allow,deny
186行目: 197行目:
     Allow from all
     Allow from all
  </Directory>
  </Directory>
</syntaxhighlight>
<br>
<br>
これで準備は完了である。<br>
まず、http://www.adminweb.jp/ にアクセスする。<br>
まず、http://www.adminweb.jp/ にアクセスする。<br>
www.adminweb.jp用のドキュメントルートに含まれるHTMLファイルが表示されることを確認する。<br>
www.adminweb.jp用のドキュメントルートに含まれるHTMLファイルが表示されることを確認する。<br>
<br>
次に、http://www.officepro.jp/ にアクセスする。<br>
次に、http://www.officepro.jp/ にアクセスする。<br>
www.officepro.jp用のドキュメントルートに含まれるHTMLファイルが表示されることを確認する。<br>
www.officepro.jp用のドキュメントルートに含まれるHTMLファイルが表示されることを確認する。<br>
205行目: 217行目:
<br>
<br>
それに対して、仮想ホストの設定が、www.adminweb.jpとwww.officepro.jpにしか行われていなかったとする。<br>
それに対して、仮想ホストの設定が、www.adminweb.jpとwww.officepro.jpにしか行われていなかったとする。<br>
<syntaxhighlight lang="apache">
  NameVirtualHost *:80
  NameVirtualHost *:80
   
   
222行目: 235行目:
     ErrorLog logs/officepro.error.log
     ErrorLog logs/officepro.error.log
  </VirtualHost>
  </VirtualHost>
</syntaxhighlight>
<br>
<br>
この時、http://localhost/ に対してアクセスがあった場合、最初に登録されている仮想ホストの設定がデフォルトとして適用される。<br>
この時、http://localhost/ に対してアクセスがあった場合、最初に登録されている仮想ホストの設定がデフォルトとして適用される。<br>
232行目: 246行目:
<br>
<br>
http://localhost/ に対するアクセスをwww.officepro.jpの設定が適用されるように、www.officepro.jpに別名としてlocalhostを登録する。<br>
http://localhost/ に対するアクセスをwww.officepro.jpの設定が適用されるように、www.officepro.jpに別名としてlocalhostを登録する。<br>
<syntaxhighlight lang="apache">
  NameVirtualHost *:80
  NameVirtualHost *:80
   
   
250行目: 265行目:
     ErrorLog logs/officepro.error.log
     ErrorLog logs/officepro.error.log
  </VirtualHost>
  </VirtualHost>
<br>
</syntaxhighlight>
これで設定は完了である。<br>
<br>
<br>
Apacheを再起動して、http://localhost/ にアクセスする。<br>
Apacheを再起動して、http://localhost/ にアクセスする。<br>
エイリアスで設定が行われたwww.officepro.jpの設定が適用されていることを確認する。<br>
エイリアスで設定が行われた www.officepro.jp の設定が適用されていることを確認する。<br>
<br><br>
<br><br>



2025年1月5日 (日) 22:15時点における最新版

概要

1台のサーバを使って複数のドメイン名を使ったWebサーバとしての機能を提供する方法を記載する。
サーバが複数のインターフェースを持っていて、IPアドレスが複数割り当て可能な場合と、1つのIPアドレスでホスト名を見て振り分ける方法がある。


IPベースの仮想ホスト

IPベースとは、1台のサーバに複数のネットワークインターフェースカード(NIC)が付いていて別々のIPアドレスを持っている場合に、
それぞれのIPアドレスに対して仮想ホストを割り当てる。

IPベースの仮想ホストを割り当てる場合には、VirtualHostを使う。

 <VirtualHost IPアドレス1:ポート番号>
    ...
    ,,,
 </VirtualHost>
 
 <VirtualHost IPアドレス2:ポート番号>
    ...
    ...
 </VirtualHost>


より具体的に記載する。 例として、192.168.1.5と192.168.1.6という2つのIPアドレスが割り当てられているとする。
そして、DNSに対して、wwww.adminweb.jpを192.168.1.5に、www.officepro.jpを192.168.1.6を登録する。

1つのApacheで2つのホストに対する設定を行う場合は、httpd.confファイルに次のように記述する。
Apache2.2以降では、httpd.confではなく、http-vhosts.confに記述する。詳細は、下記の名前ベースの仮想ホストを参照すること。

 <VirtualHost 192.168.1.5:80>
    ServerName     www.adminweb.jp
    ServerAdmin    hogehoge@adminweb.jp
    DocumentRoot   "/var/www/html/adminweb_docs"
    CustomLog      logs/adminweb.access.log common
    ErrorLog       logs/adminweb.error.log
 </VirtualHost>
 
 <VirtualHost 192.168.1.6:80>
    ServerName     www.officepro.jp
    ServerAdmin    hogehoge@officepro.jp
    DocumentRoot   "/var/www/html/officepro_docs"
    CustomLog      logs/officepro.access.log common
    ErrorLog       logs/officepro.error.log
 </VirtualHost>


IPアドレス毎に必要な設定を記述する。
例えば、www.adminweb.jpにアクセスがあった場合は、192.168.1.5に記述された設定が有効となるため、
ドキュメントルート/var/www/html/adminweb_docs直下にあるコンテンツが返される。

VirtualHostごとに個別の設定を記述できるので、必要な設定を記述しておく。
最低限上記に記述したようなServerNameやDocumentRoot、そしてログ関係は個別に設定する。
その他の設定は、共通した設定にしても構わない。

その他にも各ドキュメントルートへのアクセス権限の設定などが必要である。
実際の設定例は、名前ベースの仮想ホストを参照する。


名前ベースの仮想ホスト

名前ベースの仮想ホストは、1つのIPアドレスで、クライアントからのリクエストに含まれるHostsヘッダを見てどのホストへアクセスするのかを判断する。

Apacheの設定

まず、アクセス先のIPアドレスに対して、名前ベースの仮想ホストを設定していることを表すために、NameVirtualHostを設定する。
IPアドレスを固定で指定するか、または1つだけしかIPアドレスが無い場合には*を記述しても構わない。
*は、サーバに対する全てのIPアドレスと言う意味になる。

# 記述方法
NameVirtualHost IPアドレス:ポート番号

# 実際の設定例
NameVirtualHost 192.168.1.5:80
または
NameVirtualHost *:80


次に、VirtualHostを使用して、ServerNameごとに個別の設定を記述する。
リクエストに含まれるHostsヘッダを参照し、ServerNameと一致するブロックを探す。
一致したブロックが見つかった場合にはそのブロック内の設定が適用される。

 <VirtualHost IPアドレス:ポート番号>
    ServerName   wwww.adminweb.jp
    ....
 </VirtualHost>
 
 <VirtualHost IPアドレス:ポート番号>
    ServerName   www.officepro.jp
    ....
 </VirtualHost>


より具体的に記載する。
wwww.adminweb.jpとwww.officepro.jpの2つのホストに対して、192.168.1.5が割り当てられているとする。
それぞれに対するアクセスがあった場合に、別の動作をさせたい場合には次のように設定する。

※注意
下記で、*:80となっている箇所は、192.168.1.5:80と明示的にIPアドレスを指定しても構わない。

 NameVirtualHost *:80
 
 <VirtualHost *:80>
    ServerName     www.adminweb.jp
    ServerAdmin    hogehoge@adminweb.jp
    DocumentRoot   "/var/www/html/adminweb_docs"
    CustomLog      logs/adminweb.access.log common
    ErrorLog       logs/adminweb.error.log
 </VirtualHost>
 
 <VirtualHost *:80>
    ServerName     www.officepro.jp
    ServerAdmin    hogehoge@officepro.jp
    DocumentRoot   "/var/www/html/officepro_docs"
    CustomLog      logs/officepro.access.log common
    ErrorLog       logs/officepro.error.log
 </VirtualHost>


DNSの設定

まず、2つのホストに関するDNSの登録を行う。
ここでは、DNSの代わりにhostsファイルに次の記述を行う。
(hostsファイルについては、ホスト名によるアクセス設定(hostsファイル)を参照すること)

127.0.0.1       www.adminweb.jp
127.0.0.1       www.officepro.jp


次に、httpd.confファイルを設定する。
仮想ホストに関する設定はApache2.2以降では、httpd-vhosts.confファイルに記述する。

まず、httpd-vhosts.confファイルを有効にする。
httpd.confファイルでhttpd-vhosts.confを検索する。(デフォルトでは474行目付近に記述がある)
Includeの先頭に記述されている#を外して、httpd-vhosts.confを読み込むように設定する。

 # 変更前
 # Virtual hosts
 #Include conf/extra/httpd-vhosts.conf
 
 # 変更後
 # Virtual hosts
 Include conf/extra/httpd-vhosts.conf


次に、httpd-vhosts.confファイルを編集する。(Apacheをインストールしたディレクトリ¥conf¥extraにある)
次のような記述がサンプルとして記述されている。(コメント行は省略している)
ここでは、次のように記述を変更する。

※注意
httpd-vhosts.confファイルは、Includeによってhttpd.confファイル内に読み込まれる。
そのため、上記でログのフォーマット名に指定しているcommonは、httpd.confファイル内で定義されたcommonフォーマットが利用される。

 # 変更前
 NameVirtualHost *:80
 
 <VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.localhost
    DocumentRoot /www/docs/dummy-host.localhost
    ServerName dummy-host.localhost
    ServerAlias www.dummy-host.localhost
    ErrorLog logs/dummy-host.localhost-error_log
    CustomLog logs/dummy-host.localhost-access_log common
 </VirtualHost>
 
 <VirtualHost *:80>
    ServerAdmin webmaster@dummy-host2.localhost
    DocumentRoot /www/docs/dummy-host2.localhost
    ServerName dummy-host2.localhost
    ErrorLog logs/dummy-host2.localhost-error_log
    CustomLog logs/dummy-host2.localhost-access_log common
 </VirtualHost>
 
 # 変更後
 NameVirtualHost *:80
 
 <VirtualHost *:80>
    ServerAdmin dumy@adminweb.jp
    DocumentRoot "D:/Apache Group/Apache2.2/adminweb_docs"
    ServerName www.adminweb.jp
    CustomLog logs/adminweb.access.log common
    CustomLog logs/adminweb.error.log
 </VirtualHost>
 
 <VirtualHost *:80>
    ServerAdmin dumy@officepro.jp
    DocumentRoot "D:/Apache Group/Apache2.2/officepro_docs"
    ServerName www.officepro.jp
    CustomLog logs/officepro.access.log common
    ErrorLog logs/officepro.error.log
 </VirtualHost>


また、上記で設定したドキュメントルートをそれぞれ作り、別々のHTMLファイルを置く。

最後に、httpd.confファイルにて、この2つのドキュメントルートに対して適切なアクセス許可を設定する。

 <Directory "/var/www/html/adminweb_docs">
    Order allow,deny
    Allow from all
 </Directory>
 
 <Directory /var/www/html/officepro_docs">
    Order allow,deny
    Allow from all
 </Directory>


まず、http://www.adminweb.jp/ にアクセスする。
www.adminweb.jp用のドキュメントルートに含まれるHTMLファイルが表示されることを確認する。

次に、http://www.officepro.jp/ にアクセスする。
www.officepro.jp用のドキュメントルートに含まれるHTMLファイルが表示されることを確認する。

このように、1つのIPアドレスとApacheを使用して、複数のドメインを使ったホストに対して別々のページを返すことが出来るようになる。


仮想ホストのエイリアスの設定

名前ベースの仮想ホストの設定が行われている時に、登録されてないホスト名でのアクセスがあった場合を考える。

例えば、DNS(またはhostsファイル)にて以下の設定がされていたとする。

127.0.0.1     localhost
127.0.0.1     www.adminweb.jp
127.0.0.1     www.officepro.jp


それに対して、仮想ホストの設定が、www.adminweb.jpとwww.officepro.jpにしか行われていなかったとする。

 NameVirtualHost *:80
 
 <VirtualHost *:80>
    ServerAdmin dumy@adminweb.jp
    DocumentRoot "/var/www/html/adminweb_docs"
    ServerName www.adminweb.jp
    CustomLog logs/adminweb.access.log common
    CustomLog logs/adminweb.error.log
 </VirtualHost>
 
 <VirtualHost *:80>
    ServerAdmin dumy@officepro.jp
    DocumentRoot "/var/www/html/officepro_docs"
    ServerName www.officepro.jp
    CustomLog logs/officepro.access.log common
    ErrorLog logs/officepro.error.log
 </VirtualHost>


この時、http://localhost/ に対してアクセスがあった場合、最初に登録されている仮想ホストの設定がデフォルトとして適用される。

このような場合、仮想ホストの設定が行われていないホストに対して、デフォルト以外のホストの設定を適用させることが可能である。
ServerAliasを使用して、仮想ホストの設定に別名として登録する。
複数のホスト名を登録したい場合は、空白で区切って続けて記述する。

# 記述方法
ServerAlias ホスト名1 ホスト名2 ...


http://localhost/ に対するアクセスをwww.officepro.jpの設定が適用されるように、www.officepro.jpに別名としてlocalhostを登録する。

 NameVirtualHost *:80
 
 <VirtualHost *:80>
    ServerAdmin dumy@adminweb.jp
    DocumentRoot "/var/www/html/adminweb_docs"
    ServerName www.adminweb.jp
    CustomLog logs/adminweb.access.log common
    CustomLog logs/adminweb.error.log
 </VirtualHost>
 
 <VirtualHost *:80>
    ServerAdmin dumy@officepro.jp
    DocumentRoot "/var/www/html/officepro_docs"
    ServerName www.officepro.jp
    ServerAlias localhost
    CustomLog logs/officepro.access.log common
    ErrorLog logs/officepro.error.log
 </VirtualHost>


Apacheを再起動して、http://localhost/ にアクセスする。
エイリアスで設定が行われた www.officepro.jp の設定が適用されていることを確認する。