自动子域名创建亚马逊ec2

时间:2010-11-30 08:09:54

标签: apache amazon-ec2 subdomain

我正在使用amazon ec2 ....我想要一个脚本,当用户注册或用户可以根据需要创建子域名时创建子域名。?

任何人都可以为此建议一个脚本..最好是php ..

由于

3 个答案:

答案 0 :(得分:5)

如果您使用的是apache web服务器和fedora linux,则必须执行以下操作

在你的dns中添加一个通配符条目。假设您的域名是demo.com,dns条目如

*.demo.com IN A 192.168.1.100

用ip替换ip。

然后,anything.demo.com将进入您的服务器。

我们必须配置apache来处理子域。

对于每个子域,我们必须

  • 创建文档根文件夹
  • 创建虚拟主机文件和
  • 重启apache

以下php符合上述想法。

    <?php
    define('DOMAIN','demo.com');
    define('DOCROOT','/home/username/www/');
    define('CONF_FOLDER','/etc/httpd/conf.d/');

    /*
    * Function to create conf file in conf.d folder
    */
    function createNewVhostFile($subdomain) {
        $filename   = CONF_FOLDER.$subdomain.'.conf';
        $fh         = fopen($filename, 'w') or die("can't open file");
        $servername = $subdomain.".".DOMAIN;
        $docroot    =  DOCROOT.$subdomain; 

    $virtualhost = <<<HEREDOC
    <VirtualHost $servername > 
     DocumentRoot $docroot
     ServerName  $servername
     ServerAlias $servername
    </VirtualHost> 
    HEREDOC;

        fwrite($fh, $virtualhost);
        fclose($fh);
    }

    /*
    * Function to restart apache
    */
    function restartApache() {
        $configtest = `apachectl configtest 2>&1`;
        echo $configtest;
        if(strtolower(trim($configtest)) == 'syntax ok'){
            $restart = `/etc/init.d/httpd restart 2>&1`;
            echo $restart;
        }
    }

    /*
    * Create document root folder.
    */
    function createDocRoot($subdomain){
        $docroot =  DOCROOT.$subdomain; 
        if(is_dir($subdomain)){
            echo "Document root allready exists.";
        }else{
            mkdir($docroot,644);
        }
    }

    $subdomain = "sub";
    createDocRoot($subdomain);
    createNewVhostFile($subdomain);
    restartApache();
    ?>

您必须以root用户身份运行此脚本。在虚拟主机配置文件中,您可以添加更多选项。您还可以查看similar question问题的答案。

希望有所帮助。

答案 1 :(得分:1)

答案 2 :(得分:0)

你可以实际使用RewriteMap ..它也允许你映射域名(如果你想分支到那里)。

这样的事情应该有效 -

RewriteMap lowercase int:tolower
RewriteMap domainname txt:/var/conf/domain.map
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
RewriteCond ${domainname:%1} ^(/.*)$
RewriteRule ^/(.*)$ %1/$1 [L,NC,QSA]

现在您可以使用PHP或其他任何东西来创建此域名文件,该文件将遵循格式 -

<domain name> <targeted path on the server>

域/子域和服务器上的目标路径。

所以对于例如。

example.com /myvirtualhostingserver/examplesite
subdomain.demo.com /myvirtualhostingserver/subdomain

现在您只需将example.com指向您的服务器即可!

此方法允许您保持子域文件夹名称独立于子域名(完全取决于您的用例)。