如何在基于名称的虚拟主机上创建子域?

scy*_*gon 27 apache-http-server subdomain virtual-host

我有基于名称的托管,我们称之为my.address.com。我的朋友有一个“普通”地址,address.com并给了我一个可以通过 SSH 访问的虚拟机。

他还用端口创造了一些魔法,现在,安装 Apache 后,我可以/var/www通过my.address.com.

所以,问题是,我怎样才能创建一个子域test.my.address.com

Apache 的 Listen Directive应该有一些魔力,但我无法弄清楚。另外,我知道如何使用 Apache 创建本地可用的站点,但它不一样。

Der*_*ler 33

为了能够创建子域,您必须确保以下几点:

域名系统

所以其他人可以访问test.my.address.com,他们首先必须能够将该名称解析为您的虚拟机的 IP 地址。那怎么办呢?

您的朋友很可能已经在该区域中创建了一条A 记录,该记录address.com指向my您的 VM 的 IP 地址。

到现在为止还挺好。但是呢test.my?它可能还没有条目。

您的朋友也可以简单地添加*.my到该区域(并将其指向相同的 IP 地址)。然后所有请求something.my.address.com都将发送到您的 VM。伟大的!

Apache 虚拟主机

一旦可以访问您的 VM,Apache 就必须知道如何处理请求。这是我们使用Apache HTTP 服务器的虚拟主机功能的地方。

我通常在 Debian 上运行,所以我将在/etc/apache2/sites-available. 让我们在那里调用一个文件test.my.address.com并在其中填充信息。

<VirtualHost *:80>
        ServerName test.my.address.com
        ServerAdmin webmaster@my.address.com

        DocumentRoot /var/www/test.my.address.com/
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/test.my.address.com/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/test.my.address.com.error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/test.my.address.com.access.log combined
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

该文件中的关键设置ServerName指令。这告诉 Apache 该服务器应该以哪个名称可用。可以使用ServerAlias 指令指定其他名称。

如果您也使用 Debian,请不要忘记sudo a2ensite test.my.address.com在创建文件和sudo invoke-rc.d apache2 restart.