うっかりエンジニアのメモ

未来の自分に宛てたメモ

さくらVPSで複数の独自ドメインを運用する

さくらのVPSで、もともとサーバに付与されているipアドレスを生かしたまま、複数の独自ドメインを運用する手順を説明します。

環境

LAMP環境をすでに構築してあるものとします。

さくらVPSLAMP環境を構築する手順は過去記事を参考にどうぞ。

手順

ここでは例として、追加したいドメインは下記の2つとします。

DNSレコード設定

上記のドメインはさくらで取得していたので、さくらの管理画面からAレコードの指すipアドレスVPSサーバに付与されているものに変更するだけでした。5分程度で反映されました。

NameVirtualHost

Apacheが同じサーバ上で別々のドメインのサイトを運用する方法の一つが名前ベースのバーチャルホストです。Apacheは、クライアント(ブラウザ)から送られてくるHTTPHostヘッダを頼りに、どの独自ドメイン宛のリクエストなのかを判別します。

NameVirtualHostの有効化

/etc/httpd/conf/httpd.confを開き

#NameVirtualHost *:80

先頭の#を外します。

ドメインとの対応付け

ドメインに対するアクセスを、どのディレクトリに対応付けるかを設定します。 /etc/httpd/conf/httpd.confに書いてもよいのですが、ここで、/etc/httpd/conf.d/下にある.confで終わるファイルが、apacheの起動時にhttpd.confと同様に読み込まれることを利用します。

/etc/httpd/conf.d/moiranographia.com.confを新規作成し、下記を書きます。

<VirtualHost *:80>
  ServerName moiranographia.com
  DocumentRoot "/var/www/moiranographia.com/public_html"
  DirectoryIndex index.html index.php
  ErrorLog /var/log/httpd/moiranographia.com_error_log
  CustomLog /var/log/httpd/moiranographia.com_access_log combined
  AddDefaultCharset UTF-8
  <Directory "/var/www/moiranographia.com/public_html">
    AllowOverride All
  </Directory>
</VirtualHost>

独自ドメインが複数ある場合、同様にファイルの作成を繰り返します。

もともとサーバに付与されているipアドレスを生かす

Apacheの公式ドキュメントにもある通り、VirtualHostを有効にすると、もともとサーバに付与されているipアドレスの直打ちではアクセスできなくなります。

メインホストはなくなります

既にあるウェブサーバにバーチャルホストを追加する場合、 既存のウェブサーバに対しても ブロックを作らなければなりません。このバーチャルホストの ServerName と DocumentRoot は、グローバルな ServerName と DocumentRoot と同じものにします。また、このバーチャルホストを設定ファイルの中で先頭に置いて、デフォルトホストとして動作するようにします。

http://httpd.apache.org/docs/current/ja/vhosts/name-based.html より引用

ですので、httpd.confを編集します。

/etc/httpd/conf/httpd.confを開き、NameVirtualHost *:80の下あたりに、下記を追加します。

<VirtualHost *:80>
  ServerName xxx.xxx.xxx.xxx
  DocumentRoot "/var/www/html"
  DirectoryIndex index.html index.php
  ErrorLog /var/log/httpd/error_log
  CustomLog /var/log/httpd/access_log combined
  AddDefaultCharset UTF-8
  <Directory "/var/www/html">
    AllowOverride All
  </Directory>
</VirtualHost>

xxx.xxx.xxx.xxx: もともとVPSに割り当てられていたipアドレス

この設定により、たとえばxxx.xxx.xxx.xxx/example.htmlへのリクエストに対して、apache/var/www/html/example.htmlをレスポンスとして返します。

apacheを再起動します。

service httpd restart