使用一个VPS托管两个域名?

65

这可行吗?有人告诉我可以,但我不确定。

如果可以的话,该怎么做呢?我有一个 /www 文件夹,里面放着我的网站。我应该如何配置两个不同的站点?


5
这并不是一个编程问题,应该发布在网站管理员网站上。简而言之,如果您的VPS合同没有禁止此操作,那么是可以的。 - Marc B
1
是的,这是某种灰色地带。 - Artemix
3
我投票关闭此问题,因为它不属于编程问题,且在 Stack Overflow 上是离题的。关于您网站的非编程问题应该在 [webmasters.se] 上提问。请以后在那里提出此类问题。 - Stephen Ostermiller
3个回答

72
作为一个完全的新手,我一直在尝试在一个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 文件夹。

/etc/apache2/sites-available

创建名为 domain1 的文件。
sudo nano domain1

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

创建域名为domain2的文件
sudo nano domain2

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

您可以以同样的方式创建子域名。
sudo nano blog

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

启用已创建的站点

sudo a2ensite domain1
sudo a2ensite domain2

重启Apache

sudo service apache2 reload

将域名重定向到服务器

只有在将您的域名重定向到服务器IP后,创建的虚拟主机才能正常工作。域名只是可以转换成IP数字的名称。

本地计算机

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

sudo nano /etc/hosts

它应该看起来像这样。

127.0.0.1       localhost domain1.com domain2.com

Hosts文件告诉你的电脑该域名需要被重定向到本地机器。

重要提示! 如果你在hosts文件中为已存在的域名创建条目,例如:

127.0.0.1       stackoverflow.com

您将无法访问该网站。

服务器

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

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

ifconfig

8
在 sites-available 中创建时,它们的扩展名为 .conf,因此应该使用 sudo nano domain1.conf 而不是 sudo nano domain1。如果您已经创建了文件,请使用 mv 重命名文件。 - george rizk
1
此外,在指定 DocumentRoot 时,路径应该是一个字符串。应该使用 "/home/apache/blog" 而不是 /home/apache/blog。 - george rizk
有关扩展和“网站X不存在”错误,请查看:https://dev59.com/kGIj5IYBdhLWcg3wIx7W#20592059 - Asqan
对于403禁止访问的错误,请检查:https://www.digitalocean.com/community/questions/forbidden-you-don-t-have-permissions-to-access-on-this-server - Asqan
请参见https://dev59.com/0GEh5IYBdhLWcg3w_Xn5。 - Caleb Jay

60

步骤如下:

  1. 将两个域名指向 VPS 的 IP。

  2. 配置已安装在 VPS 上的 Web 服务器以响应这两个域名。

对于使用 Passenger 的 Nginx,只需将条目添加到您的 nginx.conf 文件中即可。例如:

server {
      listen 80;
      server_name domain1;
      root /path/to/your/project;
      passenger_enabled on;
   } 
server {
      listen 80;
      server_name domain2;
      root /path/to/your/project;
      passenger_enabled on;
   }

请查阅您的Web服务器文档以执行类似操作。


1
谢谢您的回答,我正在使用Apache作为Web服务器,有什么想法可以实现这个吗?如果没有,有什么链接可以提供吗?我已经尝试了谷歌搜索,但到目前为止没有找到。 - Artemix
3
我从未在生产中使用过Apache,但我找到了这个链接:http://httpd.apache.org/docs/2.0/vhosts/examples.html。 - Nerian
如果两个主机名的DNS解析结果相同,并且请求到达相同的IP地址和端口号,那么Web服务器如何为这两个域名提供正确的站点?答案在HTTP的“Host:”头中。根据请求中的“Host:”头,Web服务器将选择正确的网站进行服务。 - MediumOne

15

您可以始终在VPS上使用一个或两个IP地址配置名称服务器。一旦配置完成,您就可以开始使用这些名称服务器指向多个域名。

在我的VPS上只有一个IP地址,但我在那里托管了35个以上的网站....


4
你想知道如何在 VPS 上发送请求到不同的端口? - Blub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接