使用具有单个域名和单个IP地址的Apache为两个网站提供服务

时间:2010-02-09 20:11:50

标签: apache

我正在尝试使用来自同一Ubuntu服务器的Apache托管两个网站。我有一个IP地址,我只有一个域(解析为IP地址)。所以我希望域名请求给一个网站,并请求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应用程序,我正在使用Passenger进行部署,但我认为这不重要。)

3 个答案:

答案 0 :(得分:9)

我就是这样做的:

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的任何一个,则它会占用第一个。ServerName。您在第一个VirtualHost中使用VirtualHosts的内容并不重要,因为如果其他{{1}}都不匹配,它将始终使用。

答案 1 :(得分:4)

如果有这个问题,我就是这样做的:

编辑httpd.conf

sudo vi /etc/apache2/httpd.conf

添加此行

NameVirtualHost *:80

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

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

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

将此添加到文件

<VirtualHost *:80>
     ServerAdmin admin@domain.com
     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

打开网络浏览器并转到新域名

http://domain.com

答案 2 :(得分:0)

确保您有说明

NameVirtualHost *:80
/etc/apache2/ports.conf中的