繁体   English   中英

使用Plesk时如何动态创建虚拟主机(Apache)?

[英]How do I create vhosts (Apache) on the fly while using Plesk?

我已经在PHP上构建了一个可在Apache上运行的应用程序。 我需要能够动态添加虚拟主机,以便使我的应用程序写入sites-enabledsites-enabled ,然后重新加载Apache。

唯一的问题是,我别无选择,只能在此服务器上也使用Plesk。 我如何在Plesk上进行哪些编辑,以便能够在不让Plesk覆盖它或引起任何问题的情况下即时添加虚拟主机?

我从来没有太多机会深入研究Plesk,因此任何指导都将不胜感激。

这是Plesk API的Zend Framework模块类,可以帮助您:

class Application_Model_PleskApi {

/**
 * Creates Web User
 *
 */
public function createWebUser($params) {
    $xmldoc = new DomDocument('1.0', 'UTF-8');
    $xmldoc->formatOutput = true;

    $packet = $xmldoc->createElement('packet');
    $packet->setAttribute('version', '1.6.3.0');
    $xmldoc->appendChild($packet);

    $webuser = $xmldoc->createElement('webuser');
    $packet->appendChild($webuser);

    $add = $xmldoc->createElement('add');
    $webuser->appendChild($add);

    $add->appendChild($xmldoc->createElement('site-id', $params['site-id']));
    $add->appendChild($xmldoc->createElement('login', $params['login']));
    $add->appendChild($xmldoc->createElement('password', $params['password']));
    $add->appendChild($xmldoc->createElement('ftp-quota', 100));

    return $xmldoc;
}

public function createSite($params) {
    $xmldoc = new DomDocument('1.0', 'UTF-8');
    $xmldoc->formatOutput = true;

    $packet = $xmldoc->createElement('packet');
    $packet->setAttribute('version', '1.6.3.0');
    $xmldoc->appendChild($packet);

    $site = $xmldoc->createElement('site');
    $packet->appendChild($site);

    $add = $xmldoc->createElement('add');
    $site->appendChild($add);

    $gen_setup = $xmldoc->createElement('gen_setup');
    $add->appendChild($gen_setup);
    $hosting = $xmldoc->createElement('hosting');
    $add->appendChild($hosting);

    $gen_setup->appendChild($xmldoc->createElement('name', $params['name']));
    $gen_setup->appendChild($xmldoc->createElement('webspace-id', $params['webspace-id']));

    $vrt_hst = $xmldoc->createElement('vrt_hst');
    $hosting->appendChild($vrt_hst);

    $property = $xmldoc->createElement('property');
    $vrt_hst->appendChild($property);
    $property->appendChild($xmldoc->createElement('name', 'php'));
    $property->appendChild($xmldoc->createElement('value', 'true'));

    return $xmldoc;
}

/**
 * Creates mail account
 *
 */
public function createMailAccount($params) {
    $xmldoc = new DomDocument('1.0', 'UTF-8');
    $xmldoc->formatOutput = true;

    $packet = $xmldoc->createElement('packet');
    $packet->setAttribute('version', '1.6.3.0');
    $xmldoc->appendChild($packet);

    $mail = $xmldoc->createElement('mail');
    $packet->appendChild($mail);

    $create = $xmldoc->createElement('create');
    $mail->appendChild($create);

    $filter = $xmldoc->createElement('filter');
    $create->appendChild($filter);

    $site_id = $xmldoc->createElement('site-id', $params['site-id']);
    $filter->appendChild($site_id);

    $mailname = $xmldoc->createElement('mailname');
    $filter->appendChild($mailname);

    $name = $xmldoc->createElement('name', $params['mailname']);
    $mailname->appendChild($name);

    $mailbox = $xmldoc->createElement('mailbox');
    $mailname->appendChild($mailbox);

    $enabled = $xmldoc->createElement('enabled', 'true');
    $mailbox->appendChild($enabled);

    $password = $xmldoc->createElement('password');
    $mailname->appendChild($password);

    $value = $xmldoc->createElement('value', $params['password']);
    $password->appendChild($value);

    $type = $xmldoc->createElement('type', $params['password-type']);
    $password->appendChild($type);

    return $xmldoc;
}

/**
 * Returns DOM object representing request for information about all available domains
 *
 * @return DOMDocument
 */
function domainsInfoRequest() {
    $xmldoc = new DomDocument('1.0', 'UTF-8');
    $xmldoc->formatOutput = true;

    // <packet>
    $packet = $xmldoc->createElement('packet');
    $packet->setAttribute('version', '1.4.1.2');
    $xmldoc->appendChild($packet);

    // <packet/domain>
    $domain = $xmldoc->createElement('domain');
    $packet->appendChild($domain);

    // <packet/domain/get>
    $get = $xmldoc->createElement('get');
    $domain->appendChild($get);

    // <packet/domain/get/filter>
    $filter = $xmldoc->createElement('filter');
    $get->appendChild($filter);

    // <packet/domain/get/dataset>
    $dataset = $xmldoc->createElement('dataset');
    $get->appendChild($dataset);

    // dataset elements
    $dataset->appendChild($xmldoc->createElement('limits'));
    $dataset->appendChild($xmldoc->createElement('prefs'));
    $dataset->appendChild($xmldoc->createElement('user'));
    $dataset->appendChild($xmldoc->createElement('hosting'));
    $dataset->appendChild($xmldoc->createElement('stat'));
    $dataset->appendChild($xmldoc->createElement('gen_info'));

    return $xmldoc;
}

/**
 * Prepares CURL to perform Plesk API request
 *
 * @param type $host
 * @param type $login
 * @param type $password
 * @return resource
 */
function curlInit($host, $login, $password) {
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, "https://{$host}:8443/enterprise/control/agent.php");
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($curl, CURLOPT_HTTPHEADER, array("HTTP_AUTH_LOGIN: {$login}", "HTTP_AUTH_PASSWD: {$password}", "HTTP_PRETTY_PRINT: TRUE", "Content-Type: text/xml"));

    return $curl;
}

/**
 * Performs a Plesk API request, returns raw API response text
 *
 * @param type $curl
 * @param type $packet
 * @return string
 * @throws ApiRequestException
 */
function sendRequest($curl, $packet) {
    curl_setopt($curl, CURLOPT_POSTFIELDS, $packet);
    $result = curl_exec($curl);
    if (curl_errno($curl)) {
        $errmsg = curl_error($curl);
        $errcode = curl_errno($curl);
        curl_close($curl);
        throw new ApiRequestException($errmsg, $errcode);
    }
    curl_close($curl);
    var_dump($result);
    return $result;
}

/**
 * Looks if API responded with correct data
 *
 * @param type $response_string
 * @return SimpleXMLElement
 * @throws ApiRequestException
 */
function parseResponse($response_string) {
    $xml = new SimpleXMLElement($response_string);
    if (!is_a($xml, 'SimpleXMLElement'))
        throw new ApiRequestException("Can not parse server response: {$response_string}");
    return $xml;
}

/**
 * Check data in API response
 *
 * @param SimpleXMLElement $response
 * @throws ApiRequestException
 */
function checkResponse(SimpleXMLElement $response) {
    $resultNode = $response->domain->get->result;
    // check if request was successful
    if ('error' == (string) $resultNode->status)
        throw new ApiRequestException("Plesk API returned error: " . (string) $resultNode->result->errtext);
}

}

class ApiRequestException extends Exception {

}

在这里,您有plesk API参考: http : //download1.parallels.com/Plesk/PP10/10.1.1/Doc/en-US/online/plesk-api-rpc/index.htm

使用Plesk处理时有些棘手,因为控制面板喜欢控制Apache配置文件,并且某些文件由Plesk自动生成以确保系统设置保持一致。

您可以根据需要采取多种方法。

1)使用Plesk API使您的应用在本地计算机上设置新站点。 这将使您可以通过控制面板以及所需的一切来完全控制这些站点。 这也是最复杂的解决方案。

2)如果站点可以使用相同的域寻址,即您要设置子域,则在conf / vhost.conf中为主域记录设置一个简单的通配符即可:

ServerAlias * .mydomain.com

然后,您可以使用此文件通过将其写入(小心!)应用程序来将其他域与主域相关联。

3)设置和配置Apache模块mod_vhost_alias-尽管Plesk可能会让您头疼。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM