Apache默认虚拟主机

Apache默认虚拟主机,apache,virtualhost,Apache,Virtualhost,如何在Apache中设置默认VirtualHost 最好,我希望默认主机不与IP地址主机相同。现在我有这样的东西: NameVirtualHost * <VirtualHost *> ServerAdmin admin@domain.com DocumentRoot /someOtherDir/ ServerAlias ip.of.the.server </VirtualHost> <VirtualHost *> Serve

如何在Apache中设置默认VirtualHost

最好,我希望默认主机不与IP地址主机相同。现在我有这样的东西:

NameVirtualHost *

<VirtualHost *>
    ServerAdmin admin@domain.com
    DocumentRoot /someOtherDir/
    ServerAlias ip.of.the.server
</VirtualHost>

<VirtualHost *>
    ServerAdmin admin@domain.com
    DocumentRoot /someroot/
    ServerAlias domain.com *.domain.com
</VirtualHost *>
NameVirtualHost*
服务器管理员admin@domain.com
DocumentRoot/someOtherDir/
服务器别名ip.of.the.server
服务器管理员admin@domain.com
DocumentRoot/someroot/
ServerAlias domain.com*.domain.com

如果某个域被转发到我的服务器,但不在此vhost.conf文件中,则会按预期加载/someOtherDir/中的文件。但是我希望能够为IP地址本身和未添加到vhost.conf文件的域使用不同的根。这可能吗?

该选项将是一个不错的选项。

我找到了答案:我记得如果没有找到其他匹配的块,Apache将使用第一个块,因此我在块的顶部添加了一个不带
serveralias
的块:

NameVirtualHost *

<VirtualHost *>
    DocumentRoot /defaultdir/
</VirtualHost>

<VirtualHost *>
    ServerAdmin admin@domain.com
    DocumentRoot /someOtherDir/
    ServerAlias ip.of.the.server
</VirtualHost>

<VirtualHost *>
    ServerAdmin admin@domain.com
    DocumentRoot /someroot/
    ServerAlias domain.com *.domain.com
</VirtualHost>
NameVirtualHost*
DocumentRoot/defaultdir/
服务器管理员admin@domain.com
DocumentRoot/someOtherDir/
服务器别名ip.of.the.server
服务器管理员admin@domain.com
DocumentRoot/someroot/
ServerAlias domain.com*.domain.com

另一种设置是将默认虚拟主机放在配置文件的末尾而不是开头。这样,在与默认虚拟主机匹配之前,将检查所有备选虚拟主机

例如:

NameVirtualHost *:80
Listen 80

...

<VirtualHost *:80>
        ServerName host1
        DocumentRoot /someDir
</VirtualHost>

<VirtualHost *:80>
        ServerName host2
        DocumentRoot /someOtherDir
</VirtualHost>

<VirtualHost *:80>
        DocumentRoot /defaultDir
</VirtualHost>
NameVirtualHost*:80
听80
...
服务器名主机1
DocumentRoot/someDir
服务器名主机2
DocumentRoot/someOtherDir
DocumentRoot/defaultDir

如果您使用的是Debian风格的虚拟主机配置(站点可用/站点启用),设置默认虚拟主机的一种方法是首先在httpd.conf或apache.conf(或主配置文件)中包含特定的配置文件


这里的其他答案对我不起作用,但我找到了一个非常简单的解决方案

我将默认值设置为最后列出的值,并将其设置为
ServerAlias*

例如:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName www.secondwebsite.com
    ServerAlias secondwebsite.com *.secondwebsite.com
    DocumentRoot /home/secondwebsite/web
</VirtualHost>

<VirtualHost *:80>
    ServerName www.defaultwebsite.com
    ServerAlias *
    DocumentRoot /home/defaultwebsite/web
</VirtualHost>
NameVirtualHost*:80
服务器名www.secondwebsite.com
ServerAlias secondwebsite.com*.secondwebsite.com
DocumentRoot/home/secondwebsite/web
服务器名www.defaultwebsite.com
服务器别名*
DocumentRoot/home/defaultwebsite/web

如果访问者没有明确选择访问以
secondwebsite.com
结尾的网站,他们将获得默认网站。

我会说什么对我有效,上面的其他答案对我的情况毫无帮助。我希望它能帮助别人

事实上,我在EC2LinuxAMI和Apache/2.4.39(Amazon)上使用虚拟主机配置(站点可用/站点启用)。因此,我有一个ec2实例来服务许多站点(域)

考虑到您已经安装并运行了虚拟主机。在我的/etc/httpd/sites文件夹中,我有一些带有域名(后缀.conf)的文件,例如:domain.com.conf。创建一个这样的新文件

sudo nano/etc/httpd/sites available/domain.com.conf


服务器名www.domain.com
ServerAlias domain.com
DocumentRoot/var/www/html/domain
对于站点中可用的每个file.conf,我创建一个符号链接:

sudo ln-s/etc/httpd/sites available/domain.com.conf/etc/httpd/sites enabled/domain.com.conf

这是默认配置,因此,如果通过服务器的IP直接访问,您将被重定向到sites available文件夹中第一个文件(.conf)的DocumentRoot,并按文件名排序

要在通过IP访问时拥有默认的DocumentRoot文件夹,您必须创建一个名为0a.conf的文件,然后apache将服务于此站点,因为此新文件将是站点中第一个可用的文件夹

必须创建符号链接:

sudo ln-s/etc/httpd/sites available/0a.conf/etc/httpd/sites enabled/0a.conf

要检查服务订单,请使用它:

sudo apachectl-S

现在,重新启动apache,并检查它


快乐=)

我也有同样的问题。我可以通过在虚拟主机的IncludeOptional指令之前的httpd.conf中添加以下内容来修复它。现在localhost和ip192.168.x.x都指向Apache的默认测试页面。所有其他虚拟主机都按预期工作

<VirtualHost *:80>
    DocumentRoot /var/www/html
</VirtualHost>

DocumentRoot/var/www/html

参考资料:

强制性-之前的答案对我都不适用。在这个Apache配置中,我继承了一个奇怪的组合:基于IP地址的虚拟主机和*vHost(未分配/捕获所有IP地址)的虚拟主机

我希望Apache为未配置的主机提供相同的页面

我有:未配置的主机转到
000 default.conf
之后的第一个vhost。不管我将*:80捕获所有定义为第一个vhost,Apache都会加载第一个定义的站点,而不是默认的vhost:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
</VirtualHost>
通知—在这样的配置中,*vhost无法工作,因此您需要将IP地址应用于所有vhost。

解决方案是:

#apache2.conf
#@警告这是apache 2.2特有的
名称虚拟主机*:80
听80
# ...
#aaaa.com.conf
ServerName aaaa.com
DocumentRoot/defaultDir
#host1.conf
服务器名主机1
DocumentRoot/someDir
#host2.conf
服务器名主机2
DocumentRoot/someOtherDir

在我的例子中,为了工作,我创建了一个
VirtualHost
(即
VirtualHost
per
CNAME
)名为
aaaa.com
,因为我对不同的
VirtualHost
有不同的文件,并且知道Apache按字母顺序读取它们。

你能提供一个例子吗?我在本文档顶部已经有了行名VirtualHost*。如果我想有一个默认页面,我需要如何更改它?你能扩展你的答案吗?By(不带“编辑:”、“更新:”,或类似内容-答案应显示为已编写
<VirtualHost *:80>
    DocumentRoot /var/www/html
</VirtualHost>
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
</VirtualHost>
<VirtualHost 192.168.10.10:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
</VirtualHost>

<VirtualHost 192.168.10.10:443>
  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/html
  SSLEngine On
  ...
</VirtualHost>
AH00548: NameVirtualHost has no effect and will be removed in the next release /etc/apache2/sites-enabled/000-default.conf:50
192.168.10.10:80        is a NameVirtualHost
         default server server.tld (/etc/apache2/sites-enabled/000-default.conf:34)
         port 80 namevhost server.tld (/etc/apache2/sites-enabled/000-default.conf:34)
         port 80 namevhost some-site.tld (/etc/apache2/sites-enabled/100-some-site.tld.vhost:7)

...

46.23.86.103:443       is a NameVirtualHost
         default server server.tld (/etc/apache2/sites-enabled/000-default.conf:38)
         port 443 namevhost server.tld (/etc/apache2/sites-enabled/000-default.conf:38)
         port 443 namevhost some-site.tld (/etc/apache2/sites-enabled/100-some-site.tld.vhost:182)

...

*:80                   is a NameVirtualHost
         default server server.tld (/etc/apache2/sites-enabled/000-default.conf:1)
         port 80 namevhost server.tld (/etc/apache2/sites-enabled/000-default.conf:1)