автоматизированное создание поддоменов amazon ec2 - PullRequest
0 голосов
/ 30 ноября 2010

Я использую amazon ec2 .... Мне нужен скрипт, который создает субдомен, когда пользователь регистрируется, или у пользователя есть возможность создать субдомен при необходимости ...?

Может кто-нибудь предложить сценарий для этого.желательно php ..

спасибо

Ответы [ 3 ]

5 голосов
/ 13 декабря 2010

Если вы используете веб-сервер Apache и Fedora Linux, вы должны сделать следующее

В вашем днс добавить подстановочный знак. Предположим, что ваше доменное имя demo.com dns-запись типа

*.demo.com IN A 192.168.1.100

Замените ip на ваш ip.

Тогда что-нибудь .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. В файле конфигурации виртуального хоста вы можете добавить дополнительные параметры. Вы также можете проверить ответ на аналогичный вопрос вопрос.

Надеюсь, это поможет.

1 голос
/ 09 декабря 2010

Вы можете взглянуть на новую функцию Amazon AWS:

http://aws.amazon.com/route53/

http://aws.typepad.com/aws/2010/12/amazon-route-53-the-aws-domain-name-service.html

0 голосов
/ 02 мая 2015

На самом деле вы можете использовать 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.map, который будет иметь следующий формат -

<domain name> <targeted path on the server>

Домен / Субдомен и целевой путь на сервере.

Так, например,

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

Теперь вам просто нужно указать example.com на ваш сервер!

Этот метод позволяет сохранить имя папки поддомена независимо от имени поддомена (полностью зависит от вашего варианта использования).

...