使用Apache为单个域名和单个IP地址服务两个网站

问题描述:

我想从同一个Ubuntu服务器使用Apache托管两个网站。我有一个IP地址,我只有一个域(它解析为IP地址)。所以我想请求这个域名给一个网站,并且请求这个IP地址给另一个。使用Apache为单个域名和单个IP地址服务两个网站

我将/ etc/apache2/sites-enabled中的符号链接指向两个文件,指向我的两个站点的配置。

其中包含:

<VirtualHost 1.2.3.4:80> 
    ServerName 1.2.3.4 
    stuff 
</VirtualHost> 

另一个则包含

<VirtualHost domain.net:80> 
    ServerName domain.net 
    stuff 
</VirtualHost> 

然而,当我启动Apache时,得到以下信息:

[warn] VirtualHost 1.2.3.4:80 overlaps with VirtualHost domain.net:80, the first has precedence, perhaps you need a NameVirtualHost directive 

,当我点我的浏览器在domain.net或1.2.3.4我得到我想要与ip地址关联的网站。

如果我删除了任何符号链接,那么将浏览器指向域名或IP地址将提供唯一启用的网站。 (正如你所希望的那样)。

据我所知,启用网站的两个配置文件都被立即加载,而包含ip地址的配置文件胜过包含域名的配置文件。该警告建议查看NameVirtualHost指令,但是我可以在网上找到的所有帮助都指的是您有两个域名指向同一个IP地址的情况。

一如既往,帮助或建议将不胜感激。

(对于它的价值,该网站都是Rails应用程序,和我使用的客运部署,但我不认为这是重要的在这里。)

+0

仅供参考,类似这样的问题上serverfault.com – 2010-02-09 20:17:25

这是我要做的事:

NameVirtualHost 1.2.3.4:80 

<VirtualHost 1.2.3.4:80> 
    ServerName localhost 
    DocumentRoot /var/www/default 
</VirtualHost> 

<VirtualHost 1.2.3.4:80> 
    ServerName mydomain.net 
    DocumentRoot /var/www/mydomain 
</VirtualHost> 

Apache为每个请求寻找合适的虚拟主机。如果它找不到与ServerNameServerAliases中的任何一个相匹配的那个,则它将采用第一个。在第一个VirtualHost中使用ServerName的用法并不重要,因为如果其他VirtualHosts都不匹配,它将始终使用。

+0

哥们都提供最好的服务,非常感谢你。 – grifaton 2010-02-09 20:20:49

+0

谢谢谢谢谢谢谢谢!我一直在试图找出如何阻止Apache服务随机内容,当有人做IP请求,现在我知道。 :) – johnjohn 2011-06-19 14:36:10

+1

所以你使用了一个虚拟主机文件的2个域名? – Alucard 2014-01-24 17:26:19

请确保您有指令

NameVirtualHost *:80 

在/etc/apache2/ports.conf

有这个问题,这里是我做过什么:

编辑的httpd。CONF

sudo vi /etc/apache2/httpd.conf 

添加此行

NameVirtualHost *:80 

注意:您可以替换*:80your_ip_address:80

现在创建域名配置文件。我用的是domain_name.com

sudo vi /etc/apache2/sites-available/domain.com 

这个添加到文件

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    ServerName www.domain.com 
    ServerAlias domain.com 
    DocumentRoot /var/www/domain.com/public_html/ 
    ErrorLog /var/www/domain.com/logs/error.log 
    CustomLog /var/www/domain.com/logs/access.log combined 
</VirtualHost> 

确保在domain.com配置的目录存在

/var/www/domain.com/public_html/ 
/var/www/domain.com/logs 

注意:使用像mkdir命令这根据需要

sudo mkdir /var/www/domain.com/public_html/ 
sudo mkdir /var/www/domain.com/logs 

现在,我们需要使这样的

sudo a2ensite domain.com 

新的配置文件,您将看到一个通知,重新启动Apache,使用此命令

/etc/init.d/apache2 restart 

现在,我们需要一个测试文件,查看

sudo vi /var/www/domain.com/public_html/index.html 

添加一些文字

Hello domain.com 

打开Web浏览器并转到您的新域

http://domain.com