DreamerDreamのブログ

夢想家の夢です。〜揚げたてのモヤっとしたものをラフレシアと共に〜

Apacheで同じIPアドレスでドメインごとにWebページを綺麗に振り分ける方法

Webサーバーの作り方を知ってホームページを自作するとき、「複数のページをドメインごとに振り分けたい」と思うことがあるでしょう。 

 

ドメインIPアドレスと接続ポートの関係性を知った段階の人なら

「複数のドメインで複数のホームページを開くにはポートを複数増やさないといけないんじゃないのか?」

という疑問を持つと思います。持ちませんか?僕はすこし前まではそう思ってました。

 

つまり、

hello.com

world.com

という2つのドメインを取得してホームページを運用する場合、

hello.comはそのままアクセス出来るけど

world.comに繋ぐとwwwアクセスでは同じ80番ポートなので同じページが表示されてしまう!

だからworld.com:81という風に接続ポートを分ける必用があるんじゃないの?

f:id:DreamerDream:20181013093903p:plain

という疑問です。

 

答えは、違います!同じIPアドレス、同じ80番ポートでもアクセスしてきたアドレスによってApache等のサーバーソフトでドメインごとにページをいくつでも振り分けることが出来るのです!

f:id:DreamerDream:20181013094032p:plain

Apacheの場合VirtualHostという機能を利用します。

 

例えば、静的なページで設定する場合

CentOS、Apache2.4使用の場合)

-- /etc/httpd/conf/httpd.conf --

Listen 80

<VirtualHost *:80>

    Alias / /var/www/hello/
    ServerName hello.domain.jp

    CustomLog   logs/hello.access.log combined

    ErrorLog   logs/hello.error.log

    <Directory /var/www/hello>

        Require all granted

    </Directory>

</VirtualHost>

<VirtualHost *:80>

    Alias / /var/www/world/
    ServerName world.domain.jp

    CustomLog   logs/world.access.log combined

    ErrorLog   logs/world.error.log

    <Directory /var/www/world>

        Require all granted

    </Directory>

</VirtualHost>

 

こう記述することで

hello.domain.jpにアクセスされたページは/var/www/helloディレクトリへ、

world.domain.jpにアクセスされたページは/var/www/worldディレクトリへ

と振り分けることができます。

CustomLog   logs/hello.access.log combined

ErrorLog   logs/hello.error.log

この記述は、アクセスログとエラーログを見やすく振り分けています。

こすると/var/log/httpd/内にhello.access.logworld.access.logといったログがページによって振り分けられるので便利です。

 

また、デフォルトでモジュールをインポートしている項目に

Include conf.modules.d/*.conf

という記述が見られると思いますが、同じように.confファイルとすることで設定ファイルをファイルとして振り分けることも出来ます。

例えば、

/etc/httpd/conf/extra/hello.conf

 

<VirtualHost *:80>

    Alias / /var/www/hello/
    ServerName hello.domain.jp

    CustomLog   logs/hello.access.log combined

    ErrorLog   logs/hello.error.log

    <Directory /var/www/hello>

        Require all granted

    </Directory>

</VirtualHost>

 

 

/etc/httpd/conf/extra/world.conf

 

<VirtualHost *:80>

    Alias / /var/www/world/
    ServerName world.domain.jp

    CustomLog   logs/world.access.log combined

    ErrorLog   logs/world.error.log

    <Directory /var/www/world>

        Require all granted

    </Directory>

</VirtualHost>

 

と記述したページを別々に作った場合、

/etc/httpd/conf/httpd.conf

Listen 80

Include conf/extra/hello.conf 

Include conf/extra/world.conf

 

と記述することで上と同じように連続した設定として読み込むことが出来ます。

またワイルドカード

Include conf/extra/*.conf

とすることでextraディレクトリ内の設定を全部読むということも出来ます。