見出し画像

【Linux】 バーチャルホストの設定

バーチャルホストとは

1 台のマシン上で (exmple1.com と exmple2.com のような) 二つ以上のウェブサイトを扱う運用方法のこと。設定はhttpd.conf ファイルで行う。

IP ベース

複数の IP アドレスを公開する Web サーバ毎に使用する。Web サーバ毎に IP アドレス が必要となり、サーバに複数の NIC があり別々の IP アドレスが設定されている場合、複数の IP アドレスを設定しておく必要がある。

NAMEベース

それぞれのホスト名と それに対応する正確な IP アドレスを DNS で設定し、異なる ホスト名を区別する。IPアドレスを直打ちすると、 IPアドレスとマッチする<VirtualHost> の設定がない場合は、IPアドレスのリストの最初にあるバーチャルホスト が使用される。サーバー自体のIPアドレスを直打ちされても、意図したVirtualHost毎にWEBページが表示される。


機器のVer

IP ベースの設定例

<VirtualHost 192.168.10.104:80>
  ServerName    www.example.com
  ServerAdmin   admin@example.com  # 管理者メールアドレス
  DocumentRoot  d:/pg/Apache/Apache24/htdocs_com
  ErrorLog         #エラーログファイル名
  TransferLog      #アクセスログファイル名
</VirtualHost>
# 192.168.10.104 宛のアクセスがあった場合は、ドキュメントルートに設定されている 
# d:/pg/Apache/Apache24/htdocs_com 以下のコンテンツがクライアントへ返される。

<VirtualHost 192.168.10.105:80>
  ServerName    www.example.jp
  ServerAdmin   admin@example.jp  # 管理者メールアドレス
  DocumentRoot  d:/pg/Apache/Apache24/htdocs_jp
  ErrorLog         #エラーログファイル名
  TransferLog      #アクセスログファイル名
</VirtualHost>


# Listen ディレクティブを使用する IP アドレスの数だけ記述し、
# それぞれのドキュメントルートに設定しているディレクトリに対してアクセスを許可する
Listen 192.168.10.104:80
Listen 192.168.10.105:80

<Directory "${SRVROOT}/htdocs_com">
  Require all granted
</Directory>

<Directory "${SRVROOT}/htdocs_jp">
  Require all granted
</Directory>

httpd.conf ファイルを保存し Apache を再起動する。
その後、ドメインに対して IP アドレスを割り当てるが、通常は DNS を使ってそれぞれ A レコードなどを登録する。hosts ファイルに記載することもできる。

# ゾーンファイル
www    IN      A       192.168.10.104
linux  IN      A       192.168.10.105
# hosts ファイル
192.168.10.104  www.example.com
192.168.10.105  www.example.jp

ドメインにアクセスできるかを確認する。


デフォルトのバーチャルホスト

_default_ を代わりに指定すると、デフォルトで使用されるバーチャルホストを設定することができる。

<VirtualHost 192.168.10.104:80>
  ServerName    www.example.com
  ServerAdmin   admin@example.com
  DocumentRoot  d:/pg/Apache/Apache24/htdocs_com
</VirtualHost>

<VirtualHost _default_:80>
  ServerName    www.example.jp
  ServerAdmin   admin@example.jp
  DocumentRoot  d:/pg/Apache/Apache24/htdocs_jp
</VirtualHost>

IP アドレスを指定するところに _default_ を指定することで、 VirtualHost ディレクティブで IP アドレスが定義されていない IP アドレス宛のリクエストがデフォルトで適用される。


NAME ベースの設定例

NameVirtualHost 192.168.0.1:80
( NameVirtualHost *:80 )

NameVirtualHost 192.168.10.104:80

<VirtualHost 192.168.10.104:80>
  ServerName    www.example.com
  ServerAdmin   admin@example.com
  DocumentRoot  d:/pg/Apache/Apache24/htdocs_com
</VirtualHost>

<VirtualHost 192.168.10.104:80>
  ServerName    www.example.jp
  ServerAdmin   admin@example.jp
  DocumentRoot  d:/pg/Apache/Apache24/htdocs_jp
</VirtualHost>

# ドキュメントルートに設定しているディレクトリに対してアクセスを許可
<Directory "${SRVROOT}/htdocs_com">
  Require all granted
</Directory>

<Directory "${SRVROOT}/htdocs_jp">
  Require all granted
</Directory>

httpd.conf ファイルを保存し Apache を再起動する。
その後、ドメインに対して IP アドレスを割り当てるが、通常は DNS を使ってそれぞれ A レコードなどを登録する。hosts ファイルに記載することもできる。

# ゾーンファイル
www    IN      A       192.168.10.104
linux  IN      A       192.168.10.104
# hosts ファイル
192.168.10.104  www.example.com
192.168.10.104  www.example.jp

ドメインにアクセスできるかを確認する。

※1 つの IP アドレスに対して 3 つの Web サーバを割り当てる場合、2つのドメインに対して設定を行い、 3つ目のドメインを設定せずにアクセスが行われた時、VirtualHost ディレクティブの ServerName に設定されているホストと一致するものがないので、httpd.conf ファイルの中で一番最初に書かれている VirtualHost ディレクティブと一致したとみなされるので注意が必要。


その他設定

<VirtualHost _default_:443>
  SSLEngine on  #SSLプロトコルを使用するための設定
  SSLCertificateFile "/etc/pki/tls/certs/example.com.crt"  #証明書の指定
  SSLCertificateKeyFile "/etc/pki/tls/private/example.com.key"  #秘密鍵の指定
  SSLVerifyClient require  #そのWebサイトでのみクライアント認証を行う
  SSLVerifyDepth 1  #検証する証明書の階層の深さを1に設定
  SSLCACertificateFile "/etc/pki/tls/certs/ca-bundle.crt"  #信頼するCA(Certificate Authority)証明書が保存されたファイルを指定
</VirtualHost>
# 複数のドメイン名を指定する
<VirtualHost 192.0.2.1>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example
</VirtualHost>

# ディレクトリへのアクセス制限
<VirtualHost 192.0.2.1>
    ServerName example.com
    DocumentRoot /var/www/example
    <Directory /var/www/example>
        Require all granted
    </Directory>
</VirtualHost>

# リバースプロキシの設定
<VirtualHost 192.0.2.1>
    ServerName example.com
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
</VirtualHost>

# CGIスクリプトの設定
<VirtualHost 192.0.2.1>
    ServerName example.com
    DocumentRoot /var/www/example
    ScriptAlias /cgi-bin/ /var/www/example/cgi-bin/
    <Directory /var/www/example/cgi-bin>
        Options +ExecCGI
        AddHandler cgi-script .cgi .pl
    </Directory>
</VirtualHost>
# パスベースのバーチャルホスト
<VirtualHost 192.0.2.1>
    ServerName example.com
    DocumentRoot /var/www/example
</VirtualHost>

<VirtualHost 192.0.2.1>
    ServerName example.com
    DocumentRoot /var/www/example2
    Alias /other /var/www/example2
</VirtualHost>

# ユーザーディレクトリの設定
<VirtualHost 192.0.2.1>
    ServerName example.com
    DocumentRoot /var/www/example
    <IfModule mod_userdir.c>
        UserDir public_html
        UserDir disabled
    </IfModule>
</VirtualHost>

# SSL証明書の設定
<VirtualHost 192.0.2.1:443>
    ServerName example.com
    DocumentRoot /var/www/example
    SSLEngine on
    SSLCertificateFile /path/to/cert.pem
    SSLCertificateKeyFile /path/to/key.pem
</VirtualHost>

いいなと思ったら応援しよう!

Ken @ インフラエンジニア
よろしければサポートお願いします!よりいい情報を発信します。