使用 Apache 的 VPS 上的多个域

Posted

技术标签:

【中文标题】使用 Apache 的 VPS 上的多个域【英文标题】:Multiple Domains on a VPS with Apache 【发布时间】:2011-03-30 13:06:17 【问题描述】:

我计划很快获得一个 VPS,并有两个我想托管的网站。我使用主机文件为我的开发环境设置了本地虚拟主机以正确移植它。

希望我的问题很简单:当设置两个指向一个 VPS 服务器的独立域时,Apache 足够聪明,就像在本地环境中一样,可以自动将 domain.com 的任何请求过滤到正确的 VHOST 上。本地?我只是想确定:)

谢谢!

我问的例子:

说 Domain1.com 和 Domain2.com 都在我的 VPS 上。

当有人请求 www.Domain1.com 时,apache 会看到这一点并将其传递给 domain1.com 虚拟主机文件。 当有人请求 www.Domain2.com 时,apache 会看到这一点并将其传递给 domain2.com 虚拟主机文件。

【问题讨论】:

【参考方案1】:

从Hosting two domains using only one VPS? 重复我的回答,因为这里更相关。

作为一个完整的初学者,我一直在尝试在一个 Apache VPS 上托管多个域。教程有太多的信息让我感到困惑。

下面我将针对完全的初学者描述如何使用 Ubuntu 和 Apache 在一台 VPS 服务器上托管多个域。

重要提示!您需要使用 root 帐户来执行大多数操作。

重要提示!如果您之前尝试过对 apache 配置进行一些更改,请撤消它们。

创建虚拟主机

在服务器上为您的域创建文件夹。 例如:

/home/apache/domain1

/home/apache/domain2

将 index.html 文件与任何文本放在每个文件夹中。

This is domain1
This is domain2

转到/etc/apache2/sites-available 文件夹。

创建文件 domain1.conf

sudo nano domain1.conf

<VirtualHost *:80>
DocumentRoot /home/apache/domain1
ServerName domain1.com
ServerAlias www.domain1.com
</VirtualHost>

创建文件 domain2.conf

sudo nano domain2.conf

<VirtualHost *:80>
DocumentRoot /home/apache/domain2
ServerName domain2.com
ServerAlias www.domain2.com
</VirtualHost>

你可以用同样的方式创建子域。

sudo nano blog.conf

<VirtualHost *:80>
DocumentRoot /home/apache/blog
ServerName blog.domain.com
ServerAlias www.blog.domain.com
</VirtualHost>

启用创建的网站

sudo a2ensite domain1.conf
sudo a2ensite domain2.conf

重启apache

sudo service apache2 reload

将域重定向到服务器

仅当您将域名重定向到服务器 IP 时,创建的 VirtualHosts 才会起作用。域名只是可以转换为 IP 号码的名称。

本地计算机

要在本地机器上测试您的配置,您需要编辑 hosts 文件。

sudo nano /etc/hosts

它应该看起来像这样。

127.0.0.1       localhost domain1.com domain2.com

Hosts 文件告诉您的计算机需要将域重定向到本地计算机。

重要!如果您在主机文件中为现有域创建条目,例如

127.0.0.1       ***.com

您将无法访问该网站。

服务器

为了将域重定向到您的 Web 服务器,您需要为给定域创建或修改“A”型 DNS 记录到您服务器的 IP 地址。您可以通过您的域名注册商提供的面板控制来完成。

如果您不知道服务器的 IP 地址,请登录该服务器并输入命令行:

ifconfig

【讨论】:

【参考方案2】:

简单的答案是“是”,Apache 就是这么聪明。如果您习惯于将本地 vhost 文件与 hosts 文件结合使用来模拟本地域,则可以在 VPS 上应用完全相同的技术。您对 hosts 文件所做的部分本质上是创建一个本地名称服务器,除了 Apache 不知道其中的区别。只需为每个命名的 vhost 设置 ServerName 指令,您就会发现它的工作方式与本地相同。

【讨论】:

太棒了!感谢您为我确认。

以上是关于使用 Apache 的 VPS 上的多个域的主要内容,如果未能解决你的问题,请参考以下文章

使用 apache 在单个 VPS 上托管多个 laravel 5.5 项目?

一台 Apache 服务器上的多个域(WAMP)

单个 apache tomcat 上的多个域

Apache mod_rewrite 和多个域

在一个 IP 上托管多个 Golang 站点并根据域请求提供服务?

linux 下的 apache 绑定多个域名