Computer

一つのApacheサーバーで複数ドメインのサイトを公開する方法

2020年3月7日

前回はCentOS 7上にLAMPをインストールしました。

CentOS 7にLAMPをインストールする手順

このページでは、ConoHa VPSのCentOS 7にLAMP環境を作る手順を紹介します。 サーバーの基本的な設定についてはこちらも参照してください。 LAMP環境はWordPressを念頭において ...

今回はApacheに最低限の設定を行い、ウェブサイトを公開できる状態にしたいと思います。

Apacheの動作確認

Apacheをインストールすると、最初はまだ何も設定されていません。

http://<自分のサーバーのIPアドレス>

という感じでブラウザのアドレスバーに直接入力すると、下のページが表示されるでしょう。

Apacheのテストページ

このページが表示されるということは、

  • Apacheがサーバー上で正常に実行している
  • サーバー上のHTTPポート(80番ポート)に外部からアクセスできる

という意味となります。

HTTPSに関しても

https://<自分のサーバーのIPアドレス>

と入力すれば確認できます。

ただしHTTPSに関しては、ページを開く前にブラウザからSSL証明書に関する警告が出て簡単にはアクセスさせてくれません。

インストール直後の状態では通称「オレオレ証明書」と呼ばれる暫定版のSSL証明書がインストールされているためにこの警告が出ます。

これについてはサーバー公開前後に正規の証明書を取得しますので、現時点では無視して問題ありません。

警告を無視してページを表示させると、先ほどと同じテストページが表示されます。

Apacheの設定

Apacheが動作していることを確認したら、実際の設定作業を行います。

ここでは、http://example.jp というURLでウェブサイトを公開するという前提で話を進めます。

バーチャルホストを設定する

/etc/httpd/conf.d/ http://フォルダの下に、vhost-example.conf という名前で設定ファイルを作ります。

ファイル名はなんでもいいのですが、個人的にはvhost- という名前を頭につけておくことをオススメします。こうすることでバーチャルホストの設定が一目瞭然になるのと、Apacheがバーチャルホストのファイルを最後に読み込ませることができます(バーチャルホストを他の設定ファイルよりも先に読ませてしまうと予期せぬ動作をすることがあります)。

<VirtualHost *:80>
  ServerName example.jp
  DocumentRoot /var/www/sites/example
</VirtualHost>

よく見ると大したことは書いてありません。

1行目では、ポート80に対するバーチャルホストの設定を行うと定義しています。

2行目はサーバーのアドレスですね。http://example.jpというアドレスでリクエストがきたらこのバーチャルホストを使うよという意味です。

3行目はhttp://example.jpというアドレスでアクセスされたらこのフォルダのコンテンツを表示してくれという指示になります。

これをvhost-example.conf  というファイルに保存します。

そしてサーバーの設定をリロードします。

sudo systemctl reload httpd

ドキュメントルートを作成する

先ほどのVirtualHostの設定で、DocumentRootを設定しました。

この場所はサーバー上のパスで、僕がいつも使っている場所を例として示しました。

僕は/var/www/sites フォルダ内に複数のフォルダを作ることで一つのサーバーで複数のドメインのサイトを公開しています。

場所は特に意味はありませんが、Apacheはデフォルトで/var/www/html という場所を使うのでそれに倣ってみました。

ここではexample.jpのためのドキュメントルートとなるフォルダを作成しましょう。

sudo mkdir -p /var/www/sites/example
sudo chown -R apache:apache /var/www/sites

こんな感じでフォルダを作って、フォルダの所有者をapacheにしておきましょう。

ついでに、index.htmlというファイルでも置いてみましょう。

<html>
<body>
It works!
</body>
</html>

テストしてみる

この時点で自分のPCのhostsファイルを書き換えて、このサーバーのIPアドレスをexample.jpというホスト名に指定しましょう。

111.222.333.444 example.jp

こうすると、example.jpというホスト名が111.222.333.444というIPアドレスに解決されます。

IPアドレスは自分のサーバーのIPアドレスに書き換えてください。

本来ならばDNSでやるところですが、今はまだテストなのでこれでやりましょう。

http://example.jpとアクセスして「It works!」というページが表示されればひとまず成功です。

ここでもう一度http://<自分のサーバーのIP> とアクセスしてみましょう。

ここで「Testing 123」というデフォルトのテストページが表示されればOKです。

Apacheはこの時点で、

  • http://<自分のサーバーのIP> = デフォルトの振る舞い
  • http://example.jp = example.jp用の振る舞い

をしていることになります。

これがバーチャルホストの基本的な使い方です。

バーチャルホストは複数作れるので、数を増やしていけば一つの複数サイトに対応することができます。

今はまだ考えていないかもしれませんが、ウェブサイトを一つ公開したら二つ目も公開したくなるかもしれません。

アクセス数が少ない立ち上げたばかりのウェブサイトなら、一つのVPSで複数サイトを公開して、アクセスが増えたりしてきたら別のサーバーに独立させたりするのが経済的だと思います。

IPアドレス直アクセス対策

バーチャルホスト機能を使って一つのサーバーで複数のサイトを同居させる場合、一つ注意しておきたい点があります。

それは、 IPアドレスで直接アクセスされた場合です。

IPアドレスで直接アクセスされた場合、厳密な振る舞いは忘れたのですが、複数同居していたサイトのうち最初に定義したサイトのコンテンツを表示したりと、予期せぬ動きをしてしまいます。

それを未然に防ぐための設定として、/etc/httpd/conf/httpd.conf ファイルをテキストエディタで開き、下の設定項目の直前あたりまで移動しましょう。

# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf

この上あたりに次のような設定を追加します。

<VirtualHost *:80>
    ServerName any
    <Location />
        Order Deny,Allow
        Deny from all
    </Location>
</VirtualHost>

ServerName any としていますが、これはすべてのサーバー名に対応したワイルドカード的なバーチャルホストで、明示的にホスト名を指定したバーチャルホストなどにマッチしなかった場合に使われます。

このバーチャルホストは、コンテンツの閲覧を禁止する(Forbidden)という意味の403ステータスコードをブラウザに返します。

この状態で再度、http://example.jpとhttp://<自分のサーバーIP>にアクセスしてみましょう。

http://example.jpで「It works!」と表示され、http://<自分のサーバーIP>でHTTP 403エラーが返ってきたら成功です。

-Computer

Copyright© dawaan , 2020 All Rights Reserved.