2014-11-04 47 views
1

假设blah.com,blah2.com都指向IP = 5.31.111.7的同一台服务器。Apache VirtualHost:同一IP上的多个站点

我想的是:

  • 访问blah.com供应/var/www/site1

  • 访问blah2.com供应/var/www/site1

  • 访问5.31.111.7供应/var/www/site2

我试图

<VirtualHost *:80> 
    DocumentRoot /var/www/site1 
</VirtualHost> 
<VirtualHost 5.31.111.7:80> 
    DocumentRoot /var/www/site2 
</VirtualHost> 

,但现在一切都将/var/www/site2,这不是我想要的东西。

如何配置VirtualHost,使服务的网站取决于URL?

PS:为什么我应该在/etc/apache2/sites-enabled/000-default而不是/etc/apache2/apache2.conf?我不明白这个sites-enabled/sites-available/default命名...为​​什么Debian上有这么多不同的配置文件默认为这么简单的东西?

+0

[apache:不同的虚拟主机在相同端口](http://stackoverflow.com/questions/6069892/apache-different-virtualhosts-in-the-same-port) – 2014-11-04 12:03:27

回答

4

你想要做什么叫做Name-Based Virtual Hosting,你需要

NameVirtualHost *:80 

启用它的80端口,并为每个虚拟主机,你需要给姓名(或名称):

<VirtualHost *:80> 
ServerName blah2.com 
ServerAlias www.blah2.com 

DocumentRoot /var/www/site1 
</VirtualHost> 

请注意,在进行基于名称的虚拟主机时,有limitations on SSL/TLS,但是自从POODLE发布以来,人们开始需要TLS,所以古老的浏览器无论如何都运气不佳。

至于配置文件,有两类配置文件非常有用:包含更新将被覆盖的默认配置文件,以及不会触及的本地配置文件,或者甚至更好,目录已满的前者和一个完整的后者目录。 (因为额外的软件包可能需要进行配置设置,它们将全部安装在前一个地方,而您应该只在第二个地方更改/覆盖配置。)

+0

谢谢!它与你的代码一起工作,即使没有'NameVirtualHost *:80'。关于配置文件,什么是网站启用/网站可用?这不是非常明确...... – Basj 2014-11-04 12:05:56

+0

@Basj:我会假设你的意图是,你将符合链接的'sites-enabled'放到'sites-available'中,用于你想要使用的那些网站。这样,您可以通过删除符号链接来快速切换某些内容,并且可以在'sites-available'中准备事物,而不必立即担心输入错误。 (请记住,在编辑配置文件时,您的同事可能会重新启动服务器。) – 2014-11-04 12:15:55