一回も披露したことのない豆知識

専用サーバーにてwebサイトを作成しています。
webサイトの会員ユーザ毎に、サブドメインを自動生成できるようにしたいと考えています。

ドメイン名:example.jp
サブドメイン:username.example.jp
対象ディレクトリ:/var/www/html/domains1/username/

ユーザが登録すると、上記のusernameフォルダが自動で作成されるようになっています。
そのフォルダ名を利用し、

username.example.jp のようなサブドメインでアクセスできるようにしたいです。

検索した結果
1. ネームサーバーにワイルドカードでAレコードを記述する。
2. Apacheの設定ファイルhttpd.conf にServerAliasを設定する。
この方法で設定してみました。

httpd.conf記述

<VirtualHost *:80>
ServerName www.example.jp
ServerAlias *.example.jp
VirtualDocumentRoot /var/www/html/domains1/%1/
</VirtualHost>

と、ここまでは設定し、実際に実現する事が出来ました。
ただ、上記のVirtualDocumentRootのところの、domains1 のディレクトリ内に作成するユーザーフォルダの数に制限(例えば1000とか)をかけようと考えていて、ユーザー登録が1000毎に、domains2, domain3と自動で作成されていくようにしています。

どのユーザも username.example.jp とサブドメインで表示するが、
domains1,domains2, domain3のように、DocumentRootがひとつでない。
※また、どのフォルダに入っているかわからないので検索が必要?

このような場合、どのような記述をすればよいのでしょうか?
そもそも実現可能なのかどなたかアドバイスいただけませんでしょうか。

A 回答 (1件)

無理じゃろ。

例え

NameVirtualHost *:80
<VirtualHost *:80>
 ServerName domains1.example.jp
 ServerAlias *.example.jp
 VirtualDocumentRoot /var/www/html/domains1/%1
</VirtualHost>
<VirtualHost *:80>
 ServerName domains2.example.jp
 ServerAlias *.example.jp
 VirtualDocumentRoot /var/www/html/domains2/%1
</VirtualHost>

というような設定が仮に出来たとして、実際にhoge.example.jpでアクセスされたら上だけを探しにいくと思う。
以下のような設定ならできる。けど、その都度ドメインの追加とhttpdの再起動が必要。

NameVirtualHost *:80
<VirtualHost *:80>
 ServerName domains1.example.jp
 ServerAlias hoge.example.jp mike.example.jp muka.example.jp cha.example.jp last.example.jp
 VirtualDocumentRoot /var/www/html/domains1/%1
</VirtualHost>
<VirtualHost *:80>
 ServerName domains2.example.jp
 ServerAlias momonga.example.jp goku.example.jp gohan.example.jp goten.example.jp
 VirtualDocumentRoot /var/www/html/domains2/%1
</VirtualHost>

複数IPがあれば話は別だが。もちろんDNSも振り分ける必要がある。

NameVirtualHost xxx.xxx.xxx.1:80
NameVirtualHost xxx.xxx.xxx.2:80
<VirtualHost xxx.xxx.xxx.1:80>
 ServerName domains1.example.jp
 ServerAlias *.example.jp
 VirtualDocumentRoot /var/www/html/domains1/%1
</VirtualHost>
<VirtualHost xxx.xxx.xxx.2:80>
 ServerName domains2.example.jp
 ServerAlias *.example.jp
 VirtualDocumentRoot /var/www/html/domains2/%1
</VirtualHost>

解決になってないけど、会員ページならいっその事サブサブドメインにして、サブドメイン+ユーザー名を選ばせたらどうかね。サブドメインの種類をきゃわいいのイカすのナウいの取り揃えたら意外と受けるかもよ。

NameVirtualHost *:80
<VirtualHost *:80>
 ServerName dora.example.jp
 ServerAlias *.dora.example.jp
 VirtualDocumentRoot /var/www/html/dra/%1
</VirtualHost>
<VirtualHost *:80>
 ServerName nobi.example.jp
 ServerAlias *.nobi.example.jp
 VirtualDocumentRoot /var/www/html/nobi/%1
</VirtualHost>

とにかく、同じワイルドカードのバーチャルホストをマージするような動作はできないと思う。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

なるほど、そうですよね。
実現できない事がはっきりしただけで収穫です!

linuxの場合、ディレクトリ内に作成できるディレクトリの最大数が約32,000のようなので、
すべてのユーザフォルダをひとつのディレクトリに詰め込んでしまいます。

万単位の会員が集まる可能性もありませんし。

助かりました、ありがとうございます!

お礼日時:2014/08/16 21:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!